更新go结构和uniapp

This commit is contained in:
2026-07-15 22:38:33 +08:00
parent bca5170e22
commit 61a937f7a3
23 changed files with 3536 additions and 293 deletions
+78 -10
View File
@@ -1,8 +1,13 @@
const TOKEN_KEY = 'app_token'
const USER_KEY = 'app_user'
const TENANT_KEY = 'app_tenant_name'
const REMEMBER_KEY = 'app_remember_me'
const REMEMBER_TENANT_KEY = 'app_remember_tenant'
const REMEMBER_ACCOUNT_KEY = 'app_remember_account'
const REMEMBER_PASSWORD_KEY = 'app_remember_password'
export function setToken(token) {
uni.setStorageSync(TOKEN_KEY, token)
uni.setStorageSync(TOKEN_KEY, token || '')
}
export function getToken() {
@@ -10,13 +15,21 @@ export function getToken() {
}
export function setUser(user) {
uni.setStorageSync(USER_KEY, user)
uni.setStorageSync(USER_KEY, user || null)
}
export function getUser() {
return uni.getStorageSync(USER_KEY) || null
}
export function setTenantName(name) {
uni.setStorageSync(TENANT_KEY, name || '')
}
export function getTenantName() {
return uni.getStorageSync(TENANT_KEY) || ''
}
export function isLoggedIn() {
return !!getToken()
}
@@ -26,12 +39,67 @@ export function logout() {
uni.removeStorageSync(USER_KEY)
}
export function loginSuccess(user = {}) {
setToken('demo_token_' + Date.now())
setUser({
nickname: user.nickname || '云泽用户',
avatar: user.avatar || '',
phone: user.phone || '',
...user
})
/** 是否开启记住账号登录信息 */
export function isRememberLogin() {
return uni.getStorageSync(REMEMBER_KEY) === '1'
}
/** 读取记住的账号登录信息 */
export function getRememberLogin() {
if (!isRememberLogin()) {
return { rememberMe: false, tenantName: '', account: '', password: '' }
}
return {
rememberMe: true,
tenantName: uni.getStorageSync(REMEMBER_TENANT_KEY) || '',
account: uni.getStorageSync(REMEMBER_ACCOUNT_KEY) || '',
password: uni.getStorageSync(REMEMBER_PASSWORD_KEY) || ''
}
}
/** 保存账号登录信息(租户、账号、密码) */
export function saveRememberLogin({ tenantName = '', account = '', password = '' } = {}) {
uni.setStorageSync(REMEMBER_KEY, '1')
uni.setStorageSync(REMEMBER_TENANT_KEY, tenantName)
uni.setStorageSync(REMEMBER_ACCOUNT_KEY, account)
uni.setStorageSync(REMEMBER_PASSWORD_KEY, password)
}
/** 清除记住的账号登录信息 */
export function clearRememberLogin() {
uni.removeStorageSync(REMEMBER_KEY)
uni.removeStorageSync(REMEMBER_TENANT_KEY)
uni.removeStorageSync(REMEMBER_ACCOUNT_KEY)
uni.removeStorageSync(REMEMBER_PASSWORD_KEY)
}
/**
* 登录成功写入 token 与用户信息
* @param {{ token?: string, user?: object, nickname?: string, phone?: string, account?: string, name?: string, avatar?: string, id?: number|string }} payload
*/
export function loginSuccess(payload = {}) {
const token = payload.token || payload.access_token || ''
if (token) {
setToken(token)
}
const rawUser = payload.user || payload
const user = {
id: rawUser.id,
account: rawUser.account || '',
name: rawUser.name || '',
nickname: rawUser.nickname || rawUser.name || rawUser.account || '云泽用户',
avatar: rawUser.avatar || '',
phone: rawUser.phone || payload.phone || '',
tid: rawUser.tid,
rid: rawUser.rid,
role_name: rawUser.role_name || '',
...rawUser
}
// 保证 nickname 可用
if (!user.nickname) {
user.nickname = user.name || user.account || '云泽用户'
}
setUser(user)
return user
}
+107
View File
@@ -0,0 +1,107 @@
/**
* 极验 4.0 — 点击登录后弹出 bind 模式验证码,成功后返回校验参数供登录接口使用。
*/
import { getGeetest4Infos } from '@/api/auth.js'
import { GEETEST4_CAPTCHA_ID } from '@/api/config.js'
// #ifdef H5
import '@/static/js/gt4.js'
// #endif
function normalizeValidate(result, fallbackCaptchaId) {
return {
captcha_id: result?.captcha_id || fallbackCaptchaId,
lot_number: result?.lot_number || '',
pass_token: result?.pass_token || '',
gen_time: result?.gen_time || '',
captcha_output: result?.captcha_output || ''
}
}
/** 优先读后端配置,失败时使用本地 captcha_id */
export async function fetchGeetest4CaptchaId() {
try {
const data = await getGeetest4Infos()
if (data?.captcha_id) return data.captcha_id
} catch {
// 后端未配置或未开启时走本地兜底
}
return GEETEST4_CAPTCHA_ID
}
// #ifdef H5
function showGeetest4H5(captchaId) {
return new Promise((resolve, reject) => {
if (typeof window === 'undefined' || !window.initGeetest4) {
reject(new Error('极验 SDK 未加载'))
return
}
window.initGeetest4(
{
captchaId,
product: 'bind',
language: 'zh-CN'
},
(instance) => {
instance.onSuccess(() => {
resolve(normalizeValidate(instance.getValidate(), captchaId))
if (typeof instance.destroy === 'function') {
instance.destroy()
}
})
instance.onFail(() => {
reject(new Error('人机验证未通过'))
})
instance.onError(() => {
reject(new Error('人机验证加载失败'))
})
instance.showCaptcha()
}
)
})
}
// #endif
// #ifdef APP-PLUS
function showGeetest4App(captchaId) {
return new Promise((resolve, reject) => {
uni.navigateTo({
url: `/pages/login/geetest-webview?captchaId=${encodeURIComponent(captchaId)}`,
events: {
geetestSuccess(data) {
resolve(normalizeValidate(data, captchaId))
},
geetestFail(msg) {
reject(new Error(msg || '人机验证未通过'))
}
},
fail(err) {
reject(new Error(err?.errMsg || '无法打开验证页面'))
}
})
})
}
// #endif
/**
* 弹出极验 4.0 验证
* @returns {Promise<{ captcha_id, lot_number, pass_token, gen_time, captcha_output }>}
*/
export async function showGeetest4() {
const captchaId = await fetchGeetest4CaptchaId()
if (!captchaId) {
throw new Error('未配置极验 captcha_id')
}
// #ifdef H5
return showGeetest4H5(captchaId)
// #endif
// #ifdef APP-PLUS
return showGeetest4App(captchaId)
// #endif
// #ifndef H5 || APP-PLUS
throw new Error('当前平台暂不支持极验验证,请使用 H5 或 App')
// #endif
}