更新模板

This commit is contained in:
2026-01-21 01:37:34 +08:00
parent b7be8c51bf
commit c5c73828bd
83 changed files with 8687 additions and 1235 deletions

77
utils/auth.ts Normal file
View File

@@ -0,0 +1,77 @@
import { ref } from "vue";
import { router, storage, user } from "@/cool";
/**
* 核心认证工具类
* 严格遵循微信官方登录规范,并保持与 cool 框架同步
*/
export const auth = {
/**
* 登录状态 (响应式)
*/
isLogin: ref(!!uni.getStorageSync("token")),
/**
* 获取本地 Token
*/
getToken(): string {
const token = uni.getStorageSync("token") || "";
this.isLogin.value = !!token;
return token;
},
/**
* 设置登录态 (核心修复:必须同步设置 deadtime 否则会被框架误判为过期)
*/
setToken(token: string, userInfo: any) {
// 1. 设置 Token (30天过期)
storage.set("token", token, 3600 * 24 * 30);
// 2. 设置用户信息
storage.set("userInfo", userInfo, 0);
// 3. 同步内存中的 user store (核心修复:框架内部请求使用的是这个 store)
user.token = token;
user.set(userInfo);
// 4. 更新响应式状态
this.isLogin.value = true;
},
/**
* 校验登录态
*/
checkLogin(): boolean {
return !!this.getToken();
},
/**
* 退出登录
*/
logout() {
storage.remove("token");
storage.remove("userInfo");
user.logout();
},
/**
* 强制获取登录码 (wx.login)
*/
getCode(): Promise<string> {
return new Promise((resolve, reject) => {
uni.login({
provider: "weixin",
success: (res) => {
if (res.code) {
resolve(res.code);
} else {
reject(new Error("获取微信登录码失败"));
}
},
fail: (err) => {
reject(new Error(err.errMsg || "调用微信登录接口失败"));
}
});
});
}
};

52
utils/request.ts Normal file
View File

@@ -0,0 +1,52 @@
import { config } from "@/config";
import { auth } from "./auth";
/**
* 标准化请求工具
* 自动携带 Token并处理 401/1001 鉴权失效逻辑
*/
export function request(options: {
url: string;
method?: "GET" | "POST" | "PUT" | "DELETE";
data?: any;
header?: any;
}): Promise<any> {
let { url, method = "GET", data = {}, header = {} } = options;
// 拼接全路径
if (!url.startsWith("http")) {
url = config.baseUrl + url;
}
return new Promise((resolve, reject) => {
uni.request({
url,
method,
data,
header: {
Authorization: auth.getToken(),
...header
},
success: (res) => {
const resData = res.data as any;
// 业务成功 (code: 1000 为成功)
if (resData && resData.code === 1000) {
resolve(resData.data);
}
// 业务码 1001 或 HTTP 401 统一视为登录失效
else if (res.statusCode === 401 || (resData && resData.code === 1001)) {
// 仅清除状态,理由由调用方决定是否跳转
auth.logout();
reject(new Error("登录失效,请登录后重试"));
}
else {
reject(new Error(resData?.message || "服务器响应异常"));
}
},
fail: (err) => {
reject(new Error(err.errMsg || "网络请求失败"));
}
});
});
}