首页 > 其他分享 >element tree 优化线条树,添加增删改功能

element tree 优化线条树,添加增删改功能

时间:2023-12-08 17:36:24浏览次数:32  
标签:node el tree element content item __ 增删

需求:树状结构,支持操作功能(同级、子级、修改、删除)。

根据需求是否展示复选框和操作功能。

封装linetree.vue组件:

  1 <template>
  2     <div>
  3         <el-tree :data="list" :props=defaultProps :expand-on-click-node="false" :default-expand-all="true"
  4             ref='treeHight' node-key='id' :show-checkbox=isShowCheck @check="checkNodeData">
  5             <span class="custom-tree-node" slot-scope="{node,data}">
  6                 <span class="el-tree-node__label" @click='handleNodeClick(data)' v-show='!data.isEdit'>
  7                     {{node.label}}
  8                 </span>
  9                 <span v-show='data.isEdit'>
 10                     <el-input v-model='editValue' size='mini' autofocus @blur.stop='nodeBlur(node,data)'
 11                         @keydown.native.enter='nodeBlur(node,data)' :ref="'slotTreeInput'+data.id"></el-input>
 12                 </span>
 13                 <span class="costom-node-tool">
 14                     <span class="el-icon-edit" @click.prevent.stop='editItem(node,data)' title="编辑节点"
 15                         v-show='isShowEdit'></span>
 16                     <span class="el-icon-plus" @click.prevent.stop='addBroItem(node,data)' title="新增同级"
 17                         v-show='isShowEdit'></span>
 18                     <span class="el-icon-circle-plus-outline" @click.prevent.stop='addChildren(node,data)'
 19                         v-show='isShowEdit' title="新增子级"></span>
 20                     <span class="el-icon-delete" @click.prevent.stop='deleteItem(node,data)' title="删除"
 21                         v-show='isShowDel'></span>
 22                 </span>
 23             </span>
 24         </el-tree>
 25     </div>
 26 </template>
 27 <script>
 29     export default {
 30         name: "lineTree",
 31         data() {
 32             return {
 33                 defaultProps: {
 34                     children: 'children',
 35                     label: 'name'
 36                 },
 37                 editValue: '',
 38             };
 39         },
 40         props: {
 41             list: {
 42                 type: Array,
 43                 default: [],
 44             },
 45             isShowEdit: {
 46                 type: Boolean, //是否显示编辑
 47                 default: false
 48             },
 49             isShowDel: {
 50                 type: Boolean, //是否显示删除
 51                 default: false
 52             }, 57             isShowCheck: { //是否显示复选框
 58                 type: Boolean,
 59                 default: false
 60             }
 61         }, 77         methods: {
 78             handleNodeClick(data) {
 79                 this.$emit("treeNodeClick", data)
 80             },
 81             nodeBlur(node, data) {
 82                 if (!data.name) {
 83                     this.$message.warning('名称不可为空');
 84                     return
 85                 } else {
 86                     if (data.isEdit) {
 87                         this.$set(data, 'isEdit', false)
 88                         this.$set(data, 'name', this.editValue)
 89                         var newItem = {
 90                             name: data.name,
 91                             pid: data.pid,
 92                             id: data.id == 'selfId' ? '' : data.id,
 93                         }
 94                         this.$emit('editItem', newItem)
 95                     }
 96                 }
 97             },
 98             // 编辑
 99             editItem(node, item) {
100                 if (!item.isEdit) {
101                     this.$set(item, 'isEdit', true)
102                 }
103                 this.editValue = item.name;
104                 this.$nextTick(() => {
105                     this.$refs['slotTreeInput' + item.id].focus()
106                 })
107             },
108             // 新增同级
109             addBroItem(node, item) {
110                 var newItem = {
111                     id: 'selfId',
112                     pid: item.pid ? item.pid : item.pId,
113                     name: '新增节点',
114                     isEdit: true
115                 }
116                 this.editValue = '新增节点';
117                 this.$refs.treeHight.append(newItem, node.parent)
118                 this.$nextTick(() => {
119                     this.$refs['slotTreeInput' + newItem.id].focus()
120                 })
121             },
122             // 新增子级
123             addChildren(node, item) {
124                 var newItem = {
125                     id: 'selfId',
126                     pid: item.id,
127                     name: '新增节点',
128                     isEdit: true
129                 }
130                 this.editValue = '新增节点';
131                 this.$refs.treeHight.append(newItem, node)
132                 this.$nextTick(() => {
133                     this.$refs['slotTreeInput' + newItem.id].focus()
134                 })
135             },
136             deleteItem(node, item) {
137                 this.$emit('deleteItem', item)
138             },
139             checkNodeData(data, node) {
140                 this.$emit('checkItems', node.checkedKeys)
141             },
142 
143         },
144     };
145 </script>
146 <style scoped>
147
.el-tree {   background-color: transparent !important; } .el-tree-node {   position: relative;   margin: 4px 0; } .el-tree>.el-tree-node {   display: inline-block;   width: 100%; } .el-tree::before {   content: "";   position: absolute;   width: 1px;   height: calc(100% - 36px);   left: 11px;   top: 15px;   border-left: 1px dotted #075d76; } .el-tree-node:focus>.el-tree-node__content {   background-color: transparent; } .el-tree-node__content:hover {   background: transparent!important; } .el-tree-node__content:hover .el-tree-node__label {   background: #112c42!important;   display: inline-block; } .el-tree-node.is-current>.el-tree-node__content {   background-color: transparent !important; } .el-tree-node.is-current>.el-tree-node__content .el-tree-node__label {   background-color: #194e74 !important; } .el-tree-node__content span{   color: #c8e8ff; } .el-tree-node__content {   position: relative;   height: 33px; } .el-tree-node__content::before {   content: "";   position: absolute;   width: 12px;   left: 12px;   top: 15px;   border-top: 1px dotted #075d76; } .custom-tree-node{   overflow: hidden;   flex: 1;   display: flex;   align-items: center;   border-bottom: 2px dashed #0e2757; } .costom-node-tool{   width: 102px;   padding-left: 8px; } .costom-node-tool span{   margin: 0 1px; } .el-tree-node__label {   padding-left: 4px;   color: #c8e8ff;   font-size: 18px;   border-bottom: 2px dashed #0e2757;   display: inline-block;   width: 100%;   height: 30px;   line-height: 29px;   cursor: pointer;   overflow: hidden;   white-space: nowrap;   text-overflow: ellipsis; } .countCon {   position: absolute;   bottom: -2%;   left: 1%; } .el-tree .el-tree-node__expand-icon.expanded{   -webkit-transform: rotate(0deg);   transform: rotate(0deg); } .el-tree .el-icon-caret-right:before{   background: url(./../../assets/images/fileShow.png) no-repeat;   content: '';   display: block;   width: 18px;   height: 18px;   font-size: 16px;   background-size: 100% 100%; } .el-tree .el-tree-node__expand-icon.expanded.el-icon-caret-right:before{   background: url(./../../assets/images/fileHide.png) no-repeat;   content: '';   display: block;   width: 18px;   height: 18px;   font-size: 16px;   background-size: 100% 100%; } .el-tree .el-tree-node__expand-icon.is-leaf::before{   background: transparent no-repeat;   content: '';   display: block;   width: 18px;   height: 18px;   font-size: 16px;   background-size: 100% 100%; }
148 </style>

 

标签:node,el,tree,element,content,item,__,增删
From: https://www.cnblogs.com/houBlogs/p/17888658.html

相关文章

  • 树上启发式合并(dsu on tree)
    dsuonTree(树上启发式合并)当遇到处理子树询问,并且无修改时。可以考虑树上启发式合并。算法流程:step1:处理出每个点的\(siz_x\)以及重儿子\(son_x\)。voiddfs(intx,intfa){ siz[x]=1; intMaxson=0; for(inti=0;i<p[x].size();i++){ inty=p[x]......
  • dict( [1,2] ) # TypeError: cannot convert dictionary update sequence element
    dict([1,2])#TypeError:cannotconvertdictionaryupdatesequenceelement#0toasequence#listtupleset都可以,并且list(list([1,2]))==[1,2]#仍然是[1,2]list({"key":"value"})#只保留键名......
  • element-plus中的文件上传
    官网:https://element-plus.org/zh-CN/component/upload.html简单使用:场景:与表单项一起提交,但是需要回显功能,可以用过本地url预览方式实现<!--此处需要关闭element-plus的自动上传,不需要配置action等参数只需要做前端的本地预览图片即可,无需在提交前上传图片......
  • JavaWeb - Day03 - Ajax、前端工程化、Element
    01.Ajax-介绍Ajax概念:AsynchronousJavaScriptAndXML,异步的JavaScript和XML。作用:数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用的校验等等......
  • Sourcetree安装详细步骤
    Sourxetree作为免费的Git客户端工具,有许多优点。Sourcetree简化了与Git存储库交互的方式,因此我们可以专注于编码。通过Sourcetree简单又快捷的管理我们的存储库。1.下载https://www.sourcetreeapp.com/2.安装3.创建伪账号进入文件夹%LocalAppData%\Atlassian\Source......
  • element plus el-table表格合并
    el-table表格合并实现都是使用表格的span-method属性绑定操作函数<el-table:data="table.data":span-method="objectSpanMethod"></el-table>操作函数格式constobjectSpanMethod=({row,column,rowIndex,columnIndex})=>{}相同值行合并对于相同的值进行行......
  • 在HTML或者JSP中使用Element Plus
    我们都知道如何在node项目中,使用ElementPlus等UI框架,但在单页面中我们该如何引入ElementPlus呢?以下我们以HTML或JSP引入ElementPlus为例,需要按照以下步骤进行引用:步骤一下载ElementPlus首先,您需要下载ElementPlus的文件。您可以通过以下方式下载ElementPlus:访问ElementPlus......
  • 打工笔记----------------------------跨进程控制SysTreeView32树状图控件的问题
    跨进程控制SysTreeView32树状图控件的问题,啥也不说了,直接上代码:publicpartialclassForm1:Form{//定义常量publicconstintWM_LBUTTONDBLCLK=0x020B;//左键双击消息publicconstintWM_RBUTTONDOWN=0x0204;//右键按下消息......
  • 【elementUI】loading动画的大小样式修改
    项目上传表格导入数据,加个的一个导入动画穿透加!important首选样式依然无效//导入动画的图标大小.is-fullscreen>>>.el-icon-loading{font-size:30px!important;}动画创建的代码,有类名有背景色,还带个文字,怎么看怎么像是创建的了一个标签上去constloading=this.$loading(......
  • [ARC121F] Logical Operations on Tree 题解
    题目链接点击打开链接题目解法比较好的题首先要发现一个性质是:先删AND边,再删OR边最优小证一下:分类讨论AND边两端的数字情况\(0\&0\)左右两端虽然可能可以把\(1\)OR过来,但这种情况先做\(\&\),也一定可以OR得到\(1\)\(0\&1\)左边可能可以\(OR\)得到\(1......