vue element 动态增加表单并进行表单验证

本文介绍了在Vue Element中如何对动态增加的表单进行验证。关键在于使用:prop与v-for结合,如:prop=“'cloudAccounts.' + index + '.objectDetails'”,其中cloudAccounts是v-for遍历的数组,index是索引,objectDetails是表单v-model绑定的字段。同时,v-for的写法也需包含表单的model名。

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

在这里插入图片描述

表单验证:
需要注意的一点是:

普通表单验证单项依靠的是prop…而动态生成的表单要用:prop

书写的语法是:prop=“‘cloudAccounts.’ + index +’.objectDetails’”,cloudAccounts是v-for绑定的数组,index是索引,objectDetails是表单绑定的v-model的名称,然后用.把他们链接起来。

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

还有一个需要注意就是v-for的写法,要将表单的model名写进去

<div class="moreRulesIn" v-for="(item, index) in addForm.cloudAccounts" :key="item.key">
<template>
  <div>
    <el-dialog
      title="添加银联账号"
      :visible="addYlyaccountShowDialog"
      top="6vh"
      @close="handleClose"
      :before-close="beforeClose"
      width="70%"
    >
      <el-form ref="form" :model="addForm" label-width="180px">
        <div class="moreRules">
          <div style="margin: 0px 0px 20px 20px">
            <el-button @click="addUser" size="medium" type="primary"
              >增加</el-button
            >
            <el-button @click="initData" size="medium" type="danger"
              >清空</el-button
            >
          </div>
          <div
            class="moreRulesIn"
            v-for="(item, index) in addForm.cloudAccounts"
            :key="item.key"
          >
            <el-row>
              <el-col :span="8">
                <el-form-item
                  label="银联主账号ID"
                  :prop="'cloudAccounts.' + index + '.accountTenantId'"
                  :rules="[{ required: true, message: '请完善信息' }]"
                >
                  <el-input
                    v-model.trim="item.accountTenantId"
                    placeholder="请输入银联主账号ID"
                    type="number"
                    class="el-select_box"
                    maxlength="40"
                  ></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item
                  label="银联主账号"
                  :prop="'cloudAccounts.' + index + '.primaryAccountUsername'"
                  :rules="[{ required: true, message: '请完善信息' }]"
                >
                  <el-input
                    v-model.trim="item.primaryAccountUsername"
                    placeholder="请输入银联主账号"
                    class="el-select_box"
                    maxlength="40"
                  ></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item
                  label="银联主账号密码"
                  :prop="'cloudAccounts.' + index + '.primaryAccountPassword'"
                  :rules="[{ required: true, message: '请完善信息' }]"
                >
                  <el-input
                    v-model.trim="item.primaryAccountPassword"
                    placeholder="请输入银联主账号密码"
                    class="el-select_box"
                    maxlength="40"
                  ></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item
                  label="银联主账号SecretId"
                  :prop="'cloudAccounts.' + index + '.primarySecretId'"
                  :rules="[{ required: true, message: '请完善信息' }]"
                >
                  <el-input
                    v-model.trim="item.primarySecretId"
                    placeholder="请输入银联主账号密钥ID"
                    class="el-select_box"
                    maxlength="40"
                  ></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item
                  label="银联主账号SecretKey"
                  :prop="'cloudAccounts.' + index + '.primarySecretKey'"
                  :rules="[{ required: true, message: '请完善信息' }]"
                >
                  <el-input
                    v-model.trim="item.primarySecretKey"
                    placeholder="请输入银联主账号密钥KEY"
                    class="el-select_box"
                    maxlength="40"
                  ></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item
                  label="银联子账号"
                  :prop="'cloudAccounts.' + index + '.childAccountUsername'"
                  :rules="[{ required: true, message: '请完善信息' }]"
                >
                  <el-input
                    v-model.trim="item.childAccountUsername"
                    placeholder="请输入银联子账号"
                    class="el-select_box"
                    maxlength="40"
                  ></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item
                  label="银联子账号密码"
                  :prop="'cloudAccounts.' + index + '.childAccountPassword'"
                  :rules="[{ required: true, message: '请完善信息' }]"
                >
                  <el-input
                    v-model.trim="item.childAccountPassword"
                    placeholder="请输入银联子账号密码"
                    class="el-select_box"
                    maxlength="40"
                  ></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item
                  label="银联子账号SecretId"
                  :prop="'cloudAccounts.' + index + '.childSecretId'"
                  :rules="[{ required: true, message: '请完善信息' }]"
                >
                  <el-input
                    v-model.trim="item.childSecretId"
                    placeholder="请输入银联子账号密钥ID"
                    class="el-select_box"
                    maxlength="40"
                  ></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item
                  label="银联子账号SecretKey"
                  :prop="'cloudAccounts.' + index + '.childSecretKey'"
                  :rules="[{ required: true, message: '请完善信息' }]"
                >
                  <el-input
                    v-model.trim="item.childSecretKey"
                    placeholder="请输入银联子账号密钥KEY"
                    class="el-select_box"
                    maxlength="40"
                  ></el-input>
                </el-form-item>
              </el-col>

              <el-col :span="24" align="center">
                <el-button
                  @click="deleteRules(item, index)"
                  icon="el-icon-delete"
                  >删除</el-button
                >
              </el-col>
            </el-row>
            <el-divider></el-divider>
          </div>
        </div>
      </el-form>
      <template v-slot:footer>
        <el-button style="" type="primary" @click="onSubmit">确定</el-button>
        <el-button @click="handleClose">取消</el-button>
      </template>
    </el-dialog>
  </div>
</template>

<script>
import { reqBatchSaveOrUpdateCloudAccounts } from "@/api/account";
export default {
  name: "YSYPRODUCTAddYlyaccount",
  props: {
    addYlyaccountShowDialog: {
      type: Boolean,
    },
  },
  data() {
    return {
      addForm: {
        // content: "",
        cloudAccounts: [
          {
            accountTenantId: "",
            primaryAccountUsername: "",
            primaryAccountPassword: "",
            primarySecretId: "",
            primarySecretKey: "",
            childAccountUsername: "",
            childAccountPassword: "",
            childSecretId: "",
            childSecretKey: "",
            type: "unionpay",
          },
        ],
      },
    };
  },

  mounted() {},

  methods: {
    //清空
    initData() {
      this.addForm.cloudAccounts = [];
    },
    //添加
    addUser() {
      this.addForm.cloudAccounts.push({
        accountTenantId: "",
        primaryAccountUsername: "",
        primaryAccountPassword: "",
        primarySecretId: "",
        primarySecretKey: "",
        childAccountUsername: "",
        childAccountPassword: "",
        childSecretId: "",
        childSecretKey: "",
        type: "unionpay",
      });
    },
    //单项删除
    deleteRules(item, index) {
      this.index = this.addForm.cloudAccounts.indexOf(item);
      if (index !== -1) {
        this.addForm.cloudAccounts.splice(index, 1);
      }
    },
    //确认
    async onSubmit() {
      console.log(this.addForm.cloudAccounts);
      this.$refs.form.validate(async (vaild) => {
        if (!vaild) return;
        const res = await reqBatchSaveOrUpdateCloudAccounts(this.addForm);
        console.log(res);
        if (res.code === 200) {
          this.$message.success("新增银联账号成功");
          this.handleClose();
          this.$emit("getlistPageCloudUnionPayAccounts");
        }
      });
    },
    // 关闭弹层
    handleClose() {
      this.$emit("update:addYlyaccountShowDialog", false); // 关闭弹窗
      this.$refs.form.resetFields(); // 重置校验表单
      this.addForm.cloudAccounts = [
        {
          accountTenantId: "",
          primaryAccountUsername: "",
          primaryAccountPassword: "",
          primarySecretId: "",
          primarySecretKey: "",
          childAccountUsername: "",
          childAccountPassword: "",
          childSecretId: "",
          childSecretKey: "",
          type: "unionpay",
        },
      ];
    },
    // 关闭弹层
    async beforeClose(done) {
      const confirmResult = await this.$confirm(
        "内容还未保存,此操作会导致信息丢失!是否继续?",
        "温馨提示",
        {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        }
      ).catch((err) => err);
      if (confirmResult === "cancel") return;
      done();
    },
  },
};
</script>

<style lang="scss" scoped>
</style>

参考自:vue element 动态增加表单并进行表单验证

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值