elementUI 动态增减表单并非空验证

elementUI 动态增减表单并添加了非空验证

效果图如下

在这里插入图片描述

后端返回详情接口样式

在这里插入图片描述
动态表单验证关键在prop的对象一定是当前我们数据定义的,比如我的是headId
:prop="‘dynamicItem.’ + index + ‘.heatId’"
:rules="{required: true,message: ‘请选择领导人’,trigger: ‘change’,}"

所以总结起来的语法就是:prop="‘v-for绑定的数组.’ + index + ‘.v-model绑定的变量’"

页面模块

<el-form-item
   class="draggableData"
   v-for="(item, index) in form.dynamicItem"
   :key="'item.' + index"
   value-key="heatId"
   :label="'领导人'"
   :prop="'dynamicItem.' + index + '.heatId'"
   :rules="{required: true,message: '请选择领导人',trigger: 'change',}"
    >
      <el-select
         @visible-change="visibleChange"
         id="selectItem"
         ref="selectItem"
         @change="changeDynamicItem($event, index)"
         v-model="item.heatId"
         value-key="heatId"
         class="longselect"
         filterable
         placeholder="请选择领导人" >
             <el-option
                v-for="item2 in leadersOption"
                :key="item2.heatId"
                :label="item2.heatName"
                :value="item2.heatId"
              ></el-option>
       </el-select>
        <a
           class="my-iconfont icontianjia"
           @click="addItem(item, index)"
        ></a>
        <a
           class="my-iconfont iconshanchu1"
           @click="deleteItem(item, index)"
           v-show="index !== 0"
        ></a>
 </el-form-item>

js模块

//data数据
leaderList: [], //领导人
form: {
   dynamicItem: [{ heatId: '' }],
 },
created() {
    this.getData();
  },
method:{
	// 获取列表和详情
    async getData() {
      const params1 = {
        limit: -1,
      };
      const configRes1 = await 获取下拉框总列表接口(params1);
      if (configRes1.resp_code === 0) {
        this.leadersOption = configRes1.datas;
      }
      const params = {
        types: [1, 2, 3],
      };
      const configRes = await 获取详情接口(params);
      if (configRes.resp_code === 0 && configRes.datas) {
        //后端返回的数据处理
        if (
          configRes.datas.leaderOpinion &&
          configRes.datas.leaderOpinion.length > 0
        ) {
          this.form.dynamicItem = configRes.datas.leaderOpinion.map((item) => ({
            heatId: item.cockpitConfigDetail,
          }));
        }
		//没有返回数据默认添加一个空数据,否则一条不显示无法添加
        if (!this.form.dynamicItem) {
          const arr = [
            {
              id: '',
              heatId: '',
              cockpitConfigRank: 1,
            },
          ];
          this.form.dynamicItem = arr;
          this.leaderList = arr;
        } else {
          this.dynamicItemFilter();
        }
      }
    },
   //#region 领导模块
    // 添加领导人
    addItem(item, index) {
      if (
        this.form.dynamicItem.length < 20 &&
        this.form.dynamicItem.length >= 0
      ) {
        this.form.dynamicItem.splice(index + 1, 0, {
          heatId: '',
        });
      } else {
        this.$message.error('领导人只能添加20条');
      }
      this.leaderList = [];
      this.dynamicItemFilter();
    },
    // 删除领导人
    deleteItem(item, index) {
      this.form.dynamicItem.splice(index, 1);
      this.leaderList = [];
      this.dynamicItemFilter();
    },
    // 领导人下拉框
    changeDynamicItem(heatId, index) {
      this.form.dynamicItem[index].heatId = heatId;
      this.leaderList[index].heatId = heatId;
    },
    // 处理领导人数据
    dynamicItemFilter() {
      this.form.dynamicItem.forEach((item, index) => {
        this.leaderList.push({
          id: '',
          heatId: item.heatId,
          cockpitConfigRank: index + 1,
        });
      });
    },
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值