效果
代码实现
页面
< el-tree :data = " treeData" :props = " defaultProps" :expand-on-click-node = " false"
:filter-node-method = " filterNode" :ref = " ' tree_' + item.name" :id = " ' tree' + item.name" node-key = " id"
:current-node-key = " defaultKeys" default-expand-all highlight-current @node-click = " handleNodeClick" >
< span class = " custom-tree-node" slot-scope = " { node, data }" >
< el-input :key = " data.id" autofocus size = " mini" class = " w-75 text-left" :id = " data.id"
v-show = " data.isEdit" v-model = " form.serviceName" @keyup.enter.native = " addApiGroup" @blur = " addApiGroup" > </ el-input>
< el-tooltip :content = " node.label" placement = " right-start" transition = " el-zoom-in-top"
effect = " light" >
< span v-if = " !data.isEdit" class = " textLine1 tree-label d-flex align-items-center" >
< img class = " imgAlign-textBottom mr-1"
:src = " data.isGroup == 1 ? require('../../../assets/images/folder.png') : require('../../../assets/images/code.png')"
alt = " " >
< span class = ' ' > {{ node.label }}</ span>
</ span>
</ el-tooltip>
< el-popover v-if = " data.isGroup == 1" placement = " bottom-start" width = " 100" trigger = " click"
id = " myPopover" >
< div>
< el-link class = " ml-0 mb-2" :underline = " false" size = " mini" type = " info"
@click = " handleAdd('api', node, data)" >
< img src = " ../../../assets/images/code_line.png" alt = " " class = " mr-2" /> 新增接口
</ el-link>
< el-popover placement = " right-start" width = " 100" trigger = " click" >
< el-link class = " d-block ml-0 mb-2" :underline = " false" size = " mini" type = " info"
@click = " handleAdd('group', node, data, 'up', $event)" > 上方添加分组</ el-link>
< el-link class = " d-block mb-2 ml-0" :underline = " false" size = " mini" type = " info"
@click = " handleAdd('group', node, data, 'down')" > 下方添加分组</ el-link>
< el-link class = " d-block ml-0" :underline = " false" size = " mini" type = " info"
@click = " handleAdd('group', node, data, 'child')" > 添加子分组</ el-link>
< el-link class = " ml-0 mb-2 addGroup" :underline = " false" size = " mini" type = " info"
slot = " reference" >
< span>
< img src = " ../../../assets/images/bulletpoint.png" alt = " " class = " mr-2" /> 新增分组
</ span>
< img src = " ../../../assets/images/chevron-right.png" alt = " " class = " mr-2" />
</ el-link>
</ el-popover>
< el-link class = " d-block ml-0 mb-2" :underline = " false" size = " mini" type = " info"
@click = " handleEdit('group', node, data)" > < img src = " ../../../assets/images/folder_line.png"
alt = " " class = " mr-2" /> 编辑分组</ el-link>
< el-link class = " d-block ml-0" :underline = " false" size = " mini" type = " info"
@click = " handleDelete(node, data)" > < img src = " ../../../assets/images/delete.png" alt = " "
class = " mr-2" /> 删除</ el-link>
</ div>
< el-button class = " ml-2" size = " mini" icon = " el-icon-more" type = " text" slot = " reference" > </ el-button>
</ el-popover>
</ span>
</ el-tree>
js
export default {
name : 'AppCenterDetail' ,
components : { apiList } ,
data ( ) {
return {
treeData : [ ] ,
defaultProps : {
children : 'children' ,
label : 'label' ,
} ,
}
} ,
created ( ) {
this . form. id = this . $route. query. appId
this . appId = this . $route. query. appId
this . getAppDetail ( this . $route. query. appId)
} ,
mounted ( ) {
} ,
methods : {
handleNodeClick ( data, node ) {
this . form. serviceName = data. label
this . queryParams. parentId = data. id
this . defaultKeys = data. id
let tree = {
id : 0 ,
children : this . treeData
} ;
addApiGroup ( ) {
} ,
handleAdd ( node, data, pageType ) {
const treeDOM = this . $refs[ 'tree_' + this . activeName] [ 0 ]
const id = Math. ceil ( Math. random ( ) * 100 ) ;
const newData = { id : id, parentId : data ? data. id : 0 , label : '' , isEdit : true , isNew : true , children : [ ] }
this . $set ( this . form, 'isGroup' , 1 )
if ( pageType == 'up' ) {
this . $set ( this . form, 'upOrder' , data. orderNum)
this . $set ( this . form, 'isUp' , 0 )
this . $set ( this . form, 'orderNum' , data. orderNum - 1 )
this . $set ( this . form, 'parentId' , data ? data. parentId : 0 )
this . $set ( this . form, 'upId' , data. id)
treeDOM. insertBefore ( newData, node)
setTimeout ( ( ) => {
document. getElementById ( newData. id) . focus ( )
} , 500 ) ;
} else if ( pageType == 'down' ) {
this . $set ( this . form, 'upOrder' , data. orderNum)
this . $set ( this . form, 'isUp' , 1 )
this . $set ( this . form, 'orderNum' , data. orderNum + 1 )
this . $set ( this . form, 'parentId' , data ? data. parentId : 0 )
this . $set ( this . form, 'upId' , data. id)
treeDOM. insertAfter ( newData, node)
setTimeout ( ( ) => {
document. getElementById ( newData. id) . focus ( )
} , 500 ) ;
} else if ( pageType == 'child' ) {
if ( this . currentNodeLevel >= 4 ) {
this . $modal. msgWarning ( '当前树最多可加四级,已超出' )
} else {
this . $set ( this . form, 'upOrder' , data. orderNum)
this . $set ( this . form, 'isUp' , 2 )
this . $set ( this . form, 'parentId' , data. id)
treeDOM. append ( newData, node)
treeDOM. store. nodesMap[ data. id] . expanded = true
setTimeout ( ( ) => {
document. getElementById ( newData. id) . focus ( )
} , 500 ) ;
}
} else {
this . addGroupVisible = true
this . $set ( this . form, 'parentId' , 0 )
this . $set ( this . form, 'isUp' , 2 )
}
} ,
} ,
}