| | |
| | | import { EditorType } from '@/constants'; |
| | | import _ from 'lodash'; |
| | | import { FormItemRuleWithoutValidator } from '@nutui/nutui-taro/dist/types/__VUE/formitem/types'; |
| | | |
| | | export class FormValidator { |
| | | /** |
| | | * 验证表单input-number 不为0 |
| | | */ |
| | | static validatorNumberNotNull(value: any, ruleCfg: FormItemRuleWithoutValidator) { |
| | | console.log('value: ', value, typeof value); |
| | | static validatorNumberNotNull(rule: any, value: any, callback: any) { |
| | | // eslint-disable-next-line eqeqeq |
| | | if (!value) { |
| | | return Promise.reject(ruleCfg.message); |
| | | return callback(new Error(rule.message)); |
| | | } |
| | | return Promise.resolve(true); |
| | | callback(); |
| | | } |
| | | |
| | | // static validatorRichEditor(value: any, ruleCfg: FormItemRuleWithoutValidator) { |
| | | // // eslint-disable-next-line eqeqeq |
| | | // const textEditorItem = value.filter((x) => x.type === EditorType.Text); |
| | | // if (textEditorItem.some((x) => !x.content)) { |
| | | // return Promise.reject(ruleCfg.message); |
| | | // } |
| | | // return Promise.resolve(true); |
| | | // } |
| | | static validatorWeMap(value: any, ruleCfg: FormItemRuleWithoutValidator) { |
| | | static validatorRichEditor(rule: any, value: API.IntroInfo[], callback: any) { |
| | | // eslint-disable-next-line eqeqeq |
| | | const textEditorItem = value.filter((x) => x.type === EditorType.Text); |
| | | if (textEditorItem.some((x) => !x.content)) { |
| | | return callback(new Error(rule.message)); |
| | | } |
| | | callback(); |
| | | } |
| | | static validatorWeMap(rule: any, value: WeMapModel, callback: any) { |
| | | // eslint-disable-next-line eqeqeq |
| | | if (_.isEmpty(value) || Object.values(value).some((x) => !x)) { |
| | | return Promise.reject(ruleCfg.message); |
| | | return callback(new Error(rule.message)); |
| | | } |
| | | return Promise.resolve(true); |
| | | } |
| | | static validatorArray(value: any, ruleCfg: FormItemRuleWithoutValidator) { |
| | | if (!_.isArray(value) || !value?.length) { |
| | | return Promise.reject(ruleCfg.message); |
| | | } |
| | | return Promise.resolve(true); |
| | | } |
| | | |
| | | static validatorPriceVersion( |
| | | value: API.PriceVersionInfoItem[], |
| | | ruleCfg: FormItemRuleWithoutValidator |
| | | ) { |
| | | if (value.some((x) => !x.chargeWay || !x.name || !x.price)) { |
| | | return Promise.reject(ruleCfg.message); |
| | | } |
| | | return Promise.resolve(true); |
| | | } |
| | | |
| | | static validatorUrl(value: string, ruleCfg: FormItemRuleWithoutValidator) { |
| | | if (BoleRegExp.RegUrl.test(value)) { |
| | | return Promise.resolve(true); |
| | | } |
| | | return Promise.reject(ruleCfg.message); |
| | | } |
| | | static validatorUrlWithRarameter(value: string, ruleCfg: FormItemRuleWithoutValidator) { |
| | | if (BoleRegExp.RegUrlWithParameter.test(value)) { |
| | | return Promise.resolve(true); |
| | | } |
| | | return Promise.reject(ruleCfg.message); |
| | | } |
| | | static validatorSocietyCreditCode(value: string, ruleCfg: FormItemRuleWithoutValidator) { |
| | | if (!ruleCfg.required && !value) return Promise.resolve(true); |
| | | if (/^[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g.test(value)) { |
| | | return Promise.resolve(true); |
| | | } |
| | | return Promise.reject(ruleCfg.message); |
| | | } |
| | | static validatorPhoneNumber(value: string, ruleCfg: FormItemRuleWithoutValidator) { |
| | | if (BoleRegExp.RegPhoneNumber.test(value)) { |
| | | return Promise.resolve(true); |
| | | } |
| | | return Promise.reject(ruleCfg.message); |
| | | } |
| | | static validatorTelNumber(value: string, ruleCfg: FormItemRuleWithoutValidator) { |
| | | if (BoleRegExp.RegTelNumber.test(value)) { |
| | | return Promise.resolve(true); |
| | | } |
| | | return Promise.reject(ruleCfg.message); |
| | | } |
| | | static validatorIDCard(value: string, ruleCfg: FormItemRuleWithoutValidator) { |
| | | if (BoleRegExp.RegIDCard.test(value)) { |
| | | return Promise.resolve(true); |
| | | } |
| | | return Promise.reject(ruleCfg.message); |
| | | } |
| | | static validatorNumber(value: string, ruleCfg: FormItemRuleWithoutValidator) { |
| | | if (BoleRegExp.RegNumber.test(value)) { |
| | | return Promise.resolve(true); |
| | | } |
| | | return Promise.reject(ruleCfg.message); |
| | | } |
| | | |
| | | static validatorEmail(value: string, ruleCfg: FormItemRuleWithoutValidator) { |
| | | if (!ruleCfg.required && !value) return Promise.resolve(true); |
| | | if (BoleRegExp.RegEmail.test(value)) { |
| | | return Promise.resolve(true); |
| | | } |
| | | return Promise.reject(ruleCfg.message); |
| | | callback(); |
| | | } |
| | | } |
| | | |
| | | export class BoleRegExp { |
| | | static RegIDCard = |
| | | /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; |
| | | export async function validateFormList(refs: any) { |
| | | try { |
| | | const validateList = Object.values(refs).map((x) => { |
| | | const ref = x as any; |
| | | if (Array.isArray(ref)) { |
| | | return ref[0].validate(); |
| | | } |
| | | return ref.validate(); |
| | | }); |
| | | |
| | | // static RegEmail = |
| | | // /^(([^<>()\\[\]\\.,;:\s@"]+(\.[^<>()\\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/; |
| | | static RegEmail = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; |
| | | |
| | | /**只有手机 */ |
| | | static RegPhoneNumber = /^1[3-9]\d{9}$/; |
| | | |
| | | /**座机 + 手机*/ |
| | | static RegTelNumber = |
| | | /(^(0[0-9]{2,3})?[-\s]?([2-9][0-9]{6,7})+([0-9]{1,4})?$)|(^((\(\d{3}\))|(\d{3}[-\s]))?(1[3-9]\d{9})$)|(^(400)[-\s](\d{3})[-\s](\d{4})(.)(\d{1,4})$)|(^(400)(\d{3})(\d{4}$))/; |
| | | |
| | | /**只有座机 */ |
| | | static RegOnlyTelNumber = |
| | | /(^(0[0-9]{2,3})?[-\s]?([2-9][0-9]{6,7})+([0-9]{1,4})?$)|(^(400)[-\s](\d{3})[-\s](\d{4})(.)(\d{1,4})$)|(^(400)(\d{3})(\d{4}$))/; |
| | | |
| | | static RegSocietyCreditCode = /^[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g; |
| | | |
| | | static RegNumber = /^\d+$/; |
| | | |
| | | static RegFileName = /(.*\/)*([^.]+).*/gi; |
| | | |
| | | static RegCanPreview = /png|jpg|jpeg|doc|docx|txt|ppsx|xlsx|xls|pdf/gi; |
| | | |
| | | static RegDecimalNumber = /^\d+(\.\d{0,2}){0,1}$/; |
| | | |
| | | static RegBankCard = /^\d{16,30}$/; |
| | | |
| | | static RegUrl = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})(\/\w+)*\/?$/; |
| | | |
| | | static RegUrlWithParameter = |
| | | /^((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\\.,@?^=%&:/~\\+#]*[\w\-\\@?^=%&/~\\+#])?$/; |
| | | |
| | | static RegUrlWithParameterExact = |
| | | /^((http|ftp|https):\/\/)[\w\-_]+(\.[\w\-_]+)+([\w\-\\.,@?^=%&:/~\\+#]*[\w\-\\@?^=%&/~\\+#])?$/; |
| | | let res = await Promise.allSettled(validateList); |
| | | return res.every((x) => x.status === 'fulfilled'); |
| | | } catch (error) {} |
| | | } |