这篇文章主要介绍了一套完整的通过权限控制参数的显示隐藏和校验方法。尤其适合多个相差不大的可复用模块的参数显示隐藏控制和参数提交校验。
1. 参数按权限显示动态校验规则
1.1 所有规则数组
1 2 3 4 5 6 7 8
| allRules: [ {name: 'pdNm', required: true, reg: /^[A-Z]{4}$/, msg: '只能输入4个大写字母'}, {name: 'tel', reg: /^1[34578]\d{9}$/, msg: '手机号码不正确'}, {name: 'pdId', required: true, reg: null, msg: '产品id不能为空'}, {name: 'buyId', required: true, reg: null, msg: '买方id不能为空'}, {name: 'sellerId', required: true, reg: null, msg: '卖方id不能为空'} ]
|
1.2 权限对象
1 2 3 4 5 6 7 8
| showRules: { pdNm: [0, 1], tel: [1, 2], pdId: [0, 1, 2], buyId: [0, 2], sellerId: [0, 2], }
|
1.3 核心方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| let pamSet = new Set()
let curRules = getCurPamRules(allRules)
function setShowPams(obj, typeIdx){ pamSet.clear(); for(let k in obj){ if(obj.hasOwnProperty(k)){ if(obj[k].includes(typeIdx)){ pamSet.add(k) } } } }
function getCurPamRules(allRules){ let arr = [] allRules.forEach(item => { if(pamSet.has(item].name)){ arr.push(item) } }) return arr }
function isShowCurPam(s){ return pamSet.has(s) }
function validPamCbMsg(obj, rules){ let msg = null if(!rules.length || rules.length === 0) reutrn null for(let i = 0; i < rules.length; i++){ let item = rules[i] if(item.reg !== null){ if(item.required){ if(isEmpty(obj[item.name]) || !(item.reg.test(obj[item.name]))){ msg = item.msg break } }else{ if(!isEmpty(obj[item.name]) && !(item.reg.test(obj[item.name]))){ msg = item.msg break } } }else{ if(isEmpty(obj[item.name])){ msg = item.msg break } } } return msg }
|
1.4 使用
在HTML中
1 2 3 4 5 6 7 8 9 10 11
| <Col span="12" v-if="isShowCurPam('pdNm')"> <FormItem label="产品名称" > <Input v-model="param.pdNm" clearable placeholder="支持模糊查询" class="search-input" /> </FormItem> </Col> <Col span="12" v-if="isShowCurPam('tel')"> <FormItem label="手机号码" > <Input v-model="param.tel" clearable placeholder="支持模糊查询" class="search-input" /> </FormItem> </Col> ...
|
提交数据时
1 2 3 4 5 6
| function submitFn(){ let msg = null mag = validPamCbMsg(this.param, this.curRules) if(msg) return msg ... }
|
2 总结
- 该方法和validator的Form表单校验比较,代码量较多,优点能根据每个参数进行提示,能兼容不同浏览器,该方法使用原因是为了解决 validator在ie11下校验参数时输入框不能正常显示而来的。