2022-06-30

关于vue+ ant-design-vue动态列表加校验

我们的项目呢,是一个二维数组表单,实现之后,才发现各种校验不生效。先看一下我们的需求效果

但是值得注意的是:Form.Item 会对唯一子元素进行劫持,并监听 blur 和 change 事件,来达到自动校验的目的,所以请确保表单域没有其它元素包裹。如果有多个子元素,将只会监听第一个子元素的变化。

还有就是,prop和v-model的值必须是一一对应的,代码附上:

 <div v-if="form.isCondition">

                <a-button type="primary" class="mg-20" @click="addCondition()">+ 添加条件</a-button>

                <div v-for="(parent,parentIndex) in form.executeList" :key="parentIndex">

                    <div class="execute-list">

                        <div v-if="parentIndex != 0" class="add-ico"><a-icon type="close-circle" class="ico" @click="del(parentIndex)"/></div>

                        <a-row :gutter="24"  class="mg-20">

                            <a-col :span="10" :offset="2">

                                <a-form-model-item label="选择条件判断:"

                                :prop="'executeList.' + parentIndex + '.conditionField'"

                                :rules=" [{ required: true, message: '不能为空', trigger: 'change' }]">

                                    <div  @click="openModal('conditional', {index:parentIndex,val:parent.conditionField,routerUrl:form.nodeRouterUrl})">

                                        <a-input v-model="parent.conditionField" placeholder="请选择"  :maxLength="30" disabled/>

                                    </div>

                                </a-form-model-item>

                            </a-col>

                            <a-col :span="10" >

                                <a-form-model-item label="" >

                                    <a-button type="primary"  @click="addPrice(parentIndex)">+ 添加值</a-button>

                                </a-form-model-item>

                            </a-col>

                        </a-row>

                        <div v-for="(child,childIndex) in parent.items" :key="childIndex">

                            <div class="price-list">

                                <div class="btn-ico" v-if="childIndex != 0" @click="delChild(parentIndex,childIndex)"><a-icon type="close-circle" class="ico" /></div>

                                <a-row :gutter="24"  >

                                    <a-col :span="10" :offset="2">

                                        <a-form-model-item label="值:"

                                        :prop="'executeList.' + parentIndex + '.items.' + childIndex + '.conditionValue'"

                                        :rules=" [{ required: true, message: '不能为空', trigger: 'change' }]"

                                        >

                                            <a-input v-model="child.conditionValue" placeholder="请输入" :maxLength="30" />

                                        </a-form-model-item>

                                    </a-col>

                                    <a-col :span="10" >

                                        <a-form-model-item label="选择金额字段:"

                                        :prop="'executeList.' + parentIndex + '.items.' + childIndex + '.amountField'"

                                        :rules=" [{ required: true, message: '不能为空', trigger: 'change' }]">

                                            <div  @click="openModal('fileld', {index:parentIndex,indexs:childIndex,val:child.amountField,routerUrl:form.nodeRouterUrl})">

                                                <a-input v-model="child.amountField" placeholder="请选择"  :maxLength="30" disabled/>

                                            </div>

                                        </a-form-model-item>

                                    </a-col>

                                </a-row>

                                <a-row :gutter="24">

                                    <a-col :span="10" :offset="2">

                                        <a-form-model-item label="金额流向:"

                                        :prop="'executeList.' + parentIndex + '.items.' + childIndex + '.amountFlow'"

                                        :rules=" [{ required: true, message: '不能为空', trigger: 'change' }]">

                                            <j-dict-select-tag v-model="child.amountFlow" placeholder="请选择" dictCode="amount_flow"/>

                                        </a-form-model-item>

                                    </a-col>

                                    <a-col :span="10" >

                                       <a-form-model-item label="所属账套类型:"

                                       :prop="'executeList.' + parentIndex + '.items.' + childIndex + '.accountTypeId'"

                                        :rules=" [{ required: true, message: '不能为空', trigger: 'change' }]"

                                       >

                                            <a-select  v-model="child.accountTypeId"  @change="tempChanges(child.accountTypeId,parentIndex,childIndex)" :allowClear="true" placeholder="请选择" >

                                                <a-select-option v-for="(val,index) in accountSetList" :key="index" :value="val.id">{{ val.typeName }}</a-select-option>

                                            </a-select>

                                        </a-form-model-item>

                                    </a-col>

                                </a-row>

                                <a-row :gutter="24" v-if="child.correlationAccount == '1'">

                                    <a-col :span="10" :offset="2">

                                        <a-form-model-item label="成本类型:"

                                        :prop="'executeList.' + parentIndex + '.items.' + childIndex + '.costTypeId'"

                                        :rules=" [{ required: true, message: '不能为空', trigger: 'change' }]">

                                            <a-select  v-model="child.costTypeId" :allowClear="true" placeholder="请选择" >

                                                <a-select-option v-for="(val,index) in CostTypeList" :key="index" :value="val.id">{{ val.typeName }}</a-select-option>

                                            </a-select>

                                        </a-form-model-item>

                                    </a-col>

                                </a-row>

                            </div>

                        </div>

                    </div>

                </div>

            </div>

有更好的方法,欢迎留言

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容