ant design vue动态循环生成表单以及自定义校验规则

ant design vue动态循环生成表单以及自定义校验规则_antd vue 循环表单校验怎么加-CSDN博客

 

二、在对话框内循环生成表单

<a-modal
    :title="addManTitle"
    :visible="manModalVisible"
    @ok="manModalOk"
    @cancel="manModalCancel"
    okText="确定"
    cancelText="取消"
    :mask=false
    :zIndex=1000
    :width=850>
        <a-form-model ref="addManFormRef" :model="addManForm" :label-col="{span:7}" :wrapper-col="{ span: 16 }">
            <a-row>
            </a-row>
            <div class="manContent">
                <div class="manSingle" v-for="(item,index) in addManForm.manObjList" :key="index">
                    <div class="title">
                        <div class="iconOperate">
                            <a-icon type="up"  v-if="manArrowState && index==0" @click="manFold"/>
                            <a-icon type="down" v-if="!manArrowState && index==0"  @click="manUnfold"/>
                            <i class="iconfont iconicon-test" v-if="!btnVisible && index==0" @click="addManObjList"></i>
                            <i class="iconfont iconshanchu" v-if="!btnVisible && index==0" @click="delManObjList"></i>
                        </div>
                    </div>
                    <div class="manContainer">
                        <a-row>
                            <a-col :span="12">
                                <a-form-model-item label="所属公司:" :prop="'manObjList.'+index+'.person_info_company_guid'"
                                    :rules="[{ required: true, message: '所属公司不能为空', trigger: 'change'}]">
                                    <a-tree-select
                                        v-model="item.person_info_company_guid"
                                        :tree-data="companySelectData"
                                        style="width:100%"
                                        placeholder="请选择所属公司"
                                        allow-clear
                                        :disabled="modalDisabled"
                                        tree-default-expand-all/>
                                </a-form-model-item>
                            </a-col>
                            <a-col :span="12">
                                <a-form-model-item label="所属班组:"  :prop="'manObjList.'+index+'.person_info_team_guid'"
                                    :rules="[{ required: true, message: '所属班组不能为空', trigger: 'change'}]">
                                    <a-tree-select
                                        v-model="item.person_info_team_guid"
                                        :tree-data="teamSelectData"
                                        style="width:100%"
                                        placeholder="请选择所属班组"
                                        allow-clear
                                        :disabled="modalDisabled"
                                        tree-default-expand-all/>
                                </a-form-model-item>
                            </a-col>
                        </a-row>
                        <a-row>
                            <a-col :span="12">
                                <a-form-model-item label="计划投入数量:"  :prop="'manObjList.'+index+'.person_info_plan_sum'"
                                    :rules="[{type: 'number', message: '仅支持输入数字', trigger: 'blur' ,transform(value){ 
                                        if(value){
                                            // 将输入的值转为数字
                                            var val = Number(value)
                                            if(/^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$/.test(val)) return val
                                            // 返回false即为校验失败
                                            return false
                                        }
                                    }},
                                    {required:true,message:'计划投入数量不能为空',trigger: 'blur'}]">
                                    <a-input v-model="item.person_info_plan_sum" :disabled="modalDisabled" placeholder="请输入计划投入数量" />
                                </a-form-model-item>
                            </a-col>
                            <a-col :span="12">
                                <a-form-model-item label="计划投入时间:" :prop="'manObjList.'+index+'.person_info_plan_time'"
                                    :rules="[{ required: true, message: '计划投入时间不能为空', trigger: 'change'},
                                    {validator:manPlanTime}]">
                                    <a-date-picker v-model="item.person_info_plan_time" format="YYYY-MM-DD" :disabled="modalDisabled" style="width:100%"/>
                                </a-form-model-item>
                            </a-col>
                        </a-row>
                        <a-row>
                            <a-col :span="12">
                                <a-form-model-item label="实际投入数量:"  :prop="'manObjList.'+index+'.person_info_sum'"
                                    :rules="[{type: 'number', message: '仅支持输入数字', trigger: 'blur' ,transform(value){ 
                                        if(value){
                                            // 将输入的值转为数字
                                            var val = Number(value)
                                            if(/^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$/.test(val)) return val
                                            // 返回false即为校验失败
                                            return false
                                        }
                                    }},
                                    {required:true,message:'实际投入数量不能为空',trigger: 'blur'}
                                ]">
                                    <a-input v-model="item.person_info_sum" :disabled="modalDisabled" placeholder="请输入实际投入数量"/>
                                </a-form-model-item>
                            </a-col>
                            <a-col :span="12">
                                <a-form-model-item label="实际投入时间:" :prop="'manObjList.'+index+'.person_info_time'"
                                    :rules="[{ required: true, message: '实际投入时间不能为空', trigger: 'change'},
                                    {validator:manActualTime}]" >
                                    <a-date-picker v-model="item.person_info_time" placeholder="请选择实际投入时间" style="width:100%" :disabled="modalDisabled"/>
                                </a-form-model-item>
                            </a-col>
                        </a-row>
                        <a-row>
                            <a-col :span="12">
                                <a-form-model-item label="备注:"  :prop="'manObjList.'+index+'.person_info_remark'"
                                :rules="[{max: 200, message: '备注长度不能大于200', trigger: 'blur' }]">
                                    <a-input type="textarea" v-model="item.person_info_remark" placeholder="请输入备注" :disabled="modalDisabled"/>
                                </a-form-model-item>
                            </a-col>
                        </a-row>
                    </div>
                </div>
            </div>
        </a-form-model>
    </a-modal>
 

写在最后

  • 这样就能完成一个循环生成表单且完成自定义表单校验,但还有一个小瑕疵,动态生成的日期选择框绑定的是UTC格式的日期,而不是组件本身绑定的moment对象的日期格式,看到这篇文章并且有同样问题或者解决掉这个问题的可以与我交流下,感谢浏览!

转载:如有侵权联系后及时删除

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值