覆盖四个前端应用: - web-admin:App.vue、mockApi.js、router.js 等基础设施 + 19 个页面/组件 - web-sales:App.vue、mockApi.js、store.js 等基础设施 + 11 个页面/组件 - mini-driver:小程序框架 + 5 个页面 - mini-manager:小程序框架 + 8 个页面 注释内容: - 每个文件模块级职责说明 - 每个函数 JSDoc 注释(作用、参数、返回值) - 路由配置逐项标注用途和权限 - Vue 模板复杂逻辑行内注释 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
117 lines
3.6 KiB
JavaScript
117 lines
3.6 KiB
JavaScript
/**
|
||
* mini-manager 微信小程序应用入口
|
||
* 职责:初始化管理层小程序全局状态、网络请求封装、登录校验和订单状态映射。
|
||
* 提供全局 Token 管理、请求拦截(401 自动跳转登录)和状态栏高度适配。
|
||
*/
|
||
const { apiBaseUrl } = require("./config");
|
||
|
||
App({
|
||
/** 全局共享数据 */
|
||
globalData: {
|
||
appName: "mini-manager",
|
||
apiBaseUrl,
|
||
authToken: "",
|
||
managerUser: null,
|
||
statusBarHeight: 0,
|
||
navBarHeight: 0,
|
||
},
|
||
|
||
/**
|
||
* 小程序启动时执行的初始化逻辑
|
||
* 获取系统信息适配状态栏高度,从本地缓存恢复登录 Token 和用户信息
|
||
*/
|
||
onLaunch() {
|
||
const sysInfo = wx.getSystemInfoSync();
|
||
this.globalData.statusBarHeight = sysInfo.statusBarHeight || 20;
|
||
this.globalData.navBarHeight = 44;
|
||
|
||
const token = wx.getStorageSync("manager_token");
|
||
const user = wx.getStorageSync("manager_user");
|
||
if (token) {
|
||
this.globalData.authToken = token;
|
||
}
|
||
if (user) {
|
||
this.globalData.managerUser = user;
|
||
}
|
||
},
|
||
|
||
/**
|
||
* 封装的网络请求方法,自动拼接基础 URL 和 Authorization 头
|
||
* @param {Object} options - 请求配置对象
|
||
* @param {string} options.url - 请求路径(不含基础 URL)
|
||
* @param {string} [options.method] - HTTP 方法(GET/POST 等)
|
||
* @param {Object} [options.data] - 请求体数据
|
||
* @param {Object} [options.header] - 额外请求头
|
||
* @returns {Promise<Object>} 解析后的响应数据
|
||
*/
|
||
request(options) {
|
||
const token = this.globalData.authToken;
|
||
return new Promise((resolve, reject) => {
|
||
wx.request({
|
||
...options,
|
||
url: `${this.globalData.apiBaseUrl}${options.url}`,
|
||
header: {
|
||
"Content-Type": "application/json",
|
||
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
||
...(options.header || {}),
|
||
},
|
||
success: (response) => {
|
||
const result = response.data || {};
|
||
if (response.statusCode === 401) {
|
||
// Token 过期或无效,清除登录状态并跳转到登录页
|
||
this.globalData.authToken = "";
|
||
this.globalData.managerUser = null;
|
||
wx.removeStorageSync("manager_token");
|
||
wx.removeStorageSync("manager_user");
|
||
wx.redirectTo({ url: "/pages/login" });
|
||
reject(new Error("登录已过期,请重新登录"));
|
||
return;
|
||
}
|
||
if (response.statusCode >= 400 || result.code !== 0) {
|
||
reject(new Error(result.message || `请求失败:${response.statusCode}`));
|
||
return;
|
||
}
|
||
resolve(result.data);
|
||
},
|
||
fail: (err) => {
|
||
reject(new Error("网络请求失败,请检查网络"));
|
||
},
|
||
});
|
||
});
|
||
},
|
||
|
||
/**
|
||
* 检查当前是否已登录,未登录则跳转到登录页
|
||
* @returns {boolean} 是否已登录
|
||
*/
|
||
checkLogin() {
|
||
if (!this.globalData.authToken) {
|
||
wx.redirectTo({ url: "/pages/login" });
|
||
return false;
|
||
}
|
||
return true;
|
||
},
|
||
|
||
/**
|
||
* 将订单状态码映射为中文显示文本
|
||
* @param {string} status - 订单状态码
|
||
* @returns {string} 对应的中文状态名称
|
||
*/
|
||
mapOrderStatus(status) {
|
||
const statusMap = {
|
||
pending_approve: "待审批",
|
||
cancel_pending: "待取消审批",
|
||
cancel_fulfillment_pending: "履约取消审批中",
|
||
approved: "已审批",
|
||
rejected: "已驳回",
|
||
pending_factory: "待发厂",
|
||
pending_driver: "待司机接单",
|
||
accepted: "已接单",
|
||
picked_up: "已揽货",
|
||
delivered: "已送达",
|
||
canceled: "已取消",
|
||
};
|
||
return statusMap[status] || status || "-";
|
||
}
|
||
});
|