组织树实现新增、修改、删除

文章详细描述了如何在JavaScript中使用递归实现树形数据结构的增删改操作,包括添加新节点、删除指定节点以及修改节点属性,重点涉及`children`字段的处理和递归遍历。
摘要由CSDN通过智能技术生成

首先先来看一下数据结构

 

 

这是典型的树结构,组织树接口返回的结构都是这样的,每个对象下都有个children字段,这个children就是子节点,如果需要实现添加只需要在点击添加时给点击对象的children字段下在push一条数据就行

新增

    // 递归算法 创建用户树结构
    // 递归遍历树,通过map遍历直接修改原数组数据,数组其他的数据不变
    getNewTree(obj) {
      obj.map(item => {
        if (item.id == this.addId) {
          // console.log('打印', item.id, this.addId)
          item.children.push({
            bzValue: this.form.region,
            zbname: this.treeName,
            level: item.level + 1,
            // id: this.form.name,
            zbid: this.form.name,
            zbrange: { describes: '' },
            fzbid: item.id,
            children: []
          })
          this.$message.success('新增成功')

        }

        if (item.children && item.children.length > 0) {
          this.getNewTree(item.children)
        }
      })
      return obj
    },

这里使用的是递归函数,一层一层往下匹配,当匹配不到时把children当成数组传给方法本身,自身在调用一次,直到匹配到数据,然后使用数组方法push在children下添加数据

删除

    // 递归取fzbid
    deleteTreeCode(obj, id) {
      obj.map((item, index) => {
        if (item.id == id) {
          this.handleDelete(this.treeList, item.fzbid, item.id)
        }
        if (item.children && item.children.length > 0) {
          this.deleteTreeCode(item.children, id)
        }
      })
      return obj
    },
    // 递归删除节点
    handleDelete(obj, fzbid, id) {
      obj.map((item) => {
        if (item.id == fzbid) {
          console.log(item.children.length, 789);
          for (let v = 0; v < item.children.length; v++) {
            if (item.children[v].id == id) {
              console.log(v.id, id);
              item.children.splice(v, 1)
              this.$message.success('删除成功')
              this.handleTreeInfo()

            }
          }
        } else if (fzbid == 1) {
          this.treeList = []
          this.$message.success('删除成功')
          this.handleTreeInfo()

        }
        if (item.children && item.children.length > 0) {
          this.handleDelete(item.children, fzbid, id)
        }
      })
      return obj
    },

因为我这里的需求是删除的时候点击的节点也需要删除,思路就是获取到点击节点的父id通过父id去查找节点的父级把children置空就能实现删除,这里接口返回的父id字段是fzbid

修改

  // 指标树节点打开弹框
    onClick(v, data, type) {
      this.addId = data.id
      this.drawer = true
      this.type = type
      if (type == 2) {
        this.form.name = data.zbname
        this.form.region = data.bzValue
      }
    },

修改时需要先回显数据,打开弹窗的时候判断状态,1是新增2是修改,修改时给v-model赋值

   // 新增指标树节点提交数据
    onSubmit() {
      if (this.type == 1) {
        console.log(this.getNewTree(this.treeList), "新增成功");/* 新增 */
        this.handleTreeInfo()
      } else {
        console.log(this.onEdit(this.treeList), "修改成功"); /* 修改 */
      }
      this.drawer = false/* 关闭弹窗 */

    },
    // 修改指标树
    onEdit(obj) {
      obj.map((item, index) => {
        if (item.id == this.addId) {
          // item.zbname = this.form.name
          this.zbList.map(v => {
            console.log(v.id, "iddd", this.form.name);
            if (v.id == this.form.name) {
              item.zbname = this.treeName
              item.bzValue = this.form.region
              item.zbid = this.zbid
            }
          })
          this.$message.success('修改成功')
          this.handleTreeInfo()

        }
        if (item.children && item.children.length > 0) {
          this.onEdit(item.children)
        }
      })
      return obj

    },

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
组织机构模块是用户权限管理系统中的重要模块之一,主要用于管理系统中的组织结构,包括部门、岗位、职位等信息,以便于用户的管理和权限控制。下面是基于Spring Boot的用户权限管理系统的组织机构模块设计及实现的一些思路。 1. 数据库设计 组织机构模块的数据库设计应包括以下表: 1.1. 部门表(dept) 字段 | 类型 | 说明 ---|---|--- id | bigint | 主键 name | varchar(50) | 部门名称 parent_id | bigint | 父部门id,顶级部门为0 1.2. 岗位表(position) 字段 | 类型 | 说明 ---|---|--- id | bigint | 主键 name | varchar(50) | 岗位名称 dept_id | bigint | 所属部门id 1.3. 职位表(job) 字段 | 类型 | 说明 ---|---|--- id | bigint | 主键 name | varchar(50) | 职位名称 position_id | bigint | 所属岗位id 2. 接口设计 组织机构模块的接口设计应包括以下接口: 2.1. 新增部门接口 请求方式:POST 请求URL:/api/dept 请求参数: 字段 | 类型 | 说明 ---|---|--- name | string | 部门名称 parent_id | bigint | 父部门id,顶级部门为0 2.2. 修改部门接口 请求方式:PUT 请求URL:/api/dept/{id} 请求参数: 字段 | 类型 | 说明 ---|---|--- id | bigint | 部门id name | string | 部门名称 parent_id | bigint | 父部门id,顶级部门为0 2.3. 删除部门接口 请求方式:DELETE 请求URL:/api/dept/{id} 请求参数: 字段 | 类型 | 说明 ---|---|--- id | bigint | 部门id 2.4. 查询部门接口 请求方式:GET 请求URL:/api/dept/{id} 请求参数: 字段 | 类型 | 说明 ---|---|--- id | bigint | 部门id 2.5. 新增岗位接口 请求方式:POST 请求URL:/api/position 请求参数: 字段 | 类型 | 说明 ---|---|--- name | string | 岗位名称 dept_id | bigint | 所属部门id 2.6. 修改岗位接口 请求方式:PUT 请求URL:/api/position/{id} 请求参数: 字段 | 类型 | 说明 ---|---|--- id | bigint | 岗位id name | string | 岗位名称 dept_id | bigint | 所属部门id 2.7. 删除岗位接口 请求方式:DELETE 请求URL:/api/position/{id} 请求参数: 字段 | 类型 | 说明 ---|---|--- id | bigint | 岗位id 2.8. 查询岗位接口 请求方式:GET 请求URL:/api/position/{id} 请求参数: 字段 | 类型 | 说明 ---|---|--- id | bigint | 岗位id 2.9. 新增职位接口 请求方式:POST 请求URL:/api/job 请求参数: 字段 | 类型 | 说明 ---|---|--- name | string | 职位名称 position_id | bigint | 所属岗位id 2.10. 修改职位接口 请求方式:PUT 请求URL:/api/job/{id} 请求参数: 字段 | 类型 | 说明 ---|---|--- id | bigint | 职位id name | string | 职位名称 position_id | bigint | 所属岗位id 2.11. 删除职位接口 请求方式:DELETE 请求URL:/api/job/{id} 请求参数: 字段 | 类型 | 说明 ---|---|--- id | bigint | 职位id 2.12. 查询职位接口 请求方式:GET 请求URL:/api/job/{id} 请求参数: 字段 | 类型 | 说明 ---|---|--- id | bigint | 职位id 3. 实现方式 组织机构模块的实现方式可以采用Spring Boot + MyBatis,具体实现可以参考以下步骤: 3.1. 创建实体类 创建部门、岗位、职位的实体类,对应数据库中的表。 3.2. 创建Mapper接口 创建对应的Mapper接口,用于操作数据表。 3.3. 创建Service接口和实现类 创建对应的Service接口和实现类,用于对外提供接口,调用Mapper接口的方法实现对数据表的操作。 3.4. 创建Controller类 创建对应的Controller类,用于接收请求,调用Service接口的方法,返回处理结果。 以上是基于Spring Boot的用户权限管理系统的组织机构模块的设计及实现的一些思路,具体实现还需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值