import Vue from "vue" const rules= (window as any).globalConfig.rules; const validatePhone = (rule : any, value : any, callback : Function) => { if (!/^1[345789]\d{9}$/.test(value)) { callback('手机号格式不正确'); } else { callback(); } }; const validateEnglishCode= (rule : any, value : any, callback : Function) => { if (!/^[a-zA-Z]+$/.test(value)) { callback('只支持英文字母'); } else { callback(); } }; const validateEngNumCode= (rule : any, value : any, callback : Function) => { if (!/[a-zA-Z]+[0-9]*/.test(value)) { callback('只支持英文字母与数字,且至少得包含一个英文字母'); } else { callback(); } }; const validateMaxLength= (rule : any, value : any, callback : Function) => { if (value&&(value.length>rules.inputMaxLength)) { callback(`长度不得超过${rules.inputMaxLength}`); } else { callback(); } }; const validateMaxTextLength= (rule : any, value : any, callback : Function) => { if (value&&(value.length>rules.textMaxLength)) { callback(`长度不得超过${rules.textMaxLength}`); } else { callback(); } }; const validateCNCode=(rule : any, value : any, callback : Function) => { if (!/^[\u4e00-\u9fa5]+$/.test(value)) { callback('请输入中文'); } else { callback(); } }; const validateIP=(rule : any, value : any, callback : Function) => { if (!/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/.test(value)) { callback('请输入正确的IP'); } else { callback(); } }; const validatePort=(rule : any, value : any, callback : Function) => { if (!/^[0-9]+$/.test(value)) { callback('请输入正确端口'); } else { if(value>65535){ callback('请输入正确端口'); }else{ callback(); } } }; const validateNormalCode=(rule : any, value : any, callback : Function) => { if (!/^[\u4e00-\u9fa5_a-zA-Z0-9]+$/.test(value)) { callback('请不要输入特殊字符'); } else { callback(); } }; const validateObjId=(rule : any, value : any, callback : Function) => { if (!value.id) { callback('该项不能为空'); } else { callback(); } }; const validateFileRequired=(rule : any, value : any, callback : Function) => { if (!value) { callback('该项不能为空'); } else { callback(); } }; const validateUrlOrIP=(rule : any, value : any, callback : Function) => { if (!/^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/.test(value)&& !/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/.test(value)){ callback('请输入合法的域名或IP'); } else { callback(); } }; const validateMap : any ={ required: { required: true, message: "该项不能为空" }, phone:{ validator:validatePhone}, engCode:{ validator:validateEnglishCode}, engNumCode:{ validator:validateEngNumCode}, maxInputLength:{ validator : validateMaxLength}, maxTextLength:{ validator : validateMaxTextLength}, cnCode:{ validator:validateCNCode}, ip:{ validator:validateIP}, port:{ validator:validatePort}, normalCode:{ validator:validateNormalCode}, objId:{ validator:validateObjId}, fileRequired:{required:true,validator:validateFileRequired}, urlOrIp:{validator:validateUrlOrIP} }; Vue.directive('validate', { bind: (el, binding, vnode)=> { let propName : any=binding.arg; let validateRules : any =binding.modifiers; let value : any=binding.value; let arr : Array=[]; let triggerEvent: String="blur"; let validateType : String="string"; Object.keys(validateRules).forEach(item=>{ if(item.startsWith("@")){ triggerEvent=item.slice(1); }else if(item.startsWith("$")){ validateType=item.slice(1); }else{ arr.push(_.cloneDeep(validateMap[item])) } }) arr.forEach(item=>{ item.trigger=triggerEvent; item.type=validateType; }) value[propName]=arr; } }) Vue.directive('tooltip', { bind: (el, binding, vnode)=> { let propName : any=binding.arg; let validateRules : any =binding.modifiers; let value : any=binding.value; jq(el).append(''); console.error(3333,el.querySelector(".ivu-form-item-label"),vnode,propName,validateRules,value) } })