el-form中关于添加el-table后动态添加el-input后怎么设置校验

个人笔记,欢迎指正

场景复现
如何实现动态表单满足rules规则
在这里插入图片描述
在这里插入图片描述
实现代码

<el-form ref="form" :model="form" :rules="rules" label-width="80px">
   <el-col :span="24">
     <el-form-item label="客户名称" prop="customerId">
       <el-select
         v-model="form.customerId"
         placeholder="请选择客户名称"
         style="width: 100%"
       >
         <el-option
           v-for="customer in customerList"
           :key="customer.customerId"
           :label="customer.customerName"
           :value="customer.customerId"
         />
       </el-select>
     </el-form-item>
   </el-col>
   <el-col :span="12">
     <el-form-item label="商机名称" prop="orderId">
       <el-select
         v-model="form.orderId"
         placeholder="请选择商机名称"
         style="width: 100%"
       >
         <el-option
           v-for="order in orderList"
           :key="order.orderId"
           :label="order.orderName"
           :value="order.orderId"
         />
       </el-select>
     </el-form-item>
   </el-col>
   <el-col :span="12">
     <el-form-item label="申请日期" prop="applyTime">
       <el-date-picker
         style="width: 100%"
         clearable
         v-model="form.applyTime"
         type="date"
         value-format="yyyy-MM-dd"
         placeholder="请选择申请日期"
       />
     </el-form-item>
   </el-col>
   
   <!-- 动态表单处 -->
   <el-col :span="24">
     <el-form-item label="费用明细" prop="details" class="details">
       <el-table :data="detailList" style="width: 100%">
         <el-table-column label="报销项目" prop="project" width="280">
           <template slot-scope="scope">
             <el-input
               v-model="scope.row.detailsName"
               placeholder="请输入报销项目"
             />
           </template>
         </el-table-column>
         <el-table-column label="摘要" prop="detailsSummary" width="280">
           <template slot-scope="scope">
             <el-input
               v-model="scope.row.detailsSummary"
               placeholder="请输入摘要"
             />
           </template>
         </el-table-column>
         <el-table-column label="金额" prop="detailsAmount" width="280">
           <template slot-scope="scope">
             <el-input
               v-model="scope.row.detailsAmount"
               type="number"
               placeholder="请输入金额"
             />
           </template>
         </el-table-column>
         <el-table-column
           label="操作"
           align="center"
           class-name="small-padding fixed-width"
         >
           <template slot-scope="scope">
             <el-button
               v-if="scope.$index === detailList.length - 1"
               size="mini"
               type="text"
               icon="el-icon-plus"
               @click="addExpenses"
               >新增</el-button
             >
             <el-button
               v-else
               size="mini"
               type="text"
               icon="el-icon-delete"
               @click="delExpenses(scope.$index)"
               >删除</el-button
             >
           </template>
         </el-table-column>
       </el-table>
     </el-form-item>
   </el-col>
   <!-- 动态表单处 -->

   <el-col :span="24">
     <el-form-item label="合计金额" prop="amount">
       <el-input
         v-model="form.amount"
         placeholder="请输入合计金额"
         readonly
       />
     </el-form-item>
   </el-col>
   <el-col :span="12">
     <el-form-item label="原借款" prop="loan">
       <el-input v-model="form.loan" placeholder="请输入原借款" />
     </el-form-item>
   </el-col>
   <el-col :span="12">
     <el-form-item label="应退款" prop="refund">
       <el-input v-model="form.refund" placeholder="请输入应退款" />
     </el-form-item>
   </el-col>
   <el-col :span="24">
     <el-form-item label="备注" prop="remark">
       <el-input
         v-model="form.remark"
         type="textarea"
         placeholder="请输入内容"
       />
     </el-form-item>
   </el-col>
   <el-col :span="24">
     <el-form-item>
       <el-button type="primary" @click="submitForm">确 定</el-button>
       <el-button @click="cancel">取 消</el-button>
     </el-form-item>
   </el-col>
 </el-form>
<script>
export default {
  name: "Apply",
  data() {
    return {
      detailList: [
        { detailsName: "", detailsSummary: "", detailsAmount: null },
      ],
      // 表单参数
      form: {},
      // 表单校验
      rules: {
        customerId: [
          { required: true, message: "客户名称不能为空", trigger: "change" },
        ],
        orderId: [
          { required: true, message: "商机名称不能为空", trigger: "change" },
        ],
        applyTime: [
          { required: true, message: "申请时间不能为空", trigger: "change" },
        ],
        amount: [
          { required: true, message: "费用金额不能为空", trigger: "bulr" },
        ],
        details: {
          required: true,
          validator: this.validateDetails,
          trigger: 'blur',
        },
      },
    };
  },
  methods: {
    validateDetails(rule, value, callback) {
      const isValid = this.detailList.every(item => {
      	// 检查每一项必填
        return item.detailsName && item.detailsSummary && item.detailsAmount; 
      });
      if (!isValid) {
        callback(new Error('每一项都必须填写完整'));
      } else {
        callback();
      }
    },
    addExpenses() {
      this.detailList.push({
        detailsName: "",
        detailsSummary: "",
        detailsAmount: "",
      });
    },
    delExpenses(index) {
      this.detailList.splice(index, 1);
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate((valid) => {
        if (valid) {
          if (this.form.applyId != null) {
            updateApply(this.form).then((response) => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
            addApply(this.form).then((response) => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            });
          }
        }
      });
    },
  },
};
</script>
Vue是一种流行的JavaScript框架,用于构建用户界面。它采用了组件化的开发方式,使得开发者可以将页面拆分成独立的、可复用的组件。el-tableVue中的一个表格组件,而el-input是一个输入框组件。 在el-table中使用el-input进行行内校验的方法如下: 1. 首先,在el-table的每一行中使用el-input组件来渲染需要进行校验的单元格。 2.el-input上使用Vue校验指令(如v-model和:rules)来实现校验功能。 3.Vue实例中定义校验规则,并将其应用到el-input上。 下面是一个示例代码: ```html <template> <el-table :data="tableData"> <el-table-column prop="name" label="姓名"> <template slot-scope="scope"> <el-input v-model="scope.row.name" :rules="nameRules"></el-input> </template> </el-table-column> <el-table-column prop="age" label="年龄"> <template slot-scope="scope"> <el-input v-model="scope.row.age" :rules="ageRules"></el-input> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 20 }, { name: '李四', age: 25 }, // ... ], nameRules: [ { required: true, message: '姓名不能为空', trigger: 'blur' }, // 其他校验规则 ], ageRules: [ { required: true, message: '年龄不能为空', trigger: 'blur' }, // 其他校验规则 ] }; } }; </script> ``` 在上述代码中,我们使用了el-table组件来展示数据,并在每一列中使用el-input组件进行编辑。通过给el-input组件绑定v-model指令,可以实现数据的双向绑定。同时,通过给el-input组件绑定:rules指令,可以定义校验规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值