element ui動態表單 + 自定義校驗規則
阿新 • • 發佈:2020-12-07
背景描述:
表單如下圖所示:
如上圖所示,我們有一個動態表單(教育經歷) - 可以動態新增的,我們的校驗規則是:
如果不填寫公司名稱,那麼所有欄位非必填,如果填寫了公司名稱那麼當前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 字串擷取獲取 (自己找到的,文件沒有)