1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- // 可以转换的validateType
- import {
- emailValidator,
- identityCardValidator,
- mobilePhoneValidator,
- sqlSimpleValidator
- } from '@cip/utils/form-validator'
- const validatorMap = {
- email: emailValidator,
- identityCard: identityCardValidator,
- mobilePhone: mobilePhoneValidator,
- sql: sqlSimpleValidator
- }
- const isInputType = (config) => {
- if (config.triggerType === 'input') { return true }
- if (config.triggerType === 'select') { return false }
- // 兼容老的未设置triggerType的表单数据验证
- return ['input', 'textarea', 'number', 'numberRange', 'table', 'password', undefined].includes(config.type)
- }
- // 获取单字段规则
- export const getRulesByFieldConfig = (config, otherValue, dependOnValues, outDependOnValues) => {
- const rules = []
- if (config.required) { // 必填
- const defaultPreText = isInputType(config) ? '请输入' : '请选择'
- const requiredMessage = config.requiredErrorMessage || `${defaultPreText}${config.label}`
- const requiredRule = { required: true, message: requiredMessage, ...config.requiredRuleConfig }
- if (config.requiredType) {
- requiredRule.type = config.requiredType
- }
- rules.push(requiredRule)
- // 双值验证
- if (config.type === 'dateRange' && config.otherKey) { // 日期范围
- const validator = (rule, value, cb) => {
- if (value) {
- if (otherValue) {
- cb()
- } else {
- cb(new Error(requiredMessage + '-结束时间'))
- }
- } else {
- cb()
- }
- }
- const otherRules = { validator }
- rules.push(otherRules)
- }
- }
- // 提取公共函数
- const pushValidatorFunction = (validator, type) => {
- const message = config.validateValueErrorMessage
- const rule = {
- validator,
- trigger: type || 'blur'
- }
- if (message) {
- rule.message = message
- }
- return rule
- }
- if (config.validateValue && validatorMap[config.validateValue]) { // 内置值类型校验
- const validator = validatorMap[config.validateValue]
- if (validator) {
- rules.push(pushValidatorFunction(validator))
- }
- }
- // 正则校验
- if (config.regexpValidate) {
- try {
- const reg = new RegExp(config.regexpValidate)
- const rule = {
- pattern: reg,
- message: config.regexpValidateErrorMessage || `未能通过${reg.toString()}校验`,
- trigger: 'blur'
- }
- rules.push(rule)
- } catch (e) { console.log(e.message) }
- }
- // 远程校验值是否已经存在
- if (config.validateExistRemote) {
- const validator = async (rule, value, callback) => {
- const { data } = await config.validateExistRemote(value, dependOnValues, outDependOnValues)
- console.log(data)
- if (data) {
- callback(new Error(config.validateExistRemoteErrorMessage || rule.message || '已存在'))
- } else {
- callback()
- }
- }
- rules.push(pushValidatorFunction(validator))
- }
- return rules
- }
|