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
        };
      },
    },
相关推荐
卤蛋fg633 分钟前
vue 甘特图 vxe-gantt 的使用(一):年视图的渲染
vue.js
前端开发爱好者1 小时前
支持 110 种文件预览!兼容 Vue、React、Svelte!
前端·javascript·vue.js
大家的林语冰2 小时前
👍 尤大重学 Webpack,Vite 8.1 再进化,打包模式复活!
前端·javascript·vite
张元清2 小时前
React useIsomorphicLayoutEffect:修掉 SSR 下的 useLayoutEffect 警告(2026)
前端·javascript·面试
PBitW2 小时前
直接让GPT每日训练我!!!😕😕😕
前端·javascript·面试
拾年2754 小时前
我用 30 行代码,搞懂了大模型是怎么"读"中文的
javascript·人工智能·llm
竹林8184 小时前
从 ethers.js 到 viem:我在一个 DeFi 看板项目中踩过的所有坑与最终方案
前端·javascript
bonechips4 小时前
Tool Use:从"缸中大脑"到 AI Agent 的技术真相
javascript·agent
秋天的一阵风4 小时前
Vue 3 里被严重低估的 API:InjectionKey
前端·javascript·vue.js
kisshyshy5 小时前
从递归到迭代,一文吃透二叉树的核心知识与 JavaScript 实现
javascript·算法·代码规范