自定义校验封装
<ReserveFrom
ref="ReserveFromRef"
@change="toChangeInput"
:reserveData="reserveData"
/>
//---------------
ReserveFrom.vue
<template>
//----------------validate.ts
/**
- 表单校验
- 非空、自定义校验、正则校验
*/
interface ListType {
[key: string]: any // string | boolean | RegExp | Function,
}
export interface RulesType {
[key: string]: ListType[]
}
/**
- From
{
linkMan: "请输入游客姓名"
linkPhone: "请输入手机号码"
}
*/
interface From {
[key: string]: string
}
export default (rules = {} as RulesType, data: any) => {
return new Promise((resolve, reject) => {
const from = {} as From
function validateFn (params: any) {
for (const key in rules) {
if (Object.hasOwnProperty.call(rules, key)) {
const rule = rules[key] || []
const value = params[key]
console.log('value ---- ', params)
for (let index = 0; index < rule.length; index++) {
const element = rule[index]
// 非空校验
if (element.required) {
// debugger
if (!value) {
from[key] = element.message
break
}
}
// 自定义校验
if (element.validate) {
let flag = true
element.validate(rule, value, data, (res: Error) => {
if (res) {
from[key] = res.message
flag = false
} else {
flag = true
}
})
if (!flag) break
}
// 正则校验
if (element.reg) {
if (!element.reg.test(value)) {
from[key] = element.message
break
}
}
}
}
}
}
if (data instanceof Array) {
data.forEach(item => {
validateFn(item)
})
} else {
validateFn(data)
}
if (Object.keys(from).length > 0) {
reject(from)
} else {
resolve(true)
}
})
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南