antd vue 组件 使用下拉框的层级来显示后面的输入框

效果图:

代码:

HTML:

html 复制代码
		<dir>
          <a-row>
            <a-col :span="4">
              <a-form-model-item label="审批层级" >
                <a-select
                  placeholder="请选择审批层级"
                  v-model="form.PlatformPurchaseApproveLevel"
                  @change="(e) => handelChange(e, 'approverList')"
                >
                  <a-select-option :value="1">一级</a-select-option>
                  <a-select-option :value="2">二级</a-select-option>
                  <a-select-option :value="3">三级</a-select-option>
                </a-select>
              </a-form-model-item>
            </a-col>
            <a-col :span="14">
              <div v-for="(item, index) in form.approverList" :key="index">
                <a-form-model-item
                  label="审批人"
                  :prop="'approverList.' + index + '.approver'"
                  :rules="{
                    required: true,
                    message: `请选择${index + 1}级审批人`,
                  }"
                >
                  <a-select
                    mode="multiple"
                    style="width: 300px"
                    v-model="item.approver"
                    :maxTagCount="4"
                    allowClear
                    placeholder="选择审批人"
                  >
                    <a-select-option v-for="i in 5" :key="i+1">
                      {{ i+1}}
                    </a-select-option>
                  </a-select>
                </a-form-model-item>
              </div>
            </a-col>
          </a-row>
        </dir>

Data:

javascript 复制代码
 form: {
 		//默认层级是一级所以默认:1
        PlatformPurchaseApproveLevel: 1,
        approverList: [{}], 
        },
 codeList: [
        {
          code: 'PRODUCT_PURCHASE',
          name: 'approverList',
          type: 0, //'审批类型(0-平台审批;1-公司审批)'
          status: 'platformPurchaseStatus',
          level: 'PlatformPurchaseApproveLevel',
        },
        {
        //这里就可以增加其他的数据
		}
     ]

Methods:

javascript 复制代码
// 本方法是公共的, string可以作为后续的参数在change事件后面进行传递
 handelChange(e, string) {
      // 已经选择的审批人层级
      var auditLength = this.form[string].length
      // 选择的审批人层级 减去 已经选择审批人层级
      var num = e - auditLength
      // 若num大于0 则添加 num个层级
      if (num > 0) {
        for (let index = 0; index < num; index++) {
          this.form[string].push({})
        }
      } else {
        // 若小于0 则审批层级减去num  从e开始是需要删除的下标  Math.abs(num)负数转正数 需要删除的数量
        this.form[string].splice(e, Math.abs(num))
      }
    },
  //数据回显
   loadData() {
	//接口成功后处理数据回显,因为后端返回的数据是一个数组包含多条数据,需要前端自己去处理回显
	 if (res.code == 200) {
            let records = res.result.records
            if (records.length) {
              this.codeList.forEach((item) => {
              //这里使用了一个封装了公共的处理方法
                this.withdrawal(records, item)
              })
            }
      	}
	},
	// 处理查询时的数据格式公共方法
    withdrawal(records, obj) {
    //先重置一下
      this.form[obj.name] = []
      //筛选出相同的
      let endList = records.filter((el) => {
        return el.templateCode == obj.code && el.approveType == obj.type
      })
      //这里要判断一下有没有,有在进行,没有就展示data里面定义的展示
      if (!endList.length) return
      let endListOne = endList[0]
      this.form[obj.status] = endListOne.status.toString()
      this.form[obj.level] = endListOne.templateType
      //这里循环是为了知道你之前选择了几级审批的模板,比如:1级,2级 templateType
      for (let index = 0; index < endListOne.templateType; index++) {
        this.form[obj.name].push({ approver: [] })
      }
      endList.forEach((item) => {
        this.form[obj.name].forEach((el, index) => {
        //知道了你是几级的审批模板 还需要知道你是模板后面的审批层级
        //这一步是将你是第几级审批还原回去,approveLevel 表示你是第几级的审批
          if (item.approveLevel - 1 == index) {
            el.approver.push(item.approver)
          }
        })
      })
    },
相关推荐
uhakadotcom29 分钟前
将next.js的分享到twitter.com之中时,如何更新分享卡片上的图片?
前端·javascript·面试
小小愿望36 分钟前
解锁前端新技能:让JavaScript与CSS变量共舞
前端·javascript·css
天生我材必有用_吴用1 小时前
一文搞懂 useDark:Vue 项目中实现深色模式的正确姿势
前端·vue.js
二闹1 小时前
JS调用高德地图标注地点-简单呐
前端·javascript
鴆川傲1 小时前
web前端第二次作业
前端·javascript·css
用户84913717547161 小时前
Access Token + Refresh Token 全解析:前后端分离架构的认证与安全方案
vue.js·spring boot·架构
ruokkk1 小时前
一个困扰我多年的Session超时Bug,被我的新AI搭档半天搞定了
javascript·后端·架构
Ratten1 小时前
【node 实战】---- 实现接口自动化:图片批量上传
javascript
复苏季风1 小时前
v-for什么时候使用index,什么是时候用uuid当key
前端·vue.js
小高0071 小时前
🔍Vue 隐藏神技巧:99% 开发者没用过,却能让代码简洁 50%
前端·javascript·vue.js