fix(approval): /approval 点击不可达——modId 全量对齐 GetUserMod + 页面按 bsch 应用页规范重构

根因:/approval 与 /list/detail 的 meta.modId 同为 23,menuRoute.ts 的 ROUTE_BY_MODID 按注册
顺序取首条,23 恒解析为「通知详情」;菜单下发的 path 一旦未精确命中,兜底即串页 → 表现为点不到。

- routes.ts:modId 全量对齐 /base/GetUserMod(已收到 1000 / 已发送 2000 / 全部通知 3000 /
  通知统计 4000 / 应用设置 5000 / 待审核 2100);深层页按「父×10+序」重排
  (/list/new=20001、/list/detail=20002、/noticelist/detail=30001,parentId 同步);
  /approval 去掉 parentId,按一级模块处理;文件头契约注释重写
- NoticeApproval.vue:tabs-wrapper/tabs-panel[type=card] + main-container(v-show 保活);
  link-table table-bottom-box + useTableHeight;page-panel + customPageCount 记忆;
  操作列 operatingTextHandle(通过 / 驳回 text-error,fixed:right);
  状态列改用行级 cellClassName(status-color-N,本仓 view-ui-plus 为行级对象语义);
  驳回弹窗改 Form + 必填红星,校验失败统一提示「请填写红色星号内容!」
- mock/noticeapi.ts、config/menu.ts:GetUserMod 六条全量对齐并补「待审核」(顺序按平台配置)
This commit is contained in:
chenxing
2026-09-23 15:59:44 +08:00
parent f41719f3c4
commit 31ca694d48
4 changed files with 215 additions and 143 deletions
+16 -14
View File
@@ -9,10 +9,12 @@ import type { RouteRecordRaw } from "vue-router";
* - /list/detail?serid=&type=、/noticelist/detail?serid=&type=
* type: 0=编辑视角(不标读) 1=普通查看(标读)
*
* modId 是菜单 ↔ 路由的稳定契约(对照后端 GetUserMod 现行数据):
* 1=已收到 2=已发送 3=全部通知 4=通知统计 21=应用设置
* 发通知为「已发送」的深层子页(modId 22 不在菜单树,meta.parentId=2 关联高亮),
* 与 UserBase「应用管理>应用类型管理」范式一致。
* modId 是菜单 ↔ 路由的稳定契约(对照后端 /base/GetUserMod 现行数据,即用户中心
* 模块管理里的配置 ID):
* 1000=已收到 2000=已发送 3000=全部通知 2100=待审核 4000=通知统计 5000=应用设置
* 深层子页不在菜单树,编码沿用 UserBase 范式「父模块 ×10 + 序号」并靠 meta.parentId
* 关联高亮:/list/new=20001、/list/detail=20002(父 2000),/noticelist/detail=30001(父 3000)。
* 深层页编码不得与任何平台一级模块 ID 重复。
*/
const routes: RouteRecordRaw[] = [
// 已收通知(收件箱):后端菜单 page 配置为 "/",即应用入口页
@@ -20,14 +22,14 @@ const routes: RouteRecordRaw[] = [
path: "/",
name: "notice_accept",
component: () => import("@/views/notice/NoticeAccept.vue"),
meta: { title: "已收到", modId: 1 },
meta: { title: "已收到", modId: 1000 },
},
// 已发送
{
path: "/list",
name: "notice_list",
component: () => import("@/views/notice/NoticeList.vue"),
meta: { title: "已发送", modId: 2 },
meta: { title: "已发送", modId: 2000 },
},
// 发通知(新建/编辑/转发/模板):已发送的深层子页,不在菜单里,
// layout.vue 按.meta.parentId 推导面包屑「已发送>发通知」并高亮父菜单
@@ -35,14 +37,14 @@ const routes: RouteRecordRaw[] = [
path: "/list/new",
name: "new_notice",
component: () => import("@/views/notice/NewNotice.vue"),
meta: { title: "发通知", modId: 22, parentId: 2 },
meta: { title: "发通知", modId: 20001, parentId: 2000 },
},
// 全部通知(管理端)
{
path: "/noticelist",
name: "notice_manage",
component: () => import("@/views/notice/NoticeList.vue"),
meta: { title: "全部通知", modId: 3 },
meta: { title: "全部通知", modId: 3000 },
},
// 通知详情(同一组件挂两个路由,面包屑/菜单高亮由 meta.parentId 确定父节点:
// 已发送下 /list/detail,全部通知下 /noticelist/detail;type 区分是否标读)
@@ -50,34 +52,34 @@ const routes: RouteRecordRaw[] = [
path: "/list/detail",
name: "notice_list_detail",
component: () => import("@/views/notice/NoticeDetails.vue"),
meta: { title: "通知详情", modId: 23, parentId: 2 },
meta: { title: "通知详情", modId: 20002, parentId: 2000 },
},
{
path: "/noticelist/detail",
name: "notice_manage_detail",
component: () => import("@/views/notice/NoticeDetails.vue"),
meta: { title: "通知详情", modId: 24, parentId: 3 },
meta: { title: "通知详情", modId: 30001, parentId: 3000 },
},
// 通知统计(旧版行为:整页跳转外部统计系统)
{
path: "/stats",
name: "notice_stats",
component: () => import("@/views/notice/NoticeStats.vue"),
meta: { title: "通知统计", modId: 4 },
meta: { title: "通知统计", modId: 4000 },
},
// 应用设置(发文部门 + 自定义组)
{
path: "/setting",
name: "notice_setting",
component: () => import("@/views/notice/NoticeSetting.vue"),
meta: { title: "应用设置", modId: 21 },
meta: { title: "应用设置", modId: 5000 },
},
// 我的待审核(应用内审批;modId 23 深层页不在菜单树,菜单挂载待后端 GetUserMod 配置)
// 待审核(应用内审批;平台模块管理已挂一级菜单,配置 ID = 2100,path = /approval)
{
path: "/approval",
name: "notice_approval",
component: () => import("@/views/notice/NoticeApproval.vue"),
meta: { title: "我的待审核", modId: 23, parentId: 2 },
meta: { title: "我的待审核", modId: 2100 },
},
/* ---- 旧版路径兼容重定向(书签、残留的平台模块配置) ---- */