[ElemeFE/element]表单校验必须使用el-form-item吗?

2024-08-13 594 views
1

image

需要在Table组件中,嵌套各种表单控件并实现验证,但官方例子中,要求prop必须绑定到el-form-item组件,由于该组件绑定了样式,需要做额外的样式重置工作。

目前我是自定义的丑陋的验证规则,请求改进prop的绑定方式。

回答

4

是的,目前必须使用form-item

2

@xiongsongsong 请问你这个动态表单是怎么绑定验证规则的?比如你图中的table,如果是动态的添加row,验证规则怎么写,试了半天未果

9

截取了部分源码:

<el-table :data="stock.tableData" style="width: 100%;height:100%;font-size:12px;">
                <el-table-column label="名称" width="180">
                    <template scope="scope">
                        <el-form-item
                                :prop="'tableData.'+scope.$index+'.yptym'"
                                :key="scope.row.key"
                                :rules="{required: true, message: '名称不能为空', trigger: 'blur,change'}">
                            <el-input :value="scope.row.yptym"
                                      v-table-select="scope.row"
                                      tpl="stockInTpl"
                                      size="small"/>
                        </el-form-item>
                    </template>
                </el-table-column>
                <el-table-column label="失效日期" width="125">
                    <template scope="scope">
                        <el-row v-if="notRequireInputDateGS.indexOf(stock.gs)>-1">不需要填写</el-row>
                        <el-row v-else>
                            <el-form-item
                                    :prop="'tableData.'+scope.$index+'.expired'"
                                    :key="scope.row.key"
                                    :rules="{type: 'object', required: true, message: '选择失效日期', trigger: 'change'}">
                                <el-date-picker
                                        v-model="scope.row.expired"
                                        type="date"
                                        size="small"
                                        placeholder="失效日期">
                                </el-date-picker>
                            </el-form-item>
                        </el-row>
                    </template>
                </el-table-column>
                <el-table-column align="right" label="进货价格">
                    <template scope="scope">
                        <el-form-item
                                :prop="'tableData.'+scope.$index+'.purchasePrice'"
                                :key="scope.row.key"
                                :rules="{type: 'number',required: true,min: 0.0001, message: '价格必须填写', trigger: 'change'}">
                            <el-input size="small" class="number"
                                      v-model.number="scope.row.purchasePrice"
                                      @change="computedMoney(scope.row)"/>
                        </el-form-item>
                    </template>
                </el-table-column>
                <el-table-column align="right" label="入库数量">
                    <template scope="scope">
                        <el-form-item
                                :prop="'tableData.'+scope.$index+'.count'"
                                :key="scope.row.key"
                                :rules="{type: 'number',min: 0 ,required: true, message: '价格必须填写', trigger: 'change'}">
                            <el-input size="small" class="number" v-model.number="scope.row.count"
                                      @change="computedMoney(scope.row)"/>
                        </el-form-item>
                    </template>
                </el-table-column>
                <el-table-column align="right" prop="cost" label="进货金额" width="90"></el-table-column>
            </el-table>
8

el-table 外层还需要 el-form吗? 直接使用 el-form-item 好像不行 @xiongsongsong

8

@tingrun919 必须包含在el-form中,才会启用验证。

4

遇到同样的问题。输入在table里,看了下vue-validitor和另外一个插件,觉得用起来也麻烦,先收藏了。一会改代码去

9

@xiongsongsong 你这个最外层的el-form如何写的?pattern验证不起作用呢

3

@hamburgduo

<el-form :rules="stockRule" ref="stock" :model="stock" :inline="true" :label-position="'right'"
                 v-loading="dialogLoading"
                 label-width="85px">
6

@xiongsongsong 能否发一下整个vue文件的源码?

2

stockRule的规则: @hamburgduo

//效验规则
//效验规则
stockRule: {
    gs: [{
        required: true,
        message: '请选择归属'
    }],
    supplier: [{
        required: true,
        message: '请选择供货单位'
    }],
    category: [{
        required: true,
        message: '请选择入库类型'
    }],
    inTime: [{
        validator(rule, value, callback){
            if (moment(value).isValid()) {
                callback()
            } else {
                callback(new Error('请设置入库时间'))
            }
        }
    }],
    medicine: {required: true, message: '名称不能为空', trigger: 'blur,change'},
    batchNumber: {required: true, message: '批号不能为空', trigger: 'blur,change'},
    produced: {type: 'object', required: true, message: '选择生产日期', trigger: 'change'},
    expired: {type: 'object', required: true, message: '选择失效日期', trigger: 'change'},
    purchasePrice: {
        type: 'number',
        required: true,
        min: 0.0001,
        message: '价格必须填写',
        trigger: 'change'
    },
    count: {type: 'number', min: 0, required: true, message: '价格必须填写', trigger: 'change'}
},
4

@xiongsongsong

validator(rule, value, callback){
            if (moment(value).isValid()) {
                callback()
            } else {
                callback(new Error('请设置入库时间'))
            }
        }

这个moment是验证库吗? 可以发一下这个库的仓库地址吗? 谢谢

4

是的,目前必须使用form-item 行内校验时,如果对form-item 用自定义的prop,且这个prop不是form绑定的对象的属性,目前试后发现是无效的,请教一下如果进行自定义的行内校验,我的demo form-item 是这样的

这里的porp list.id会在form-item有值里绑定上,但发现无效,请求支援
0

@baiyaaaaa

0

还是说prop 属性名,必须要跟 el-form 的 model 对应