Procházet zdrojové kódy

feat(mobile-h5): add mock auth helpers for login page

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu před 2 měsíci
rodič
revize
fd51a0bee4

+ 59 - 0
mobile-h5/utils/auth-mock.js

@@ -0,0 +1,59 @@
+import { validateCredentials } from './validate-credentials.js'
+
+export { validateCredentials }
+
+const TOKEN_KEY = 'zkxw_mobile_token'
+const USER_KEY = 'zkxw_mobile_user'
+
+export function getToken() {
+  try {
+    return uni.getStorageSync(TOKEN_KEY) || ''
+  } catch (e) {
+    return ''
+  }
+}
+
+export function isLoggedIn() {
+  return !!getToken()
+}
+
+export function getUser() {
+  try {
+    const raw = uni.getStorageSync(USER_KEY)
+    return raw ? JSON.parse(raw) : null
+  } catch (e) {
+    return null
+  }
+}
+
+export function clearSession() {
+  try {
+    uni.removeStorageSync(TOKEN_KEY)
+    uni.removeStorageSync(USER_KEY)
+  } catch (e) {
+    /* ignore */
+  }
+}
+
+export function mockPasswordLogin({ username, password }) {
+  const v = validateCredentials(username, password)
+  if (!v.ok) {
+    const err = new Error(v.message)
+    err.code = v.code
+    throw err
+  }
+  const u = (username || '').trim()
+  const token = 'mock_' + Date.now()
+  const user = { username: u, displayName: u }
+  uni.setStorageSync(TOKEN_KEY, token)
+  uni.setStorageSync(USER_KEY, JSON.stringify(user))
+  return { token, user }
+}
+
+export function mockWechatLogin() {
+  const token = 'mock_wx_' + Date.now()
+  const user = { username: 'wx_user', displayName: '微信用户' }
+  uni.setStorageSync(TOKEN_KEY, token)
+  uni.setStorageSync(USER_KEY, JSON.stringify(user))
+  return { token, user }
+}

+ 7 - 0
mobile-h5/utils/validate-credentials.js

@@ -0,0 +1,7 @@
+export function validateCredentials(username, password) {
+  const u = (username || '').trim()
+  const p = password || ''
+  if (!u) return { ok: false, code: 'EMPTY_USERNAME', message: '请输入用户名 / 工号' }
+  if (!p) return { ok: false, code: 'EMPTY_PASSWORD', message: '请输入密码' }
+  return { ok: true }
+}

+ 8 - 0
mobile-h5/utils/validate-credentials.test.mjs

@@ -0,0 +1,8 @@
+import assert from 'node:assert/strict'
+import { validateCredentials } from './validate-credentials.js'
+
+assert.equal(validateCredentials('', 'x').code, 'EMPTY_USERNAME')
+assert.equal(validateCredentials('  ', 'x').code, 'EMPTY_USERNAME')
+assert.equal(validateCredentials('admin', '').code, 'EMPTY_PASSWORD')
+assert.equal(validateCredentials('admin', '111111').ok, true)
+console.log('validate-credentials: all passed')