vue实现树状控件

实现的样式如下
在这里插入图片描述
主要用到element中的tree标签
< div style=“height:30px;margin-bottom:5px”>
< el-button type=“success” size=“mini” icon=“el-icon-check” @click=“allChecked”>全选< /el-button>
< el-button type=“danger” size=“mini” icon=“el-icon-delete” @click=“resetChecked”>清空< /el-button>
< /div>
<el-tree
ref=“tree”
:data=“listMenu” //展示的数据
:default-expand-all=“false” //默认不展开
show-checkbox
node-key=“id”//如果需要通过 key 来获取或设置,则必须设置node-key
highlight-current
:render-content=“renderContent”//设置样式
current-node-key
@check-change=“handleCheckChange”//当前选择的数据
:props=“defultPops”//数据格式指定
/>

 <el-tag
              :key="tag.id"
                v-for="tag in dynamicTags"
                closable
                :disable-transitions="false"
                @close="handleClose(tag)">
                {{tag!=undefined?tag.label:''}}
    </el-tag>
    export default {

name:‘AreaTreeUtil’,
props:{
collectID: {
type:Number,
default: null
},
type: {
type:Number,
default: 0
},
areaCodeOnby: {
type:String,
default: “”
}
},
data() {
return {
list: this.list,
multipleSelection: [],
dynamicTags: [],
inputVisible: false,
expands:true,
inputValue: ‘’,
listMenu:this.listMenu,
defultPops:{
children:“children”,
label: ‘label’
}
}
},
methods: {
在这里插入图片描述
async getAreaCode() {
this.listQuery.parentCode = 41
const res = await getMenuTree(this.listQuery)
this.listMenu = res.data
res.data.forEach(function (item,index) {
item.disabled=true
})
},

 disabledFn(data, node) {
      if (this.areaCode==data.id){
          data.disabled=false
      }else{
            data.disabled=true
      }
    },
async getAreaCodeFilter() {
  this.listQuery.parentCode = 41
  const res = await getMenuTree(this.listQuery)
  this.filterData = res.data
   res.data.forEach(function (item,index) {
      item.disabled=true
    })
  this.$refs.tree.setCheckedNodes(this.filterData)
},    

handleFilter() {
this.listQuery.pageNum = 1
this.getAreaCodeFilter()

},
//删除标签同时去除树选中状态
handleClose(tag) {
    this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
    this.$refs.tree.setCheckedNodes(this.dynamicTags)
},

//选中状态修改

handleCheckChange(data,checked,indeterminate) {
if(checked === true){
data.disabled = true
}else{
data.disabled = false
}
this.checkdata()
},
在这里插入图片描述
//设置树样式
renderContent(h, { node, data, store }) {
return (
< span class=“custom-tree-node-area”>
< span>{node.label}< /span>
< /span>);
} }

如需要设置树状数据过长时出现滚动条这个设置设置高度就可生效
.el-tree{
overflow-y: auto;
height: 350px;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值