1. 程式人生 > 實用技巧 >element ui動態表單 + 自定義校驗規則

element ui動態表單 + 自定義校驗規則

背景描述:

表單如下圖所示:

如上圖所示,我們有一個動態表單(教育經歷) - 可以動態新增的,我們的校驗規則是:

如果不填寫公司名稱,那麼所有欄位非必填,如果填寫了公司名稱那麼當前item的公司職務等必填

DOM結構:

<el-row>
    <el-form-item
        :rules="workListRule.last_company_name"
        :prop="'dc_talent_work_list.' + idx + '.last_company_name'">
        <template slot="label
"> <span>公司名稱</span> <div style="color:#ccc;line-height:20px;font-size:12px;margin-bottom:8px;padding-left:10px;"> <div>1、如有工作經歷,請如實填寫</div> <div>2、並需完整填寫每個欄位資訊(公司名稱+部門+職務+開始時間+結束時間),否則會造成資訊無法錄入的情況。</div> <div>3
、公司名稱需填寫公司中文或英文全稱</div> </div> </template> <el-input v-model="item.last_company_name" placeholder="請輸入"></el-input> </el-form-item> </el-row> <el-row> <el-form-item label="所在部門" :rules="workListRule.last_company_unit
" :prop="'dc_talent_work_list.' + idx + '.last_company_unit'" > <el-input v-model="item.last_company_unit" placeholder="請輸入"></el-input> </el-form-item> </el-row>

JavaScript:

var validateLastCompanyName = (rule, value, callback) => {
    callback();
};
var validateLastCompanyUnit = (rule, value, callback) => {
    // "dc_talent_work_list.0.last_company_unit"
    let thisField = rule.field.split(".")[1];
    if(this.form.dc_talent_work_list[thisField].last_company_name != '' && value==""){
        callback(new Error("公司部門不能為空"));
    }
    callback();
};
// 工作經歷校驗規則
workListRule:{
    last_company_name: { validator: validateLastCompanyName,trigger: "blur"},
    last_company_unit: { validator: validateLastCompanyUnit,trigger: "blur"},
}

主要依據:

prop屬性根據當前陣列下標 idx 動態,

判定當前在第幾個工作經歷的idx通過形參 rule 字串擷取獲取 (自己找到的,文件沒有)