antdvue的tree组件增加增删改功能

在这里插入图片描述

<template>
  <div>
    <a-tree :treeData="treeData">
      <span slot="switcherIcon" class="icon-plus"></span>
      <template slot="custom" slot-scope="item">
        <!-- if -->
        <span v-if="item.isNewItem">
          <a-input placeholder="请输入内容" class="editInput" v-model="item.name" />
          <span class="tree-cancle_icon edit-require_icon">
            <a-icon type="close-circle" style="font-size:16px" @click="closecontent(item)" />
          </span>
          <span class="tree-save_icon edit-require_icon">
            <a-icon type="check-circle" style="font-size:16px" @click="addinputcontent(item)" />
          </span>
        </span>
        <!-- else -->
        <div v-else>
          <!-- 如果是修改 -->
          <div v-if="item.isEdit">
            <a-input v-model="item.title" class="editInput" />
            <span class="tree-cancle_icon edit-require_icon" @click="editnocontent(item)">
              <a-icon type="close-circle" />
            </span>
            <span class="tree-save_icon edit-require_icon" @click="edityescontent(item)">
              <a-icon type="check-circle" />
            </span>
          </div>
          <div v-else>
            <span class="node-title">{{ item.title }}</span>
            <span class="icon-wrap" @click="addNode(item)">
              <a-icon type="plus" />
            </span>
            <span class="icon-wrap" @click="editNode(item)">
              <a-icon type="form" />
            </span>
            <a-popconfirm title="确定删除吗?" ok-text="确定" cancel-text="取消" @confirm="confirm" @cancel="cancel">
              <span class="icon-wrap" @click="delNode(item)">
                <a-icon type="delete" />
              </span>
            </a-popconfirm>
          </div>
        </div>
      </template>
    </a-tree>
  </div>
</template>
<script>
export default {
  data() {
    return {
      codeArray: [],
      treeData: [
        {
          id: 9,
          key: 0,
          isEdit: false,
          isNewItem: false,
          title: '七年级',
          depth: 1,
          scopedSlots: { title: 'custom' },
          children: []
        },
        {
          id: 10,
          key: 1,
          isEdit: false, // 是否处于编辑状态
          isNewItem: false, // 该节点是否是新增节点
          title: '八年级',
          depth: 1, // 该节点的层级
          scopedSlots: { title: 'custom' }, // 自定义组件需要绑定
          children: [
            {
              id: 2,
              key: 2,
              isEdit: false, // 是否处于编辑状态
              isNewItem: false, // 该节点是否是新增节点
              title: '八(一)班',
              depth: 2, // 该节点的层级
              scopedSlots: { title: 'custom' }
            }
          ]
        },
        {
          id: 11,
          key: 2,
          isEdit: false,
          isNewItem: false,
          title: '九年级',
          depth: 1,
          scopedSlots: { title: 'custom' },
          children: []
        }
      ]
    };
  },
  watch: {},
  methods: {
    confirm(e) {
      console.log(e);
      this.$message.success('Click on Yes');
    },
    cancel(e) {
      this.$message.error('取消操作');
    },
    addNode(item) {
      //点击新增
      console.log(this.treeData,'aaaa', item);
      let code = item.pos.replace(/-/g, '');
      let codeArray = code.split('');
      this.codeArray = codeArray;
      let newNode = {
        id: Math.ceil(Math.random() * 10000), //避免和已有的id冲突
        key: Math.ceil(Math.random() * 10000), //避免和已有的key冲突
        isEdit: false,
        name: '',
        isNewItem: true,
        title: '',
        depth: item.depth + 1, //如需要添加顶级节点,值为0
        scopedSlots: { title: 'custom' },
        children: []
      };
      let index = item.depth - 1;
      console.log(codeArray)
      this.treeData[codeArray[1]].children.push(newNode);
    },
    editnocontent(item){  //修改的时候的叉叉
      let codeArray = this.codeArray;
      let treeData = this.treeData
      function queryindex(x){  //[1,2]
        if(x.length == 1){
          return treeData[codeArray[0]].isEdit = false;
        }else{
          return treeData[codeArray[0]].children[codeArray[1]].isEdit = false
        }
      }
      queryindex(codeArray)
    },
    edityescontent(item){ //修改时候的对号
      let codeArray = this.codeArray;
      let treeData = this.treeData
      function queryindex(x){  //[1,2]
        if(x.length == 1){
          treeData[codeArray[0]].isEdit = false
          return treeData[codeArray[0]].title = item.title;
        }else{
          treeData[codeArray[0]].children[codeArray[1]].isEdit = false
          return treeData[codeArray[0]].children[codeArray[1]].title = item.title
        }
      }
      queryindex(codeArray)
    },
    addinputcontent(item) {
      //点击确定
      let newNode = {
        id: item.id, //避免和已有的id冲突
        key: item.key, //避免和已有的key冲突
        isEdit: false,
        isNewItem: false,
        title: item.name,
        depth: item.depth + 1, //如需要添加顶级节点,值为0
        scopedSlots: { title: 'custom' },
        children: []
      };
      let codeindex = this.codeArray[1];
      this.treeData[codeindex].children.pop();
      this.treeData[codeindex].children.push(newNode);
    },
    closecontent(item) {
      //点击叉掉
      console.log(item);
      let code = item.pos.replace(/-/g, '');
      let codeArray = code.split('');
      codeArray.shift();
      this.treeData[codeArray[0]].children.splice(codeArray[1],1);
    },
    editNode(item) {
      //点击修改
      let code = item.pos.replace(/-/g, '');
      let codeArray = code.split('');
      codeArray.shift();
      this.codeArray = codeArray;
      let treeData = this.treeData
      function queryindex(x){  //[1,2]
        if(x.length == 1){
          return treeData[codeArray[0]].isEdit = true;
        }else{
          return treeData[codeArray[0]].children[codeArray[1]].isEdit = true
        }
      }
      queryindex(codeArray)
    },
    delNode(item) {
      //删除
      let code = item.pos.replace(/-/g, '');
      let codeArray = code.split('');
      codeArray.shift();
      let treeData = this.treeData
      function queryindex(x){  //[1,2]
        if(x.length == 1){
          treeData.splice(codeArray[0],1);
        }else{
          treeData[codeArray[0]].children.splice(codeArray[1],1);
        }
      }
      queryindex(codeArray)
    }
  }
};
</script>
<style lang="scss" scoped>
::v-deep .ant-tree-switcher.ant-tree-switcher_open {
  .icon-plus {
    background-image: url("./minus.png") ; // 展开节点时的icon
    background-size: 24px;
    width: 24px;
    height: 24px;
  }
}
::v-deep .ant-tree-switcher.ant-tree-switcher_close {
  .icon-plus {
    background-image: url("./add.png") ; // 收起节点时的icon
    background-size: 24px;
    width: 24px;
    height: 24px;
  }
}
.icon-wrap {
  margin: 0 6px;
}
.node-title {
  padding-right: 15px;
}
.tree-cancle_icon {
  margin: 0 6px;
}
</style>
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: antd vue tree-select 是一款基于 Vue.js 和 Ant Design 的树形下拉选择器组件。它允许用户在一个树形结构中进行选择,并可以控制下拉列表的展示方式。 在使用该组件时,用户可以通过设置 props 来控制树形结构的显示、数据格式、占位符、禁用等选项。例如,通过设置 showSearch 属性,可以开启搜索功能,让用户更方便地查找所需要的选项;或者通过设置 multiple 属性,使用户可以进行多选。 此外,antd vue tree-select 还提供了一些事件,例如选项变、展开和收缩等事件,让用户可以根据自己的需求自定义组件的行为。比如,可以在选项变的事件中,通过自定义函数来对所选择的项进行处理。 总的来说,antd vue tree-select 是一款非常强大的树形下拉选择器组件,它提供了多种选项和事件,可以让用户轻松地控制下拉列表的展示方式,并实现自定义的功能需求。 ### 回答2: antd vue tree-select 是一款基于 Vue.js 框架和 Ant Design UI 组件库的的树形下拉选择框,它可以帮助我们在一个树形结构中进行选择,同时也可以与表单进行关联,实现表单数据的收集和提交。 在控制下拉方面,antd vue tree-select 提供了一些配置项和方法,可以帮助我们实现自定义的下拉选择控制。以下是一些常用的控制方式: 1. 禁用某些节点 通过在数据源中添加 disabled 属性,可以禁用某些节点,这些节点会在下拉列表中以灰色不可选状态展示。 2. 控制节点的展开和折叠 antd vue tree-select 支持配置 defaultExpandAll 属性来控制组件默认展开所有节点,同时也可以通过控制 showExpand 属性来隐藏展开和折叠图标,从而禁止用户手动展开和折叠节点。 3. 增加搜索和过滤功能 antd vue tree-select 支持通过配置 showSearch 属性来实现搜索和过滤功能,用户可以在输入框中输入关键字,组件会自动将匹配的节点展示在下拉列表中,从而实现搜索和过滤。 4. 控制选中的节点 通过配置 value 属性,可以控制树形下拉选择框中默认选中的节点。同时,antd vue tree-select 还提供了 multiple 、checkable 和 defaultCheckedKeys 等属性和方法来控制选择的节点,从而实现更复杂的下拉选择控制。 总的来说,antd vue tree-select 提供了丰富的配置项和方法,可以帮助我们实现自定义的下拉选择控制,从而满足不同业务场景下的需求。 ### 回答3: antd vue tree-select 是一种非常优秀的前端组件,它能够帮助我们实现一个树形结构的选择组件,能够满足很多场景的需求。而控制下拉则是指我们对这个组件下拉进行一些特殊的控制操作,以满足我们更加个性化的需求。 首先,我们需要清楚理解antd vue tree-select 的基本用法,它的主要属性有value、options、placeholder、show-search、tree-default-expand-all等。其中,value代表当前选中的值,options代表树形数据源,placeholder代表提示语,show-search代表是否展示搜索框,tree-default-expand-all代表默认展开所有节点。这些属性都非常重要,它们能够让我们更加精细地控制组件的展示。 接下来,我们来看看如何控制antd vue tree-select 的下拉展示。一般来说,我们可以通过以下几种方式进行控制: 1. 自定义下拉框的宽度和高度。我们可以通过给tree-select组件设置dropdownStyle属性来控制下拉框的样式,包括宽度和高度等。 2. 控制下拉列表的展开和收起。我们可以通过给tree-select组件设置treeExpandedKeys属性来控制当前展开的节点,以此来控制下拉列表的展开和收起。 3. 筛选和搜索下拉列表中的内容。我们可以通过给tree-select组件设置show-search属性来展示搜索框,然后再通过设置filterTreeNode属性来实现对节点的筛选。 4. 手动控制下拉列表的显示和隐藏。我们可以通过给tree-select组件设置open属性来手动控制下拉列表的显示和隐藏,从而实现更加精细的控制。 综上所述,antd vue tree-select 控制下拉是一项非常重要的前端开发技能,它能够帮助我们实现更加精细的页面展示。只有熟练掌握了这项技能,我们才能开发出更加高效、美观、易用的前端页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值