vue在后端数据不匹配的情况下处理动态表单

该代码段展示了在Vue.js中如何使用el-form组件进行动态表单构建,包括文本输入框、文本区域和下拉选择框,并结合model和rules进行表单验证。同时,定义了getFormValue、handleSetForm和changeProjectRequireValueDTO等方法来处理表单数据的获取、设置和选择事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板代码

                 <el-form
                    :model="modelFormRules(row.valueDTOList, td.id)"
                    ref="ruleTrendsForm"
                  >
                    <el-form-item
                      :key="tdIndex"
                      :prop="td.isRequired ? 'value' : ''"
                      :rules="{
                        required: true,
                        message: `${td.name}不能为空`,
                        trigger: ['blur', 'change'],
                      }"
                    >
                      <el-input
                        v-if="td.type === 'TEXT'"
                        :value="getFormValue(row.valueDTOList, td.id)"
                        :type="td.valueType === 'NUMBER' ? 'number' : ''"
                        :placeholder="`输入${td.name}`"
                        @input="handleSetForm(row.valueDTOList, td, $event)"
                      ></el-input>

                      <el-input
                        v-if="td.type === 'TEXTAREA'"
                        :type="
                          td.valueType === 'NUMBER' ? 'number' : 'textarea'
                        "
                        rows="2"
                        :value="getFormValue(row.valueDTOList, td.id)"
                        @input="handleSetForm(row.valueDTOList, td, $event)"
                        :placeholder="`输入${td.name}`"
                      ></el-input>
                      <el-select
                        style="width: 100%"
                        v-if="td.type === 'SELECT'"
                        :value="getFormValue(row.valueDTOList, td.id)"
                        :placeholder="`选择${td.name}`"
                        @change="
                          (val) => {
                            changeProjectRequireValueDTO(
                              row.valueDTOList,
                              td,
                              val
                            );
                          }
                        "
                      >
                        <el-option
                          v-for="selectItem in td.valueDTOList"
                          :key="selectItem.id"
                          :label="selectItem.name"
                          :value="selectItem.name"
                        >
                        </el-option>
                      </el-select>
                    </el-form-item>
                    <span
                      v-if="td.isRequired"
                      style="
                        color: red;
                        color: red;
                        position: absolute;
                        top: 34%;
                        right: -11px;
                      "
                      >*</span
                    >
                  </el-form>

js逻辑

 getFormValue(valueList, id) {
      const item = valueList.find((item) => item.tempFieldId === id);
      return item ? item.value : "";
    },
    // ID匹配
    handleSetForm(valueList, td, value) {
      const item = valueList.find((item) => item.tempFieldId === td.id);
      if (item) {
        item.value = value;
        item.tempFieldId = td.id;
        item.baseFieldId = td.baseFieldId;
      } else {
        valueList.push({
          tempFieldId: td.id,
          value,
          baseFieldId: td.baseFieldId,
        });
      }
    },
    // change选择框
    changeProjectRequireValueDTO(valueList, td, value) {
      const item = valueList.find((item) => item.tempFieldId === td.id);
      let tempValueId = null;
      let baseValueId = null;
      td.valueDTOList.map((item) => {
        if (item.name === value) {
          tempValueId = item.id;
          baseValueId = item.baseValueId;
        }
      });
      if (item) {
        item.value = value;
        item.baseFieldId = td.baseFieldId;
        item.tempFieldId = td.id;
        item.tempValueId = tempValueId;
        item.baseValueId = baseValueId;
      } else {
        valueList.push({
          baseFieldId: td.baseFieldId,
          tempFieldId: td.id,
          value,
          tempValueId,
          baseValueId,
        });
      }
      console.log(valueList, "valueList");
      console.log(item, "item");
    },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值