vue 實現dot-dropdown

<template><div class="app-container"><div class="mt30"></div><el-row :gutter="20"><!-- title --><!-- <div class="modt-box">導航管理</div> --><el-col :span="2"><div class="grid-content bg-purple"></div></el-col><el-col :span="6"><!-- default-expand-all=""  tree-border--><div class="lefttree"><div class="tit-box">菜單目錄</div><el-treeclass="treeclass"default-expand-all=""ref="tree":data="treeData":props="defaultProps"@node-click="nodeclick"@check-change="handleClick"check-strictlynode-key="id"><!-- 操作的插槽 --><span class="custom-tree-node" slot-scope="{ node, data }"><div class="custom-tree-node-wrapper"><span class="custom-tree-node-label">{{ node.label }}</span><span class="operate-btns"><dot-dropdown :eventsa="dropevents" :data="{node,data}" @addPeerNode="addPeerNode" @addNode="addNode" @editNode="editNode" @removeNode="removeNode" /></span></div></span></el-tree></div></el-col><el-col :span="2"><div class="grid-content bg-purple"></div></el-col><el-col :span="16"><div class="rightform"><div class="tit-box">{{tit}}</div><!-- <div class="mod-btnbox"><el-button type="primary" icon="el-icon-plus" @click="addModule">添加</el-button></div>--><el-form ref="form" :model="form" label-width="80px" :rules="rules"><!-- <el-form-item label="父級菜單" prop="parentId"><el-select v-model="form.parentId" placeholder="請選擇" class="selectw"><el-option v-for="parm in fmenu" :key="parm.id" :label="parm.name" :value="parm.id"></el-option></el-select></el-form-item> --><!-- <el-form-item label="上級菜單"><treeselectv-model="form.id":options="fmenu":normalizer="normalizer":show-count="true"placeholder="選擇上級菜單"/></el-form-item> --><el-form-item label="名稱" prop="name"><el-input v-model="form.name"></el-input></el-form-item><!-- <el-form-item label="圖標" prop="moduleIcon"><el-input v-model="form.moduleIcon"></el-input></el-form-item>--><el-form-item label="Path" prop="path"><el-input v-model="form.path"></el-input></el-form-item><el-form-item label="Link" prop="link"><el-input v-model="form.link"></el-input></el-form-item><el-form-item label="順序" prop="sortNum"><el-input v-model="form.sortNum"></el-input></el-form-item><el-form-item><el-button type="primary" @click="saveModule('form')">保存</el-button><el-button v-show="!form.id" type="primary" @click="reset('form')">重置</el-button><!-- <el-button type="primary" v-show="showdelete" @click="deleteModule">刪除</el-button> --></el-form-item></el-form></div></el-col><!-- <dot-dropdown :events="sysDropMenuEvents" :data="{node,data}" @addNode="addResource" /> --></el-row></div>
</template><script>
import {listCategory,getCategory,delCategory,addCategory,updateCategory,exportCategory,listCategorytree
} from "@/api/cms/category";
import DotDropdown from "./drop.vue";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {name: "Category",components: {DotDropdown,Treeselect},data() {return {tit:'新建同級',dropevents: [{ label: '新建同級', funcName: 'addPeerNode' },{ label: '新建子級', funcName: 'addNode' },{ label: '編輯', funcName: 'editNode' },{ label: '刪除', funcName: 'removeNode' }],showdelete: false,treeData: [],defaultProps: {children: "children",label: "label"},form: {id: '',parentId:'',link:"",path: "",name: "",sortNum: "",},// rules表單驗證rules: {// parentId: [//   { required: true, message: "請選擇父級菜單", trigger: "blur" }// ],name: [{ required: true, message: "請輸入菜單名稱", trigger: "blur" }],link: [{ required: true, message: "請輸入link", trigger: "blur" }],path: [{ required: true, message: "請輸入path", trigger: "blur" }],sortNum: [{ required: true, message: "請輸入菜單順序", trigger: "blur" }]},fmenu: [],};},created() {// this.getList();this.getdata();// this.getmenu();// console.log(DotDropdown, " DotDropdown,");},methods: {//彈框的四個操作//新建同級addPeerNode(item){console.log(item,'新建同級')this.reset('form')this.form.id=''// 這個能確保建立子級的同級this.form.parentId=item.node.parent.data.idconsole.log(item.node.parent.data.id,"item.node.id")this.tit = '新建同級'},//新建子級addNode(item){console.log(item,'新建子級')let id = item.data.idthis.form.parentId = idthis.reset('form')this.form.id=''this.tit = '新建子級'},//編輯editNode(item){console.log(item,'編輯')this.tit = '編輯'let id = item.data.idgetCategory(id).then(res => {console.log(res, "根據id查信息");this.form = res.data// console.log(JSON.stringify(res))// this.form = res.data.data// this.$refs.tree.setCheckedNodes([])// this.$refs.tree.setCheckedNodes([arr])}).catch(err => {this.loading = false;this.$message.error("用戶管理獲取失敗,請稍后再試!");});},//刪除(ok)removeNode(item){this.tit = '刪除'let id = item.data.id// console.log(id,"kk")delCategory(id).then(res=>{this.getdata();this.reset('form')this.form.id=''this.tit="新建同級"this.$message.success("刪除成功!");}).catch(err => {this.$message.error("表刪除失敗,請稍后再試!");})},// 獲取數據getdata() {listCategorytree().then(res => {this.treeData = res.categorys;}).catch(err => {this.loading = false;this.$message.error("菜單管理列表失敗,請稍后再試!");});},// 添加addModule() {// this.showdelete = false;this.form.link = "";this.form.name = "";this.form.path = "";this.form.sortNum = "";this.form.parentId = "";this.form.id = "";},// 獲取父級菜單// getmenu() {//   listCategory()//     .then(response => {//     //為啥返回的parentid不一樣//     response.rows.forEach(a=>{//       a.parentId =0//     })//     this.fmenu = [];//     const menu = { id: '', menuName: "主類目", children: [] };//     menu.children = this.handleTree(response.rows, "id");//     this.fmenu.push(menu);//     })//     .catch(err => {//       this.loading = false;//       this.$message.error("父級菜單列表獲取失敗,請稍后再試!");//     });// },/** 轉換菜單數據結構 */// normalizer(node) {//   // console.log(node,"nnn")//   if (node.children && !node.children.length) {//     delete node.children;//   }//   return {//     id: node.id,//     label: node.name,//     children: node.children//   };// },// 復選變單選handleClick(data, checked, node) {if (checked) {// this.$refs.tree.setCheckedNodes([]);// this.$refs.tree.setCheckedNodes([data]);this.showdelete = true;} else {}},// 點擊節點nodeclick(arr, node, self) {},// 保存菜單saveModule(editData) {this.$refs[editData].validate(valid => {if (valid) {console.log(this.form,this.form.parentId,"idiidid")if (this.form.id != '') {updateCategory(this.form).then(response => {this.msgSuccess("修改成功");this.getdata();//  this.getmenu();this.reset('form')});} else {addCategory(this.form).then(response => {this.msgSuccess("新增成功");this.getdata();// this.getmenu();this.reset('form')});}} else {return false;}});},// 重置reset(formName) {this.$refs[formName].resetFields();}}
};
</script>
<style lang="less" scoped>
.mt30 {margin-bottom: 30px;
}
.el-tree-node__content {position: relative;
}
.el-tree-node__content :hover,
.el-tree-node__content :focus-within {.operate-btns {display: inline;}
}
.operate-btns {position: absolute;right: 2px;
}
//
.bg-purple {background: #d3dce6;}.rightform{border: #f1f3f7 solid 1px;padding: 30px 30px 20px 0px;box-shadow: 5px 5px 5px #cdcfcf;background: #fff}.lefttree{border: #f1f3f7 solid 1px;padding: 30px 30px 20px 0px;box-shadow: 5px 5px 5px #cdcfcf;background: #fff}.tit-box{// border-bottom: #666 solid 1px;text-align: center;width: 100%;/* margin: 0 auto; */margin-bottom: 20px;}</style>

自組件drop

<template><el-dropdown trigger="click" class="custom-tree-menu" size="small"><i class="el-icon-more rotate " /><el-dropdown-menu slot="dropdown"><el-dropdown-item v-for='(item,index) in eventsa' :key="index" :divided="index >0" @click.native="clickMenu(item)">{{item.label}}</el-dropdown-item></el-dropdown-menu></el-dropdown>
</template>
<script>
export default {props: {eventsa: {type: Array,default: function() {return [{ label: '新建同級', funcName: 'addPeerNode' },{ label: '新建子級', funcName: 'addNode' },// { label: '分配操作', funcName: 'distributeAction' },{ label: '編輯', funcName: 'editNode' },{ label: '刪除', funcName: 'removeNode' }]}},// 注入數據data: {type: Object}},data(){return{// events2:[]  }},methods: {clickMenu(item) {console.log(item,"item",this.data)this.$emit(item.funcName, this.data)}}
}
</script>
<style scoped>.el-icon-more:before {content: "\E794";color: #c0c4cc;font-size: 15px;
}
.rotate {cursor: pointer;margin-left: 5px;transform: rotate(90deg);}/* .rotate:focus {width: 15px;height: 15px;border-radius: 4em;background-color: rgba(130, 132, 138, 0.2);
} */
</style>

實現的效果:

?有個問題?點擊按鈕就會在頁面頂部閃現

teleported這個設置為false?就好了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84277.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84277.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84277.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 mysql2/promise 模塊返回以后,使用 await 返回數據總結

SELECT 返回結構 const [rows, fields] await db.query(SELECT * FROM folders);返回&#xff1a; rows: 是一個數組&#xff0c;包含所有查到的記錄。fields: 是字段的結構定義&#xff08;列信息&#xff09;&#xff0c;一般不用。 rows 是一個數組&#xff0c;包含所有…

Manus Metagloves pro高精度+無漂移+低延遲 ,重構VR/XR手部交互方式

manus metagloves pro是一款專為動畫制作、虛擬現實及游戲開發打造的高精度無線動作捕捉手套。采用先進的Quantum追蹤技術&#xff0c;實現毫米級動作捕捉&#xff0c;精準還原手指細節&#xff0c;顯著提升創作效率與交互真實感。 MANUS Metagloves Pro解鎖動捕 / 機器人 / XR…

Uniapp插件改造指南:如何讓vue-plugin支持HarmonyOS5原生能力?

一、分層架構設計 采用通用邏輯與平臺實現分離的三層結構&#xff1a; uni-plugin-harmony ├── common # 跨平臺通用層 │ ├── interfaces # 能力接口抽象&#xff08;如Scanner.ets&#xff09; │ └── utils # 工具類 ├── harmony …

P1040 [NOIP 2003 提高組] 加分二叉樹 題解

題目描述 設一個 n n n 個節點的二叉樹 tree \text{tree} tree 的中序遍歷為 ( 1 , 2 , 3 , … , n ) (1,2,3,\ldots,n) (1,2,3,…,n)&#xff0c;每個節點都有一個分數&#xff08;均為正整數&#xff09;。任一棵子樹 subtree \text{subtree} subtree&#xff08;包含 tr…

【Golang面試題】Data Race 問題怎么檢測?

Go Race Detector 深度指南&#xff1a;原理、用法與實戰技巧 一、什么是數據競爭&#xff1f; 在并發編程中&#xff0c;數據競爭發生在兩個或多個 goroutine 同時訪問同一內存位置&#xff0c;且至少有一個是寫操作時。這種競爭會導致不可預測的行為和極其難以調試的問題。…

257. 二叉樹的所有路徑(js)

257. 二叉樹的所有路徑——DFS 回溯&#xff08;js&#xff09; 題目描述解題思路完整代碼時間復雜度分析 題目描述 257. 二叉樹的所有路徑 解題思路 題意理解 給定一棵二叉樹&#xff0c;要求返回所有從根節點到葉子節點的路徑&#xff0c;路徑以字符串形式表示&#xff0c…

自動化文檔生成工具(親測可運行)

本文介紹了一個用Java編寫的自動化文檔生成工具&#xff0c;通過讀取開發清單文本自動生成格式規范的Word文檔。該工具的主要特點包括&#xff1a; 采用Apache POI庫處理Word文檔&#xff0c;支持多級標題和段落自動生成實現中文數字轉換功能&#xff0c;將編號轉換為"一、…

湖北理元理律師事務所債務優化模型:法律與生活的平衡之道

在債務重組領域&#xff0c;專業機構需同時解決兩個矛盾&#xff1a;法律合規性與債務人可持續生存能力。湖北理元理律師事務所通過“三維干預模型”&#xff0c;在武漢某餐飲連鎖企業債務危機中驗證了該方案的有效性。 一、法律底層設計&#xff1a;還款方案的合法性審查 以該…

Web3-代幣ERC20/ERC721以及合約安全溢出和下溢的研究

Web3-代幣ERC20/ERC721以及合約安全溢出和下溢的研究 以太坊上的代幣 如果你對以太坊的世界有一些了解&#xff0c;你很可能聽人們聊過代幣— ERC20代幣 一個 代幣 在以太坊基本上就是一個遵循一些共同規則的智能合約——即它實現了所有其他代幣合約共享的一組標準函數&…

論文筆記 <交通燈><多智能體>MetaLight:基于價值的元強化學習用于交通信號控制

今天看的論文是這篇MetaLight:基于價值的元強化學習用于交通信號控制 里面提到的創新點就是MetaLight框架&#xff1a;他目標是讓交通信號控制智能體&#xff08;Agent&#xff09;在新路口&#xff08;即使結構或流量模式不同&#xff09;上能??快速學習??&#xff08;Few…

華為OD-2024年E卷-尋找符合要求的最長子串[200分] -- python

問題描述&#xff1a; 給定一個字符串s&#xff0c;找出這樣一個子串: 1)該子串中的任意一個字符最多出現2次; 2)該子串不包含指定某個字符; 請你找出滿足該條件的最長子串的長度。 輸入描述 第一行為要求不包含的指定字符&#xff0c;為單個字符&#xff0c;取值范圍[0-9a-zA…

CppCon 2016 學習:What C++ Programmers Need to Know about Header <random>

隨機數生成的歷史背景 Middle-Square 方法&#xff08;中位平方法&#xff09;&#xff1a; 已知最早的隨機算法之一或由修道士 Brother Edvin 在 1245 年發明由 John von Neumann 在 1949 年重新發現缺點明顯&#xff0c;但執行速度快 Monte Carlo 方法&#xff1a; 起初是…

Origin:誤差棒點線圖繪制

1.首先將你的數據復制到表格 2.選中B(y)列數據&#xff0c;依次點擊圖示選項 3.選中圖中紅框數據&#xff0c;點擊繪制點線圖即可 4.結果展示

Spring 源碼學習 1:ApplicationContext

Spring 源碼學習 1&#xff1a;ApplicationContext Bean 定義和 Bean 實例 AnnotationConfigApplicationContext 首先&#xff0c;創建一個最簡單的 Spring Boot 應用。 在入口類中接收SpringApplication.run的返回值&#xff1a; SpringBootApplication public class Dem…

CppCon 2017 學習:Design Patterns for Low-Level Real-Time Rendering

這段內容講的是離散顯卡&#xff08;Discrete GPU&#xff09;中的內存管理模型&#xff0c;重點是CPU和GPU各自獨立管理自己的物理內存&#xff0c;以及它們如何通過虛擬內存和DMA引擎實現高效通信。以下是詳細的理解和梳理&#xff1a; 1. 基本概念 CPU 和 GPU 是兩個獨立的…

【單調隊列】-----【原理+模版】

單調隊列 一、什么是單調隊列&#xff1f; 單調隊列是一種在滑動窗口或區間查詢中維護候選元素單調性的數據結構&#xff0c;通常用于解決“滑動窗口最大值/最小值”等問題。 核心思想是&#xff1a;利用雙端隊列&#xff08;deque&#xff09;維護當前窗口內或候選范圍內元素…

CSS語法中的選擇器與屬性詳解

CSS:層疊樣式表&#xff0c;Cascading Style Sheets 層疊樣式表 內容和樣式分離解耦&#xff0c;便于修改樣式。 特殊說明&#xff1a; 最后一條聲明可以沒有分號&#xff0c;但是為了以后修改方便&#xff0c;一般也加上分號為了使用樣式更加容易閱讀&#xff0c;可以將每條代…

模擬設計的軟件工程項目

考核題目 論文論述題&#xff1a;結合你 參與開發、調研或模擬設計的軟件工程項目 &#xff0c;撰寫一篇論文 完成以下任務&#xff0c;論文題目為《面向微服務架構的軟件系統設計與建模分析》&#xff0c;總分&#xff1a; 100 分。 1. 考核內容&#xff1a; 一、系統論述…

個人理解redis中IO多路復用整個網絡處理流

文章目錄 1.redis網絡處理流2.理解通知機制 1.redis網絡處理流 10個客戶端通過TCP與Redis建立socket連接&#xff0c;發送GET name指令到服務器端。服務器端的網卡接收數據&#xff0c;數據進入內核態的網絡協議棧。Redis通過IO多路復用機制中的epoll向內核注冊監聽這些socket的…

【鄭州輕工業大學|數據庫】數據庫課設-酒店管理系統

該數據課設是一個基于酒店管理系統的數據庫設計 建庫語句 create database hotel_room default charset utf8 collate utf8_general_ci;建表語句 use hotel_room;-- 房型表 create table room_type( id bigint primary key auto_increment comment 房型id, name varchar(50)…