微信小程序页面迁移校验之前 P5任务处理之前

This commit is contained in:
Neo
2026-03-09 01:19:21 +08:00
parent 263bf96035
commit 6e20987d2f
1112 changed files with 153824 additions and 219694 deletions

View File

@@ -0,0 +1,182 @@
/**
* 开发调试面板页面
*
* 功能:
* - 展示当前用户上下文(角色、权限、绑定、门店)
* - 一键切换角色(后端真实修改 user_site_roles + 重签 token
* - 一键切换用户状态(后端真实修改 users.status + 重签 token
* - 页面跳转列表(点击跳转到任意已注册页面)
*/
import { request } from "../../utils/request"
// 页面列表分三段:正在迁移、已完成、未完成
const MIGRATING_PAGES = [
{ path: "pages/board-finance/board-finance", name: "财务看板" },
]
const DONE_PAGES = [
{ path: "pages/no-permission/no-permission", name: "无权限" },
{ path: "pages/login/login", name: "登录" },
{ path: "pages/apply/apply", name: "申请" },
{ path: "pages/reviewing/reviewing", name: "审核中" },
{ path: "pages/board-coach/board-coach", name: "助教看板" },
{ path: "pages/board-customer/board-customer", name: "客户看板" },
]
const TODO_PAGES = [
{ path: "pages/task-list/task-list", name: "任务列表" },
{ path: "pages/my-profile/my-profile", name: "个人中心" },
{ path: "pages/task-detail/task-detail", name: "任务详情" },
{ path: "pages/task-detail-callback/task-detail-callback", name: "任务-回访" },
{ path: "pages/task-detail-priority/task-detail-priority", name: "任务-优先级" },
{ path: "pages/task-detail-relationship/task-detail-relationship", name: "任务-关系" },
{ path: "pages/notes/notes", name: "备忘录" },
{ path: "pages/performance/performance", name: "业绩总览" },
{ path: "pages/performance-records/performance-records", name: "业绩明细" },
{ path: "pages/customer-detail/customer-detail", name: "客户详情" },
{ path: "pages/customer-service-records/customer-service-records", name: "客户服务记录" },
{ path: "pages/coach-detail/coach-detail", name: "助教详情" },
{ path: "pages/chat/chat", name: "AI 对话" },
{ path: "pages/chat-history/chat-history", name: "对话历史" },
{ path: "pages/index/index", name: "首页" },
{ path: "pages/mvp/mvp", name: "MVP" },
{ path: "pages/logs/logs", name: "日志" },
]
const ROLE_LIST = [
{ code: "coach", name: "助教" },
{ code: "staff", name: "员工" },
{ code: "site_admin", name: "店铺管理员" },
{ code: "tenant_admin", name: "租户管理员" },
]
const STATUS_LIST = ["new", "pending", "approved", "rejected", "disabled"]
Page({
data: {
ctx: null as any,
loading: true,
pages: [] as typeof TODO_PAGES,
migratingPages: MIGRATING_PAGES,
donePages: DONE_PAGES,
todoPages: TODO_PAGES,
roles: ROLE_LIST,
statuses: STATUS_LIST,
currentRole: "",
rolesText: "-",
permissionsText: "-",
bindingText: "-",
message: "",
messageType: "",
},
onShow() {
this.loadContext()
},
/** 加载当前用户调试上下文 */
async loadContext() {
// 没有 token 时不发请求,避免 401 → 刷新 → 跳转的无限循环
const token = wx.getStorageSync("token")
if (!token) {
this.setData({ loading: false })
this.showMsg("未登录,请先通过 dev-login 获取 token", "error")
return
}
this.setData({ loading: true, message: "" })
try {
const ctx = await request({ url: "/api/xcx/dev-context", method: "GET" })
const rolesText = ctx.roles?.length ? ctx.roles.join(", ") : "-"
const permissionsText = ctx.permissions?.length ? ctx.permissions.join(", ") : "-"
let bindingText = "-"
if (ctx.binding) {
const b = ctx.binding
bindingText = `${b.binding_type} (助教:${b.assistant_id || '-'} 员工:${b.staff_id || '-'})`
}
// 当前角色取第一个(通常只有一个)
const currentRole = ctx.roles?.length ? ctx.roles[0] : ""
this.setData({ ctx, rolesText, permissionsText, bindingText, currentRole, loading: false })
} catch (err: any) {
this.setData({ loading: false })
// 401 说明 token 无效或是受限令牌,不触发重试
const detail = err?.data?.detail || "网络错误"
this.showMsg("获取上下文失败: " + detail, "error")
}
},
/** 切换角色 */
async switchRole(e: any) {
const code = e.currentTarget.dataset.code
if (code === this.data.currentRole) return
wx.showLoading({ title: "切换中..." })
try {
const res = await request({
url: "/api/xcx/dev-switch-role",
method: "POST",
data: { role_code: code },
})
// 保存新 token
this.saveTokens(res)
this.showMsg(`已切换为 ${code}`, "success")
// 重新加载上下文
this.loadContext()
} catch (err: any) {
this.showMsg("切换角色失败: " + (err?.data?.detail || "网络错误"), "error")
} finally {
wx.hideLoading()
}
},
/** 切换用户状态 */
async switchStatus(e: any) {
const status = e.currentTarget.dataset.status
if (status === this.data.ctx?.status) return
wx.showLoading({ title: "切换中..." })
try {
const res = await request({
url: "/api/xcx/dev-switch-status",
method: "POST",
data: { status },
})
// 保存新 token
this.saveTokens(res)
this.showMsg(`状态已切换为 ${status}`, "success")
this.loadContext()
} catch (err: any) {
this.showMsg("切换状态失败: " + (err?.data?.detail || "网络错误"), "error")
} finally {
wx.hideLoading()
}
},
/** 跳转到指定页面 */
goPage(e: any) {
const url = "/" + e.currentTarget.dataset.url
// 使用 reLaunch 确保能跳转到任意页面(包括 tabBar 页面)
wx.reLaunch({ url })
},
/** 保存后端返回的新 token */
saveTokens(res: any) {
if (res.access_token && res.refresh_token) {
const app = getApp<IAppOption>()
app.globalData.token = res.access_token
app.globalData.refreshToken = res.refresh_token
wx.setStorageSync("token", res.access_token)
wx.setStorageSync("refreshToken", res.refresh_token)
if (res.user_id) {
wx.setStorageSync("userId", res.user_id)
}
if (res.user_status) {
wx.setStorageSync("userStatus", res.user_status)
}
}
},
/** 显示操作提示 */
showMsg(msg: string, type: "success" | "error") {
this.setData({ message: msg, messageType: type })
setTimeout(() => this.setData({ message: "" }), 3000)
},
})