fix(web): 切换账号残留上一账号的标签/菜单;审核按钮不再对已通过的行显示

问题 1(创作者登录后还能看到「工作台」)根因:tagsView.delAllVisitedViews() 会「保留 affix 标签」,
它判断的是 userInfo 是否还在,而 userStore.reset() 是先清标签、后清 userInfo —— 顺序反了,
写死路由表里 affix 的「工作台」标签就跨账号活了下来。整页刷新时不复现,所以只有"退出后不刷新直接登录"
才看得到(PM 复现不到就是这个原因)。修法与加固:

- userStore.reset():先清账号信息再清标签,并调 permissionStore.clearRoutes() 一并清菜单状态
- permissionStore 增加 routersOwner(当前菜单属于哪个账号)+ clearRoutes();守卫发现账号变了会先 resetRouter()
  摘掉上一个账号动态加的路由,再重建(避免两套菜单并存、也避免创作者还能直接进 /dashboard)
- 守卫里"菜单拉取失败沿用上次缓存"这条:换账号后不再沿用(宁可先给空菜单)

问题 2(创作者入驻/审核):真实 UI 全流程(新增→审核→开通→凭据→登录落地)本身能跑通,
但复现出「审核」按钮对**所有状态**都显示 —— 后端状态机是 通过可从 pending/rejected/frozen 发起、
驳回只允许 pending、冻结只允许 approved,对「已通过」的行点审核提交必然 200003 红错。修法:
- 已通过的行不再显示「审核」(保留 冻结/重置密码/开通账号)
- 审核弹窗里的「驳回」只对 pending 显示,其余状态只能通过

顺带修:views/common/DashboardView 取列表时 res 可能为 undefined(拦截器把业务错误吞成 undefined),
账号切换瞬间会抛 Cannot read properties of undefined,已加可选链。
This commit is contained in:
Vicky committed 2026-10-15 16:30:29 +08:00
1 parent 8ce43ccd4c
commit 4509323ba8
6 files changed
+57 -11

No files matched your search

+2
View File
@@ -231,6 +231,8 @@ const getRole = async () => {
permissionStore.getAddRouters.forEach((route) => {
addRoute(route as RouteRecordRaw) // 动态添加可访问路由表
})
// 记住这套菜单属于哪个账号:换账号时守卫据此重建
permissionStore.setRoutersOwner(params.roleName)
permissionStore.setIsAddRouters(true)
push({ path: redirect.value || landingPath() })
}
+3 -2
View File
@@ -33,8 +33,9 @@ onMounted(async () => {
loading.value = true
try {
const res = await pageDramasApi({ pageIndex: 1, pageSize: 200 })
dramas.value = res.data?.list || []
total.value = res.data?.total || 0
// 接口失败时 axios 拦截器会把业务错误吞成 undefined,这里不能让页面跟着崩
dramas.value = res?.data?.list || []
total.value = res?.data?.total || 0
} finally {
loading.value = false
}
+8 -2
View File
@@ -167,7 +167,12 @@ const {
<template #default="{ row }">
<div class="table-actions">
<el-button type="primary" size="small" @click="openDocuments(row)">资质</el-button>
<el-button v-if="canAudit" size="small" @click="openAudit(row, 'APPROVE')"
<!-- 状态机:通过可从 pending/rejected/frozen 发起,驳回只允许 pending,冻结只允许 approved。
已通过的行走「冻结 / 重置密码」,不再给「审核」入口(点了必然被后端拒) -->
<el-button
v-if="canAudit && row.status !== 'approved'"
size="small"
@click="openAudit(row, 'APPROVE')"
>审核</el-button
>
<el-button
@@ -243,7 +248,8 @@ const {
<el-form-item label="审核动作">
<el-radio-group v-model="auditForm.action">
<el-radio value="APPROVE">通过</el-radio>
<el-radio value="REJECT">驳回</el-radio>
<!-- 驳回只对「待审核」开放(与后端 requireState 一致);已驳回/已冻结的行重新审核时只能「通过」 -->
<el-radio v-if="auditTarget?.status === 'pending'" value="REJECT">驳回</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="auditForm.action === 'REJECT'" label="驳回原因码">