表单验证 -- 同级部门禁止出现重复部门

一.添加的部门名称在同级部门中不允许重复

         1. 在某个部门上点击添加时, 被占用的名字列表 = 这个部门的子部门

        2. 添加 validName自定义校验函数

                1.在某个部门上点击 编辑时:被占用的名字列表 = 当前部门的兄弟部门 - 它自己的名字

                

 

var arr originList = [
  {id:'01', pid:'', name:'财务部'},
  {id:'02', pid:'01', name:'财务核算部'},
  {id:'03', pid:'01', name:'税务核算部'},
  {id:'04', pid:'01', name:'薪资核算部'},
]

// 自定义验证函数
// 验证部门名称是否重复
const validName = (rule, value, callback) => {
  // 1. 如果是添加,先使用 filter 筛选出 pid 一致的兄弟节点
  // 在然后,使用 map 将同级的 name 全局取出,组装成一个数组
  let existNameList = this.originList.filter(item => item.pid === this.parentId).map(item => item.name)

  // 3. 编辑时的校验
  if (this.isEdit) {
    // 3.1 【先找到自身对应的对象】
    // 找到父级的 id,因为父级的 id 和 子级的 pid 一致
    // 所以只要使用 find 判断每一项 id 和 传入的 id 是否一致,就可以获取到当前编辑这一项的对象
    const dept = this.originList.find(item => item.id === this.parentId)

    // 3.2 【获取父级的 id】,因为父级的 id 和 子级的 pid 一致,直接 【对象.pid】 就能够获取到父级的 id
    const pid = dept.pid

    // 3.3 既然已经有了父级 id,只需获取兄弟节点:从 originList 中筛选出和 父级 id 一致的 pid
    // 先使用 filter 筛选出兄弟节点,同时将自己排除
    // 在使用 map 方法将兄弟节点的 name 组装成一个数组
    existNameList = this.originList
      .filter(item => item.pid === pid && item.id !== this.parentId)
      .map(item => item.name)
  }

  // 2. 使用 includes 方法检测是否存在同名的 name
  existNameList.includes(value) ? callback(new Error(`部门名称${value}已存在`)) : callback()
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值