1.新建表單驗證方法封裝 src/utils/formCheck.js
1 // 手機號碼驗證 2 const validatePhone = (rule, value, callback) => { 3 const patter = new RegExp('^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$') 4 if (!patter.test(value)) { 5 return callback(new Error('請輸入正確格式的手機號!')) 6 } else { 7 callback() // 必須有此項回調,否則驗證會一直不通過 8 } 9 } 10 // 郵箱的正則 11 const validateEmail = (rule, value, callback) => { 12 const mailbox = new RegExp('^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$') 13 if (!mailbox.test(value)) { 14 return callback(new Error('請輸入正確格式的郵箱!')) 15 } else { 16 callback() 17 } 18 } 19 // 身份證號 20 const validateIdCardNo = (rule, value, callback) => { 21 const mailbox = new RegExp('^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx]$') 22 if (!mailbox.test(value)) { 23 return callback(new Error('請輸入正確格式的身份證號!')) 24 } else { 25 callback() 26 } 27 } 28 export default { 29 common: { 30 // ---------------------公共驗證方法 31 phone: [{// 手機號 32 required: true, 33 message: '手機號不能為空' 34 }, { 35 validator: validatePhone, 36 trigger: 'blur' 37 }], 38 email: [{// 郵箱 39 required: true, 40 message: '郵箱不能為空' 41 }, 42 { 43 validator: validateEmail, 44 trigger: 'blur' 45 } 46 ], 47 idCardNo: [{// 身份證號碼 48 required: true, 49 message: '身份證號碼不能為空' 50 }, 51 { 52 validator: validateIdCardNo, 53 trigger: 'blur' 54 } 55 ] 56 }, 57 handle: { 58 // ---------------------處理表單的驗證方法 59 operResult: [{//處理結果 60 required: true, 61 message: '請選擇處理結果' 62 }], 63 opinion: [{//處理結果描述 64 required: true, 65 message: '請填寫處理結果描述' 66 }] 67 },
68 }
export default內可以分類封裝驗證,封裝不同表單的驗證方法
2.全局掛在 main.js
1 import rules from './utils/formCheck.js' 2 3 // 全局方法掛載 4 Vue.prototype.$rules = rules
3.使用
表單標簽加 :rules="$rules.handle"
1 <el-form 2 ref="form" 3 :model="form" 4 label-width="150px" 5 :rules="$rules.handle" 6 style="padding:0 50px 0 20px;" 7 > 8 <div class="wrap"> 9 <el-form-item label="處理結果" prop="operResult"> 10 <el-select 11 v-model="form.operResult" 12 placeholder="請選擇處理結果" 13 clearable 14 size="small" 15 style="width:50%" 16 > 17 <el-option 18 v-for="item in handle_result" 19 :key="item.dictValue" 20 :label="item.dictLabel" 21 :value="item.dictValue" 22 ></el-option> 23 </el-select> 24 </el-form-item> 25 <el-form-item label="處理結果描述" prop="opinion"> 26 <el-input type="textarea" v-model="form.opinion" maxlength="320" show-word-limit></el-input> 27 </el-form-item> 28 </div> 29 </el-form>
單獨使用 :rules="$rules.handle.opinion"
1 <el-form-item label="處理結果描述" prop="opinion" :rules="$rules.handle.opinion"> 2 <el-input type="textarea" v-model="form.opinion" maxlength="320" show-word-limit></el-input> 3 </el-form-item>
