vue多个动态表单拆分为组件以便维护案例

父组件内容:

javascript 复制代码
		  <div
            v-for="(item, index) in form.payGiftLevelList"
            :key="item.key"
          >
            <div class="giftLevelWrap">
              <div style="margin-left: -40px">
                <reward-resource-form
                  ref="ActivityResource"
                />
              </div>
            </div>
          </div>
      async getResult() {
        const list = [];
        this.form.payGiftLevelList.map(async (item, index) => {
          const activityResource = this.$refs.ActivityResource[index].getData();
          list.push(activityResource);
        });
        const result = await Promise.all(list);
        console.log(result);
      },
      // 回显表单内容
      this.form.payGiftLevelList.forEach((it, index) => {
        this.$nextTick(() => {
          this.$refs.ActivityResource[index].setData(it);
        });
      });

子组件内容:

javascript 复制代码
<template>
  <el-form
    :model="form"
    :rules="rules"
    :disabled="disabled"
    label-position="left"
    label-width="148px"
    ref="rewardResourceForm"
  >
    <el-form-item
      label=""
      required
    >
    <el-input-number
      v-model="form.useRuleMax"
      style="width: 80px; margin: 0 5px"
      :controls="false"
      :precision="0"
      size="mini"
      :min="1"
      :max="99999999"
      label="请输入购满金额"
    />
    </el-form-item>
    <el-form-item
      :label="actRuleBrand === 1 ? '阶梯权益' : '发放权益'"
      prop="data"
      :required="true"
    >
      <select-gift-checkbox
        v-model="form.data"
        :disabled-types="[]"
        :begin-end-time="beginEndTime"
      />
    </el-form-item>
  </el-form>
</template>

<script>
  export default {
    data() {
      return {
        form: {
          useRuleMax: '',
        },
        rules: {
          useRuleMax: [
            { required: true, message: '请输入购满金额', trigger: 'blur' }
          ],
        }
      };
    },
    methods: {
      getData() {
        return this.$refs.rewardResourceForm.validate().then((r) => {
          const {
            useRule,
            useRuleMax
          } = this.form;
          return {
            useRule,
            useRuleMax
          };
        });
      },
      setData(data) {
        // 转换成可用数组,直接转成一个数组
        const { useRule, useRuleMax, activityPayResDTO } = _.pick(data, [
          'useRule',
          'useRuleMax',
          'activityPayResDTO'
        ]);
        this.form = {
          data: activityPayResDTO,
          useRule,
          useRuleMax
        };
      },
    },
相关推荐
Hilaku1 小时前
我用 Gemini 3 Pro 手搓了一个并发邮件群发神器(附源码)
前端·javascript·github
全栈前端老曹1 小时前
【包管理】npm init 项目名后底层发生了什么的完整逻辑
前端·javascript·npm·node.js·json·包管理·底层原理
HHHHHY1 小时前
mathjs简单实现一个数学计算公式及校验组件
前端·javascript·vue.js
boooooooom1 小时前
Vue3 provide/inject 跨层级通信:最佳实践与避坑指南
前端·vue.js
一颗烂土豆1 小时前
Vue 3 + Three.js 打造轻量级 3D 图表库 —— chart3
前端·vue.js·数据可视化
iReachers1 小时前
HTML打包APK(安卓APP)中下载功能常见问题和详细介绍
前端·javascript·html·html打包apk·网页打包app·下载功能
沉静的思考者1 小时前
vue优雅的适配无障碍
vue.js
愈努力俞幸运1 小时前
vue3 demo教程(Vue Devtools)
前端·javascript·vue.js
持续前行1 小时前
在 Vue3 中使用 LogicFlow 更新节点名称
前端·javascript·vue.js
Anita_Sun1 小时前
Underscore.js 整体设计思路与架构分析
前端·javascript