From a32100e31b93bc378b11ab93617a9c40b081ad70 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期三, 15 四月 2026 16:44:03 +0800
Subject: [PATCH] 移除核验部分+登录注册接口对接

---
 src/utils/ruleGenerator.js |  166 +++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 148 insertions(+), 18 deletions(-)

diff --git a/src/utils/ruleGenerator.js b/src/utils/ruleGenerator.js
index a7a9c7a..7a7aed7 100644
--- a/src/utils/ruleGenerator.js
+++ b/src/utils/ruleGenerator.js
@@ -3,7 +3,7 @@
 export const ruleGenerator = {
   // 蹇呭~瀛楁
   required(message = '姝ゅ瓧娈典负蹇呭~椤�') {
-    return { required: true, message, trigger: 'blur' }
+    return { required: true, message, trigger: ['blur', 'change'] }
   },
   
   // 闀垮害闄愬埗
@@ -35,7 +35,7 @@
           callback(new Error('璇疯緭鍏ユ纭殑鎵嬫満鍙风爜'))
         }
       },
-      trigger: ['blur', 'change']
+      trigger: ['blur']
     }
   },
   //楠岃瘉鐮侀獙璇�
@@ -65,21 +65,7 @@
       trigger: ['blur', 'change']
     }
   },
-
-  // 澶氶�夋楠岃瘉
-  checkbox(message) {
-    return { 
-      validator: (rule, value, callback) => {
-        if (!value) {
-          callback(new Error(message));
-        } else {
-          callback();
-        }
-      }, 
-      trigger: 'change' 
-    }
-  },
-
+  
   // 閭楠岃瘉
   email() {
     return {
@@ -93,5 +79,149 @@
       },
       trigger: 'blur'
     }
-  }
+  },
+
+  // 澶т簬绛変簬0鐨勬鏁存暟楠岃瘉
+  positiveInteger(min = 0) {
+    return {
+      validator: (rule, value, callback) => {
+        if (!value) {
+          callback()
+        } else {
+          // 妫�鏌ユ槸鍚︿负姝f暣鏁颁笖澶т簬绛変簬min
+          const num = Number(value)
+          const isPositiveInteger = Number.isInteger(num) && num >= min && num >= 0
+          if (isPositiveInteger) {
+            callback()
+          } else {
+            callback(new Error(min === 0 ? '璇疯緭鍏ュぇ浜庣瓑浜�0鐨勬鏁存暟' : `璇疯緭鍏ュぇ浜庣瓑浜�${min}鐨勬鏁存暟`))
+          }
+        }
+      },
+      trigger: ['blur', 'change']
+    }
+  },
+
+  // 韬唤璇佸彿楠岃瘉
+  idCard() {
+    return {
+      validator: (rule, value, callback) => {
+        if (!value) {
+          callback()
+          return
+        }
+
+        // 18浣嶈韩浠借瘉姝e垯琛ㄨ揪寮�
+        const reg18 = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/
+        // 15浣嶈韩浠借瘉姝e垯琛ㄨ揪寮忥紙鑰佸紡锛�
+        const reg15 = /^[1-9]\d{5}\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$/
+
+        if (reg18.test(value)) {
+          // 18浣嶈韩浠借瘉鏍¢獙鐮侀獙璇�
+          const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
+          const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
+          let sum = 0
+          for (let i = 0; i < 17; i++) {
+            sum += parseInt(value[i]) * weights[i]
+          }
+          const checkCode = checkCodes[sum % 11]
+          if (checkCode.toUpperCase() === value[17].toUpperCase()) {
+            callback()
+          } else {
+            callback(new Error('璇疯緭鍏ユ纭殑韬唤璇佸彿鐮�'))
+          }
+        } else if (reg15.test(value)) {
+          // 15浣嶈韩浠借瘉鏍¢獙閫氳繃
+          callback()
+        } else {
+          callback(new Error('璇疯緭鍏ユ纭殑韬唤璇佸彿鐮�'))
+        }
+      },
+      trigger: ['blur', 'change']
+    }
+  },
+
+  // 缁熶竴绀句細淇$敤浠g爜楠岃瘉
+  creditCode() {
+    return {
+      validator: (rule, value, callback) => {
+        if (!value) {
+          callback()
+          return
+        }
+
+        // 缁熶竴绀句細淇$敤浠g爜鐢�18浣嶅瓧绗︾粍鎴愶細1浣嶇櫥璁扮鐞嗛儴闂ㄤ唬鐮� + 1浣嶆満鏋勭被鍒唬鐮� + 6浣嶇櫥璁扮鐞嗘満鍏宠鏀垮尯鍒掔爜 + 9浣嶄富浣撹瘑鍒爜锛堢粍缁囨満鏋勪唬鐮侊級 + 1浣嶆牎楠岀爜
+        const reg = /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/
+
+        if (!reg.test(value)) {
+          callback(new Error('璇疯緭鍏ユ纭殑缁熶竴绀句細淇$敤浠g爜'))
+          return
+        }
+
+        // 鏍¢獙鐮佽绠�
+        const weights = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28]
+        const checkCodes = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'T', 'U', 'W', 'X', 'Y']
+
+        let sum = 0
+        for (let i = 0; i < 17; i++) {
+          const char = value[i]
+          // 灏嗗瓧绗﹁浆鎹负瀵瑰簲鐨勬暟鍊�
+          const num = char >= '0' && char <= '9' ? parseInt(char) : char.charCodeAt(0) - 55
+          sum += num * weights[i]
+        }
+
+        const mod = 31
+        const remainder = sum % mod
+        const checkCode = checkCodes[(mod - remainder) % mod]
+
+        if (checkCode === value[17].toUpperCase()) {
+          callback()
+        } else {
+          callback(new Error('璇疯緭鍏ユ纭殑缁熶竴绀句細淇$敤浠g爜'))
+        }
+      },
+      trigger: ['blur', 'change']
+    }
+  },
+
+  // 閲戦楠岃瘉锛堜繚鐣�2浣嶅皬鏁帮級
+  money(min = 0) {
+    return {
+      validator: (rule, value, callback) => {
+        if (!value) {
+          callback()
+          return
+        }
+
+        // 閲戦姝e垯锛氭暣鏁伴儴鍒嗕笉闄愪綅鏁帮紝灏忔暟閮ㄥ垎鏈�澶�2浣�
+        const reg = /^(0|[1-9]\d*)(\.\d{1,2})?$/
+
+        if (!reg.test(value)) {
+          callback(new Error('璇疯緭鍏ユ纭殑閲戦'))
+          return
+        }
+
+        const num = parseFloat(value)
+        if (num < min) {
+          callback(new Error(`閲戦涓嶈兘灏忎簬${min}`))
+        } else {
+          callback()
+        }
+      },
+      trigger: ['blur', 'change']
+    }
+  },
+    // 澶氶�夋楠岃瘉
+  checkbox(message) {
+    return { 
+      validator: (rule, value, callback) => {
+        if (!value) {
+          callback(new Error(message));
+        } else {
+          callback();
+        }
+      }, 
+      trigger: 'change' 
+    }
+  },
 }
\ No newline at end of file

--
Gitblit v1.8.0