From 782effa256dfd2e94d6037914fcea489131ffd00 Mon Sep 17 00:00:00 2001 From: halo Date: Thu, 9 Jul 2026 21:33:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9Edayjs=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E4=B8=8E=E8=AF=81=E4=BB=B6=E5=8F=B7/=E8=90=A5?= =?UTF-8?q?=E4=B8=9A=E6=89=A7=E7=85=A7=E5=8F=B7=E6=A0=A1=E9=AA=8C=E8=A7=84?= =?UTF-8?q?=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 1 + package.json | 3 ++- src/utils/validators.js | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index a6d7499..1258246 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@ant-design/icons-vue": "^7.0.0", "ant-design-vue": "^4.2.0", "axios": "^1.7.0", + "dayjs": "^1.11.10", "pinia": "^2.1.7", "vue": "^3.4.0", "vue-router": "^4.3.0" diff --git a/package.json b/package.json index e542eed..08c6a5a 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "pinia": "^2.1.7", "axios": "^1.7.0", "ant-design-vue": "^4.2.0", - "@ant-design/icons-vue": "^7.0.0" + "@ant-design/icons-vue": "^7.0.0", + "dayjs": "^1.11.10" }, "devDependencies": { "@vitejs/plugin-vue": "^5.0.0", diff --git a/src/utils/validators.js b/src/utils/validators.js index 6e1b6cf..126b09e 100644 --- a/src/utils/validators.js +++ b/src/utils/validators.js @@ -31,3 +31,38 @@ export function passwordStrengthValidatorRule() { } } } + +// 18位身份证号,末位允许 X/x,不做校验码算术级校验(与手机号正则的"够用不过度设计"风格一致) +const ID_CARD_REGEX = /^\d{17}[\dXx]$/ +// 统一社会信用代码/营业执照号:15-20位数字与大写字母组合,覆盖新旧两种编码位数 +const BUSINESS_LICENSE_REGEX = /^[0-9A-Z]{15,20}$/ + +export function isValidIdCard(idCard) { + return ID_CARD_REGEX.test(idCard || '') +} + +export function isValidBusinessLicense(license) { + return BUSINESS_LICENSE_REGEX.test(license || '') +} + +export function idCardValidatorRule() { + return { + validator: (_rule, value) => { + if (!value) return Promise.reject(new Error('请输入证件号码')) + if (!isValidIdCard(value)) return Promise.reject(new Error('请输入正确的18位身份证号')) + return Promise.resolve() + } + } +} + +export function businessLicenseValidatorRule() { + return { + validator: (_rule, value) => { + if (!value) return Promise.reject(new Error('请输入营业执照号')) + if (!isValidBusinessLicense(value)) { + return Promise.reject(new Error('请输入正确的营业执照号(15-20位数字/大写字母)')) + } + return Promise.resolve() + } + } +}