更新go结构和uniapp
This commit is contained in:
+78
-10
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user