|
|
@@ -0,0 +1,309 @@
|
|
|
+# 页面与路由清单
|
|
|
+
|
|
|
+原始分析日期:2026-10-09(Asia/Shanghai)
|
|
|
+状态补充日期:2026-10-14(Asia/Shanghai)
|
|
|
+范围:当前工作区;分支 `rebuild`,HEAD `6c38326443f8b967897590fef6cd3d20de4c02e3`。
|
|
|
+配套说明:[项目分析](project-analysis.md)。
|
|
|
+
|
|
|
+## 2026-10-14 注册入口增量
|
|
|
+
|
|
|
+第 1~8 节保留 2026-10-09 的完整清单快照,原行号、视图规模、90 条路由与验证结果仅适用于当时。当前静态解析得到 **92 条记录 = 13 条 constant + 79 条 async**,新增的两条记录为公共布局与注册子页面,不代表两个独立业务页面;其余页面清单本次未重新生成。
|
|
|
+
|
|
|
+| 路径 / 层级 | 当前组件 | 名称与配置 | 路由来源 |
|
|
|
+|---|---|---|---|
|
|
|
+| `/signup` 父记录 | [src/ui-refactor/index.vue](../../src/ui-refactor/index.vue) | hidden,承载公共页头 / 横幅 / 页脚与 router-view | [src/router/modules/refactor.js](../../src/router/modules/refactor.js) |
|
|
|
+| `/signup` 子记录 | [SignupPage.vue](../../src/ui-refactor/views/signup/SignupPage.vue) | `PublicSignup`,`meta.publicLayout.showHeader: false` | 同上,叶子路由提供 Hero 配置 |
|
|
|
+
|
|
|
+`src/router/index.js` 将该模块加入 `constantRoutes`;匿名白名单保留 `/signup`。登录 Register 和注册 Sign in 透传查询参数。当前布局懒加载为返回 `import()` Promise 的函数,已消除旧 `component: () => newLayout` 写法;本次只核对定义,没有重新执行浏览器导航。
|
|
|
+
|
|
|
+注册页私有组件和业务模块位于 `src/ui-refactor/views/signup/components/`,它们由页面组合,不是独立路由。新页使用游客接口与 Paystack V2,旧 `src/views/user/welcome-pack.vue` 仍保留。当前维护说明见 [公共框架](public-layout-design.md) 和 [注册功能](signup-welcome-pack.md);第 3 节“新 UI 独立目录”的旧描述只表示当时未建立独立登录页,不适用于当前注册实现。
|
|
|
+
|
|
|
+## 1. 清单口径与完整性
|
|
|
+
|
|
|
+- **[已确认]** 用本地 @babel/parser 解析 `src/router/index.js` 和 12 个模块,按 Vue Router 的绝对/相对子路径规则组合路径;检查引用视图实际存在。未执行路由导航。
|
|
|
+- **[已确认]** 90 条静态路由记录 = 11 constant + 79 async。其中 19 条引用 Layout,1 条为通配符;其余 70 条记录引用 65 个不同 Vue 视图文件。
|
|
|
+- **[已确认]** `src/views` 共 114 个 Vue 文件 = 65 个静态路由引用文件 + 32 个无独立路由的入口/私有组件 + 17 个未静态接入的页面/关联子页面。后两类共 49 个,不应全部称为“死页面”。
|
|
|
+- **[已确认]** 多路径复用:Dashboard 2 路径、Profile 3 路径、401/404 各 2 路径。65 是去重文件数,不是去重 URL 数。nested 的两个中间容器也在 65 内。
|
|
|
+- **[已确认]** 所有 static constant/async 在启动时注册;大部分业务需登录。侧栏显示由后端 baseInfo.menu 决定,不直接使用本表的完整静态集合。
|
|
|
+- **[待确认]** 后端可能提供其他菜单路径或外链。本表不是生产环境可见菜单截图,也不保证每个声明的页面能成功加载数据或直接导航。
|
|
|
+- **[推断]** 第 4 节的风险是后续重构影响评估,不是本轮发现已经复现的业务故障。
|
|
|
+
|
|
|
+表中的 hidden 包括自身或上级静态 hidden,只解释静态声明;实际菜单的 show 字段需另核对。noCache / affix / roles 记录原字段:当前 keep-alive 与 TagsView UI 未启用,guard 也没有按 meta.roles 过滤,因此字段存在不等于行为生效。源码列冒号后是当前文件行号,链接指向真实文件。
|
|
|
+
|
|
|
+## 2. 完整静态路由树
|
|
|
+
|
|
|
+### 2.1 constantRoutes(11 条)
|
|
|
+
|
|
|
+| 完整路径 | 组件 / 容器 | name | title | redirect | 声明标记 | 路由源码:行 |
|
|
|
+|---|---|---|---|---|---|---|
|
|
|
+| `/redirect` | [src/layout/index.vue](../../src/layout/index.vue) | — | — | — | hidden(自身/父级) | [src/router/index.js](../../src/router/index.js):50 |
|
|
|
+| `/redirect/:path(.*)` | [src/views/redirect/index.vue](../../src/views/redirect/index.vue) | — | — | — | hidden(自身/父级) | [src/router/index.js](../../src/router/index.js):55 |
|
|
|
+| `/login` | [src/views/login/index.vue](../../src/views/login/index.vue) | — | 会员管理系统 | — | hidden(自身/父级) | [src/router/index.js](../../src/router/index.js):61 |
|
|
|
+| `/auth-redirect` | [src/views/login/auth-redirect.vue](../../src/views/login/auth-redirect.vue) | — | — | — | hidden(自身/父级) | [src/router/index.js](../../src/router/index.js):67 |
|
|
|
+| `/login-by-backend` | [src/views/login/login-by-backend.vue](../../src/views/login/login-by-backend.vue) | `login-by-backend` | — | — | — | [src/router/index.js](../../src/router/index.js):72 |
|
|
|
+| `/404` | [src/views/error-page/404.vue](../../src/views/error-page/404.vue) | — | — | — | hidden(自身/父级) | [src/router/index.js](../../src/router/index.js):77 |
|
|
|
+| `/401` | [src/views/error-page/401.vue](../../src/views/error-page/401.vue) | — | — | — | hidden(自身/父级) | [src/router/index.js](../../src/router/index.js):82 |
|
|
|
+| `/` | [src/layout/index.vue](../../src/layout/index.vue) | — | — | `/dashboard/index` | — | [src/router/index.js](../../src/router/index.js):87 |
|
|
|
+| `/dashboard/index` | [src/views/dashboard/index.vue](../../src/views/dashboard/index.vue) | `Dashboard` | dashboard | — | affix | [src/router/index.js](../../src/router/index.js):92 |
|
|
|
+| `/dashboard/index` | [src/layout/index.vue](../../src/layout/index.vue) | — | — | `/dashboard/index` | — | [src/router/index.js](../../src/router/index.js):100 |
|
|
|
+| `/dashboard/index/dashboard` | [src/views/dashboard/index.vue](../../src/views/dashboard/index.vue) | `Dashboard` | dashboard | — | affix | [src/router/index.js](../../src/router/index.js):105 |
|
|
|
+
|
|
|
+独立视图:/login、/auth-redirect、/login-by-backend、/401、/404。/redirect 和 dashboard 均套 Layout。错误页虽然在 constantRoutes,仍不在守卫匿名白名单;“constant”不能解释为匿名可访问。
|
|
|
+
|
|
|
+### 2.2 asyncRoutes(79 条,当前启动时全部注册)
|
|
|
+
|
|
|
+| 完整路径 | 组件 / 容器 | name | title | redirect | 声明标记 | 路由源码:行 |
|
|
|
+|---|---|---|---|---|---|---|
|
|
|
+| `/permission` | [src/layout/index.vue](../../src/layout/index.vue) | `Permission` | permission | `/permission/page` | roles=admin/editor | [src/router/index.js](../../src/router/index.js):120 |
|
|
|
+| `/permission/page` | [src/views/permission/page.vue](../../src/views/permission/page.vue) | `PagePermission` | pagePermission | — | roles=admin | [src/router/index.js](../../src/router/index.js):132 |
|
|
|
+| `/permission/directive` | [src/views/permission/directive.vue](../../src/views/permission/directive.vue) | `DirectivePermission` | directivePermission | — | — | [src/router/index.js](../../src/router/index.js):141 |
|
|
|
+| `/permission/role` | [src/views/permission/role.vue](../../src/views/permission/role.vue) | `RolePermission` | rolePermission | — | roles=admin | [src/router/index.js](../../src/router/index.js):150 |
|
|
|
+| `/icon` | [src/layout/index.vue](../../src/layout/index.vue) | — | — | — | — | [src/router/index.js](../../src/router/index.js):162 |
|
|
|
+| `/icon/index` | [src/views/icons/index.vue](../../src/views/icons/index.vue) | `Icons` | icons | — | noCache | [src/router/index.js](../../src/router/index.js):166 |
|
|
|
+| `/components` | [src/layout/index.vue](../../src/layout/index.vue) | `ComponentDemo` | components | `noRedirect` | — | [src/router/modules/components.js](../../src/router/modules/components.js):5 |
|
|
|
+| `/components/tinymce` | [src/views/components-demo/tinymce.vue](../../src/views/components-demo/tinymce.vue) | `TinymceDemo` | tinymce | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):15 |
|
|
|
+| `/components/json-editor` | [src/views/components-demo/json-editor.vue](../../src/views/components-demo/json-editor.vue) | `JsonEditorDemo` | jsonEditor | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):21 |
|
|
|
+| `/components/split-pane` | [src/views/components-demo/split-pane.vue](../../src/views/components-demo/split-pane.vue) | `SplitpaneDemo` | splitPane | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):27 |
|
|
|
+| `/components/avatar-upload` | [src/views/components-demo/avatar-upload.vue](../../src/views/components-demo/avatar-upload.vue) | `AvatarUploadDemo` | avatarUpload | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):33 |
|
|
|
+| `/components/dropzone` | [src/views/components-demo/dropzone.vue](../../src/views/components-demo/dropzone.vue) | `DropzoneDemo` | dropzone | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):39 |
|
|
|
+| `/components/sticky` | [src/views/components-demo/sticky.vue](../../src/views/components-demo/sticky.vue) | `StickyDemo` | sticky | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):45 |
|
|
|
+| `/components/count-to` | [src/views/components-demo/count-to.vue](../../src/views/components-demo/count-to.vue) | `CountToDemo` | countTo | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):51 |
|
|
|
+| `/components/mixin` | [src/views/components-demo/mixin.vue](../../src/views/components-demo/mixin.vue) | `ComponentMixinDemo` | componentMixin | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):57 |
|
|
|
+| `/components/back-to-top` | [src/views/components-demo/back-to-top.vue](../../src/views/components-demo/back-to-top.vue) | `BackToTopDemo` | backToTop | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):63 |
|
|
|
+| `/components/drag-dialog` | [src/views/components-demo/drag-dialog.vue](../../src/views/components-demo/drag-dialog.vue) | `DragDialogDemo` | dragDialog | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):69 |
|
|
|
+| `/components/drag-select` | [src/views/components-demo/drag-select.vue](../../src/views/components-demo/drag-select.vue) | `DragSelectDemo` | dragSelect | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):75 |
|
|
|
+| `/components/dnd-list` | [src/views/components-demo/dnd-list.vue](../../src/views/components-demo/dnd-list.vue) | `DndListDemo` | dndList | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):81 |
|
|
|
+| `/components/drag-kanban` | [src/views/components-demo/drag-kanban.vue](../../src/views/components-demo/drag-kanban.vue) | `DragKanbanDemo` | dragKanban | — | — | [src/router/modules/components.js](../../src/router/modules/components.js):87 |
|
|
|
+| `/charts` | [src/layout/index.vue](../../src/layout/index.vue) | `Charts` | charts | `noRedirect` | — | [src/router/modules/charts.js](../../src/router/modules/charts.js):5 |
|
|
|
+| `/charts/keyboard` | [src/views/charts/keyboard.vue](../../src/views/charts/keyboard.vue) | `KeyboardChart` | keyboardChart | — | noCache | [src/router/modules/charts.js](../../src/router/modules/charts.js):15 |
|
|
|
+| `/charts/line` | [src/views/charts/line.vue](../../src/views/charts/line.vue) | `LineChart` | lineChart | — | noCache | [src/router/modules/charts.js](../../src/router/modules/charts.js):21 |
|
|
|
+| `/charts/mix-chart` | [src/views/charts/mix-chart.vue](../../src/views/charts/mix-chart.vue) | `MixChart` | mixChart | — | noCache | [src/router/modules/charts.js](../../src/router/modules/charts.js):27 |
|
|
|
+| `/nested` | [src/layout/index.vue](../../src/layout/index.vue) | `Nested` | nested | `/nested/menu1/menu1-1` | — | [src/router/modules/nested.js](../../src/router/modules/nested.js):5 |
|
|
|
+| `/nested/menu1` | [src/views/nested/menu1/index.vue](../../src/views/nested/menu1/index.vue) | `Menu1` | menu1 | `/nested/menu1/menu1-1` | — | [src/router/modules/nested.js](../../src/router/modules/nested.js):15 |
|
|
|
+| `/nested/menu1/menu1-1` | [src/views/nested/menu1/menu1-1/index.vue](../../src/views/nested/menu1/menu1-1/index.vue) | `Menu1-1` | menu1-1 | — | — | [src/router/modules/nested.js](../../src/router/modules/nested.js):22 |
|
|
|
+| `/nested/menu1/menu1-2` | [src/views/nested/menu1/menu1-2/index.vue](../../src/views/nested/menu1/menu1-2/index.vue) | `Menu1-2` | menu1-2 | `/nested/menu1/menu1-2/menu1-2-1` | — | [src/router/modules/nested.js](../../src/router/modules/nested.js):28 |
|
|
|
+| `/nested/menu1/menu1-2/menu1-2-1` | [src/views/nested/menu1/menu1-2/menu1-2-1/index.vue](../../src/views/nested/menu1/menu1-2/menu1-2-1/index.vue) | `Menu1-2-1` | menu1-2-1 | — | — | [src/router/modules/nested.js](../../src/router/modules/nested.js):35 |
|
|
|
+| `/nested/menu1/menu1-2/menu1-2-2` | [src/views/nested/menu1/menu1-2/menu1-2-2/index.vue](../../src/views/nested/menu1/menu1-2/menu1-2-2/index.vue) | `Menu1-2-2` | menu1-2-2 | — | — | [src/router/modules/nested.js](../../src/router/modules/nested.js):41 |
|
|
|
+| `/nested/menu1/menu1-3` | [src/views/nested/menu1/menu1-3/index.vue](../../src/views/nested/menu1/menu1-3/index.vue) | `Menu1-3` | menu1-3 | — | — | [src/router/modules/nested.js](../../src/router/modules/nested.js):49 |
|
|
|
+| `/nested/menu2` | [src/views/nested/menu2/index.vue](../../src/views/nested/menu2/index.vue) | `Menu2` | menu2 | — | — | [src/router/modules/nested.js](../../src/router/modules/nested.js):57 |
|
|
|
+| `/table` | [src/layout/index.vue](../../src/layout/index.vue) | `Table` | Table | `/table/complex-table` | — | [src/router/modules/table.js](../../src/router/modules/table.js):5 |
|
|
|
+| `/table/dynamic-table` | [src/views/table/dynamic-table/index.vue](../../src/views/table/dynamic-table/index.vue) | `DynamicTable` | dynamicTable | — | — | [src/router/modules/table.js](../../src/router/modules/table.js):15 |
|
|
|
+| `/table/drag-table` | [src/views/table/drag-table.vue](../../src/views/table/drag-table.vue) | `DragTable` | dragTable | — | — | [src/router/modules/table.js](../../src/router/modules/table.js):21 |
|
|
|
+| `/table/inline-edit-table` | [src/views/table/inline-edit-table.vue](../../src/views/table/inline-edit-table.vue) | `InlineEditTable` | inlineEditTable | — | — | [src/router/modules/table.js](../../src/router/modules/table.js):27 |
|
|
|
+| `/table/complex-table` | [src/views/table/complex-table.vue](../../src/views/table/complex-table.vue) | `ComplexTable` | complexTable | — | — | [src/router/modules/table.js](../../src/router/modules/table.js):33 |
|
|
|
+| `/shop` | [src/layout/index.vue](../../src/layout/index.vue) | `Shopping Mall` | shop | `/shop/standard-products` | — | [src/router/modules/shop.js](../../src/router/modules/shop.js):3 |
|
|
|
+| `/shop/standard-products` | [src/views/shop/standard-products.vue](../../src/views/shop/standard-products.vue) | `repeatPurchase` | Repeat Purchase | — | — | [src/router/modules/shop.js](../../src/router/modules/shop.js):13 |
|
|
|
+| `/shop/car-fund-products` | [src/views/shop/car-fund-products.vue](../../src/views/shop/car-fund-products.vue) | `CarFundProducts` | Car Fund Products | — | — | [src/router/modules/shop.js](../../src/router/modules/shop.js):19 |
|
|
|
+| `/shop/villa-fund-products` | [src/views/shop/villa-fund-products.vue](../../src/views/shop/villa-fund-products.vue) | `VillaFundProducts` | Villa Fund Products | — | — | [src/router/modules/shop.js](../../src/router/modules/shop.js):25 |
|
|
|
+| `/shop/dec-order-list` | [src/views/shop/dec-order-list.vue](../../src/views/shop/dec-order-list.vue) | `DecOrderList` | Welcome Pack Listing | — | — | [src/router/modules/shop.js](../../src/router/modules/shop.js):31 |
|
|
|
+| `/shop/reconsume` | [src/views/shop/reconsume.vue](../../src/views/shop/reconsume.vue) | `memberRepeatPurchase` | Member Repeat Purchase | — | — | [src/router/modules/shop.js](../../src/router/modules/shop.js):37 |
|
|
|
+| `/shop/own-order` | [src/views/shop/order-list.vue](../../src/views/shop/order-list.vue) | `OrderList` | My Order | — | — | [src/router/modules/shop.js](../../src/router/modules/shop.js):43 |
|
|
|
+| `/shop/ba-dec-order-list` | [src/views/shop/ba-dec-order-list.vue](../../src/views/shop/ba-dec-order-list.vue) | `BaDecOrderList` | Welcome Listing | — | — | [src/router/modules/shop.js](../../src/router/modules/shop.js):49 |
|
|
|
+| `/shop/member-order` | [src/views/user/member-order.vue](../../src/views/user/member-order.vue) | `memberOrder` | Member Order | — | noCache | [src/router/modules/shop.js](../../src/router/modules/shop.js):55 |
|
|
|
+| `/shop/auto-maintenance` | [src/views/user/member-auto-maintenance.vue](../../src/views/user/member-auto-maintenance.vue) | `memberAutoMaintenance` | Member Auto-Maintenance | — | noCache | [src/router/modules/shop.js](../../src/router/modules/shop.js):61 |
|
|
|
+| `/profile` | [src/layout/index.vue](../../src/layout/index.vue) | — | — | `/profile/index` | hidden(自身/父级) | [src/router/modules/profile.js](../../src/router/modules/profile.js):3 |
|
|
|
+| `/profile/index` | [src/views/profile/index.vue](../../src/views/profile/index.vue) | `Profile` | Personal Info | — | hidden(自身/父级);noCache | [src/router/modules/profile.js](../../src/router/modules/profile.js):9 |
|
|
|
+| `/config` | [src/layout/index.vue](../../src/layout/index.vue) | `Setting` | config | `/config/receive-address-list` | — | [src/router/modules/config.js](../../src/router/modules/config.js):3 |
|
|
|
+| `/config/receive-address-list` | [src/views/config/shipping-address-list.vue](../../src/views/config/shipping-address-list.vue) | `ShippingAddressList` | Shipping Address | — | — | [src/router/modules/config.js](../../src/router/modules/config.js):13 |
|
|
|
+| `/config/profile` | [src/views/profile/index.vue](../../src/views/profile/index.vue) | `Profile` | Personal Info | — | noCache | [src/router/modules/config.js](../../src/router/modules/config.js):19 |
|
|
|
+| `/atlas` | [src/layout/index.vue](../../src/layout/index.vue) | — | — | `/atlas/network` | hidden(自身/父级) | [src/router/modules/atlas.js](../../src/router/modules/atlas.js):3 |
|
|
|
+| `/atlas/network` | [src/views/atlas/placement-network.vue](../../src/views/atlas/placement-network.vue) | `placementNetwork` | Placement Network | — | hidden(自身/父级);noCache | [src/router/modules/atlas.js](../../src/router/modules/atlas.js):9 |
|
|
|
+| `/atlas/relation` | [src/views/atlas/sponsor-network.vue](../../src/views/atlas/sponsor-network.vue) | `sponsorNetwork` | Sponsor Network | — | hidden(自身/父级);noCache | [src/router/modules/atlas.js](../../src/router/modules/atlas.js):15 |
|
|
|
+| `/atlas/network-ex` | [src/views/atlas/placement-network-ex.vue](../../src/views/atlas/placement-network-ex.vue) | `placementNetworkEx` | Placement Network Ex | — | hidden(自身/父级);noCache | [src/router/modules/atlas.js](../../src/router/modules/atlas.js):21 |
|
|
|
+| `/atlas/relation-ex` | [src/views/atlas/sponsor-network-ex.vue](../../src/views/atlas/sponsor-network-ex.vue) | `sponsorNetworkEx` | Sponsor Network Ex | — | hidden(自身/父级);noCache | [src/router/modules/atlas.js](../../src/router/modules/atlas.js):27 |
|
|
|
+| `/atlas/brand-ambassador-list` | [src/views/atlas/brand-ambassador-list.vue](../../src/views/atlas/brand-ambassador-list.vue) | `BrandAmbassadorList` | Brand Ambassador List | — | hidden(自身/父级);noCache | [src/router/modules/atlas.js](../../src/router/modules/atlas.js):33 |
|
|
|
+| `/article` | [src/layout/index.vue](../../src/layout/index.vue) | — | — | `/article/article-list` | hidden(自身/父级) | [src/router/modules/article.js](../../src/router/modules/article.js):3 |
|
|
|
+| `/article/article-list` | [src/views/article/article-list.vue](../../src/views/article/article-list.vue) | `SystemNotification` | System Notification | — | hidden(自身/父级) | [src/router/modules/article.js](../../src/router/modules/article.js):9 |
|
|
|
+| `/bonus` | [src/layout/index.vue](../../src/layout/index.vue) | `Bonus Management` | bonus | `/bonus/index` | — | [src/router/modules/bonus.js](../../src/router/modules/bonus.js):3 |
|
|
|
+| `/bonus/index` | [src/views/bonus/account-list.vue](../../src/views/bonus/account-list.vue) | `memberAccount` | My Account | — | — | [src/router/modules/bonus.js](../../src/router/modules/bonus.js):13 |
|
|
|
+| `/bonus/other` | [src/views/bonus/bonus-list.vue](../../src/views/bonus/bonus-list.vue) | `previousBonus` | Previous Bonus | — | — | [src/router/modules/bonus.js](../../src/router/modules/bonus.js):19 |
|
|
|
+| `/bonus/historical-cumulative-bonus` | [src/views/bonus/historical-cumulative-bonus.vue](../../src/views/bonus/historical-cumulative-bonus.vue) | `historicalCumulativeBonus` | Historical Cumulative Bonus | — | — | [src/router/modules/bonus.js](../../src/router/modules/bonus.js):25 |
|
|
|
+| `/bonus/teams` | [src/views/bonus/team-inquiry.vue](../../src/views/bonus/team-inquiry.vue) | `teamInquiry` | Team Inquiry | — | — | [src/router/modules/bonus.js](../../src/router/modules/bonus.js):31 |
|
|
|
+| `/finance` | [src/layout/index.vue](../../src/layout/index.vue) | `Bonus Management` | finance | `/finance/transfer-list` | — | [src/router/modules/finance.js](../../src/router/modules/finance.js):3 |
|
|
|
+| `/finance/transfer-list` | [src/views/finance/transfer-list.vue](../../src/views/finance/transfer-list.vue) | `TransferList` | Transfer | — | — | [src/router/modules/finance.js](../../src/router/modules/finance.js):13 |
|
|
|
+| `/finance/recharge` | [src/views/finance/recharge-list.vue](../../src/views/finance/recharge-list.vue) | `RechargeList` | Recharge Details | — | — | [src/router/modules/finance.js](../../src/router/modules/finance.js):19 |
|
|
|
+| `/user` | [src/layout/index.vue](../../src/layout/index.vue) | — | — | `/user/dec` | hidden(自身/父级) | [src/router/modules/user.js](../../src/router/modules/user.js):3 |
|
|
|
+| `/user/ba-dec` | [src/views/user/brand-ambassador.vue](../../src/views/user/brand-ambassador.vue) | `brandAmbassador` | Welcome Brand Ambassador | — | hidden(自身/父级);noCache | [src/router/modules/user.js](../../src/router/modules/user.js):9 |
|
|
|
+| `/user/upgrade` | [src/views/user/member-upgrade.vue](../../src/views/user/member-upgrade.vue) | `memberUpgrade` | Member Upgrade | — | hidden(自身/父级);noCache | [src/router/modules/user.js](../../src/router/modules/user.js):15 |
|
|
|
+| `/user/dec` | [src/views/user/welcome-pack.vue](../../src/views/user/welcome-pack.vue) | `welcomePack` | Member Welcome Pack | — | hidden(自身/父级);noCache | [src/router/modules/user.js](../../src/router/modules/user.js):21 |
|
|
|
+| `/user/index` | [src/views/profile/index.vue](../../src/views/profile/index.vue) | `Profile` | Personal Info | — | hidden(自身/父级);noCache | [src/router/modules/user.js](../../src/router/modules/user.js):27 |
|
|
|
+| `/error` | [src/layout/index.vue](../../src/layout/index.vue) | `ErrorPages` | errorPages | `noRedirect` | — | [src/router/index.js](../../src/router/index.js):188 |
|
|
|
+| `/error/401` | [src/views/error-page/401.vue](../../src/views/error-page/401.vue) | `Page401` | page401 | — | noCache | [src/router/index.js](../../src/router/index.js):198 |
|
|
|
+| `/error/404` | [src/views/error-page/404.vue](../../src/views/error-page/404.vue) | `Page404` | page404 | — | noCache | [src/router/index.js](../../src/router/index.js):204 |
|
|
|
+| `/error-log` | [src/layout/index.vue](../../src/layout/index.vue) | — | — | — | — | [src/router/index.js](../../src/router/index.js):213 |
|
|
|
+| `/error-log/log` | [src/views/error-log/index.vue](../../src/views/error-log/index.vue) | `ErrorLog` | errorLog | — | — | [src/router/index.js](../../src/router/index.js):217 |
|
|
|
+| `*` | — | — | — | `/404` | hidden(自身/父级) | [src/router/index.js](../../src/router/index.js):227 |
|
|
|
+
|
|
|
+**[已确认]** 页面组件路径大小写和文件名按本地实际解析记录;路由标题为源码原值,有些是翻译 key,有些是英文文案,不代表界面最终显示文本。父路由 Layout 行和 wildcard 行不是独立业务页面。
|
|
|
+
|
|
|
+## 3. 布局、入口和路由异常
|
|
|
+
|
|
|
+### 3.1 布局映射
|
|
|
+
|
|
|
+| 状态 | 范围 | 布局 / 数据入口 |
|
|
|
+|---|---|---|
|
|
|
+| 已确认 | 普通登录 | 根 router-view 下独立页面;.ng-login-v2、Element Card/Form/Input/Button、自有品牌布局;English |
|
|
|
+| 已确认 | 快捷登录 / auth 回调 | 独立流程页,分别处理后台参数和回调缓存/关窗 |
|
|
|
+| 已确认 | 顶层 /401、/404 | 独立错误页面;登录守卫仍会处理匿名访问 |
|
|
|
+| 已确认 | /error/401、/error/404 | 同一错误组件,外层有 Layout |
|
|
|
+| 已确认 | Dashboard 与业务页、演示页 | Layout → Sidebar/Navbar/AppMain → route view |
|
|
|
+| 已确认 | nested | Layout → menu1 router-view → menu1-2 router-view → 子页面 |
|
|
|
+| 已确认 | Profile 三个入口 | 同一个 Profile 文件,内部渲染 UserCard、Account、LoginPassword、PaymentPassword |
|
|
|
+| 已确认 | 后端侧栏 | baseInfo.menu → permission.generateRoutes/generaMenu → SidebarItem;不是完整静态路由清单 |
|
|
|
+| 待确认 | 新 UI 独立目录 | 当前未发现 src/ui-refactor/login 实现;不能按旧文档目录建议声称新登录未接入。实际 /login 已指向现有改动后的 index.vue |
|
|
|
+
|
|
|
+### 3.2 当前源码中的结构问题
|
|
|
+
|
|
|
+| 状态 | 事项 | 证据与实际验证边界 |
|
|
|
+|---|---|---|
|
|
|
+| 已确认 | 重复 Dashboard name | 两条 dashboard 子记录;/dashboard/index 也重复为页面/父路径,父记录 redirect 到自身 |
|
|
|
+| 已确认 | 重复 Profile name | profile、config、user 三模块;同组件多入口 |
|
|
|
+| 已确认 | 重复 Bonus Management name | bonus / finance 父记录 |
|
|
|
+| 已确认 | noRedirect 字段 | /components、/charts、/error 父记录;值被实际交给 Router,不能仅按“面包屑不可点”解释 |
|
|
|
+| 已确认 | 静态未声明 /shop/index | 当前 dashboard 轮播使用该链接;shop 静态入口是 /shop/standard-products |
|
|
|
+| 已确认 | 后端 menu 依赖固定索引 | user/getBaseInfo 改写 ret.menu[3].child[1].routePath;更换菜单结构会影响访问 |
|
|
|
+| 待确认 | 上述重名/重定向/链接的运行后果 | 尚未运行浏览器;named navigation、刷新、父路径直达、实际后端菜单应单独验证 |
|
|
|
+| 待确认 | 演示路由是否允许保留在发布版本 | 已注册不等于用户需求或可以删除;需明确业务范围 |
|
|
|
+
|
|
|
+## 4. 业务页面与重构影响
|
|
|
+
|
|
|
+表内行数为当前文本按换行拆分的规模指标,仅用于定位,不作为强制拆分门槛。API 列列举静态直接 import,或注明父组件/action 间接依赖;不保证包含动态 import、上传/图像/支付外部请求等全部调用。具体字段、时序与风险证据见项目分析。
|
|
|
+
|
|
|
+| 视图文件 | 静态入口 | 文本行数 | API 依赖 | 重构重点 / 风险推断 |
|
|
|
+|---|---|---|---|---|
|
|
|
+| [src/views/article/article-list.vue](../../src/views/article/article-list.vue) | `/article/article-list` | 126 | [src/api/article.js](../../src/api/article.js) | 中高:列表/分类映射、详情弹窗、服务端 HTML、时间转换;分页参数及富文本信任边界 |
|
|
|
+| [src/views/atlas/brand-ambassador-list.vue](../../src/views/atlas/brand-ambassador-list.vue) | `/atlas/brand-ambassador-list` | 90 | [src/api/atlas.js](../../src/api/atlas.js) | 中:API 列表/查询、等级与国际化展示 |
|
|
|
+| [src/views/atlas/placement-network-ex.vue](../../src/views/atlas/placement-network-ex.vue) | `/atlas/network-ex` | 219 | [src/api/atlas.js](../../src/api/atlas.js) | 中高:TreeChart + 树数据转换、懒展开/点击节点、图表尺寸;menu 中的实际入口待确认 |
|
|
|
+| [src/views/atlas/placement-network.vue](../../src/views/atlas/placement-network.vue) | `/atlas/network` | 233 | [src/api/atlas.js](../../src/api/atlas.js) | 中高:顶级会员、时期、层级、安置网络/明细接口与筛选联动 |
|
|
|
+| [src/views/atlas/sponsor-network-ex.vue](../../src/views/atlas/sponsor-network-ex.vue) | `/atlas/relation-ex` | 216 | [src/api/atlas.js](../../src/api/atlas.js) | 中高:TreeChart + 推荐树数据、点击扩展/时期;baseInfo action 硬编码菜单路径 |
|
|
|
+| [src/views/atlas/sponsor-network.vue](../../src/views/atlas/sponsor-network.vue) | `/atlas/relation` | 230 | [src/api/atlas.js](../../src/api/atlas.js) | 中高:推荐网络/明细接口、会员/时期/层级联动 |
|
|
|
+| [src/views/bonus/account-list.vue](../../src/views/bonus/account-list.vue) | `/bonus/index` | 240 | [src/api/bonus.js](../../src/api/bonus.js) | 中高:钱包卡片、账户流水/业绩弹窗、分页与金额格式;只读页面但交易字段敏感 |
|
|
|
+| [src/views/bonus/bonus-list.vue](../../src/views/bonus/bonus-list.vue) | `/bonus/other` | 116 | [src/api/bonus.js](../../src/api/bonus.js) | 中:奖金列表/时期与详情弹窗,不属于普通静态卡片 |
|
|
|
+| [src/views/bonus/historical-cumulative-bonus.vue](../../src/views/bonus/historical-cumulative-bonus.vue) | `/bonus/historical-cumulative-bonus` | 65 | [src/api/bonus.js](../../src/api/bonus.js) | 中:历史累计奖金数据映射/金额展示 |
|
|
|
+| [src/views/bonus/team-inquiry.vue](../../src/views/bonus/team-inquiry.vue) | `/bonus/teams` | 170 | [src/api/bonus.js](../../src/api/bonus.js) | 中:团队查询数据、汇总与列表结构 |
|
|
|
+| [src/views/config/shipping-address-list.vue](../../src/views/config/shipping-address-list.vue) | `/config/receive-address-list` | 324 | [src/api/config.js](../../src/api/config.js) | 高:地址新建/编辑/删除/默认切换;字段与地区契约,不能用 UI 调整授权真实写操作 |
|
|
|
+| [src/views/dashboard/index.vue](../../src/views/dashboard/index.vue) | `/dashboard/index`、`/dashboard/index/dashboard` | 34 | 经 admin → dashboard action / article API | 中高:动态组件入口实际选择 admin;admin 页缓存、轮播/文章 API、会员时钟、退出与 v-html;已有用户改动 |
|
|
|
+| [src/views/finance/recharge-list.vue](../../src/views/finance/recharge-list.vue) | `/finance/recharge` | 439 | [src/api/finance.js](../../src/api/finance.js)、[src/api/file.js](../../src/api/file.js) | 高:银行、充值新增/编辑、条件校验、凭证上传、列表及错误收尾 |
|
|
|
+| [src/views/finance/transfer-list.vue](../../src/views/finance/transfer-list.vue) | `/finance/transfer-list` | 360 | [src/api/finance.js](../../src/api/finance.js)、[src/api/user.js](../../src/api/user.js) | 高:授权码、余额、手续费、最低金额、收款人、密码 prompt 和真实转账 |
|
|
|
+| [src/views/login/auth-redirect.vue](../../src/views/login/auth-redirect.vue) | `/auth-redirect` | 16 | 经 user/settings actions → user/setting API | 中:window.location.search 写 x-admin-oauth-code 后关闭窗口;当前第三方登录链路是否使用待确认 |
|
|
|
+| [src/views/login/index.vue](../../src/views/login/index.vue) | `/login` | 719 | 经 user/settings actions → user/setting API | 高:pageId、条件验证码、English 同步、Enter、焦点、请求/缓存/redirect;Register/Shop now 展示,忘记密码仅 Notification |
|
|
|
+| [src/views/login/login-by-backend.vue](../../src/views/login/login-by-backend.vue) | `/login-by-backend` | 71 | 经 user/settings actions → user/setting API | 高:清旧缓存、解析 URL 参数、快捷登录→用户信息→baseInfo;后台授权参数契约待确认 |
|
|
|
+| [src/views/profile/index.vue](../../src/views/profile/index.vue) | `/profile/index`、`/config/profile`、`/user/index` | 96 | 经私有组件 → user API / settings action | 高:三个路径共用;缓存/国家/等级、邮箱保存、登录/支付密码子组件;修改密码含退出行为 |
|
|
|
+| [src/views/shop/ba-dec-order-list.vue](../../src/views/shop/ba-dec-order-list.vue) | `/shop/ba-dec-order-list` | 204 | [src/api/shop.js](../../src/api/shop.js) | 中高:BA 报单筛选/分页、专有下载接口 |
|
|
|
+| [src/views/shop/car-fund-products.vue](../../src/views/shop/car-fund-products.vue) | `/shop/car-fund-products` | 615 | [src/api/shop.js](../../src/api/shop.js) | 高:商品类别、账户/购物车/运费和支付提交;不可因与普通商品相似就合并规则 |
|
|
|
+| [src/views/shop/dec-order-list.vue](../../src/views/shop/dec-order-list.vue) | `/shop/dec-order-list` | 204 | [src/api/shop.js](../../src/api/shop.js) | 中高:报单筛选/分页、文件 URL 下载,业务字段与文件源 |
|
|
|
+| [src/views/shop/order-list.vue](../../src/views/shop/order-list.vue) | `/shop/own-order` | 214 | [src/api/shop.js](../../src/api/shop.js) | 中高:自身订单筛选/分页、下载 URL 和新窗口;不是 blob 统一下载 |
|
|
|
+| [src/views/shop/reconsume.vue](../../src/views/shop/reconsume.vue) | `/shop/reconsume` | 923 | [src/api/shop.js](../../src/api/shop.js)、[src/api/config.js](../../src/api/config.js)、[src/api/user.js](../../src/api/user.js) | 高:复消商品、成员查询/地址、账户/运费、密码、Paystack和订单状态 |
|
|
|
+| [src/views/shop/standard-products.vue](../../src/views/shop/standard-products.vue) | `/shop/standard-products` | 826 | [src/api/shop.js](../../src/api/shop.js) | 高:商品/购物车、数量/折扣/税/运费、地址、余额、payForm、支付密码、Paystack/订单、取消/倒计时 |
|
|
|
+| [src/views/shop/villa-fund-products.vue](../../src/views/shop/villa-fund-products.vue) | `/shop/villa-fund-products` | 615 | [src/api/shop.js](../../src/api/shop.js) | 高:房奖类别、账户/购物车/运费和支付提交;与车奖需逐项核对差异 |
|
|
|
+| [src/views/user/brand-ambassador.vue](../../src/views/user/brand-ambassador.vue) | `/user/ba-dec` | 659 | [src/api/shop.js](../../src/api/shop.js)、[src/api/user.js](../../src/api/user.js) | 高:新建 BA 会员信息、网络检查、支付/临时订单/取消/回调 |
|
|
|
+| [src/views/user/member-auto-maintenance.vue](../../src/views/user/member-auto-maintenance.vue) | `/shop/auto-maintenance` | 952 | [src/api/shop.js](../../src/api/shop.js)、[src/api/config.js](../../src/api/config.js)、[src/api/user.js](../../src/api/user.js) | 高:维护商品/会员/地址、账户与订单/支付、倒计时;勿和复消简单按外观合并 |
|
|
|
+| [src/views/user/member-order.vue](../../src/views/user/member-order.vue) | `/shop/member-order` | 215 | [src/api/user.js](../../src/api/user.js) | 中高:会员订单与用户 API 出口,过滤/分页/下载 |
|
|
|
+| [src/views/user/member-upgrade.vue](../../src/views/user/member-upgrade.vue) | `/user/upgrade` | 693 | [src/api/shop.js](../../src/api/shop.js)、[src/api/user.js](../../src/api/user.js) | 高:升级资格/等级、会员和支付参数、支付/取消/倒计时 |
|
|
|
+| [src/views/user/welcome-pack.vue](../../src/views/user/welcome-pack.vue) | `/user/dec` | 890 | [src/api/shop.js](../../src/api/shop.js)、[src/api/user.js](../../src/api/user.js) | 高:Welcome Pack/BA 升级、会员/地区/自动区位、支付与缓存依赖 |
|
|
|
+
|
|
|
+### 4.1 演示与工具路由的实际能力
|
|
|
+
|
|
|
+| 状态 | 路由组 | 视图用途 / 验证边界 |
|
|
|
+|---|---|---|
|
|
|
+| 已确认 | /permission/* | page/directive/role 模板演示;role 请求 /vue-element-admin/roles/routes;SwitchRoles 调 changeRoles |
|
|
|
+| 已确认 | /icon/index | Svg 与 Element 图标展示、复制 |
|
|
|
+| 已确认 | /components/* | 富文本/JSON、分栏、裁剪、上传、sticky/count、返回顶部、拖拽等 13 个演示入口 |
|
|
|
+| 已确认 | /charts/* | 3 个图表入口,调用公共 Charts;不等于会员业务首页图表已展示 |
|
|
|
+| 已确认 | /nested/* | 7 个容器/子记录;展示多层 Router View,非会员业务模块 |
|
|
|
+| 已确认 | /table/* | dynamic、drag、inline-edit、complex 共 4 个入口;部分使用模板 article API |
|
|
|
+| 已确认 | /table/complex-table | 主要 fetch/create/update/PV 请求代码被注释;getList 设 listLoading=true;不能承诺为可用 CRUD 功能 |
|
|
|
+| 已确认 | /error-log/log | 演示 ErrorTestA/B;错误记录模块存在,但 Navbar 入口已注释 |
|
|
|
+| 待确认 | 所有上述演示入口 | 当前是否部署、接口是否可用、是否应隐藏或后续删除;本轮没有改变它们 |
|
|
|
+
|
|
|
+## 5. 无独立静态路由的视图文件(32 个)
|
|
|
+
|
|
|
+以下是父入口或页面内部组件。**[已确认]** 没有被静态路由直接引用,但存在父组件或辅助用途;不是 32 个额外导航页面。调用方来自 AST 静态 import;仅有 import 不能证明模板渲染。部分演示父组件本身也未接入。
|
|
|
+
|
|
|
+| 文件 | 文本行数 | 静态调用方 / 当前说明 | 直接 API |
|
|
|
+|---|---|---|---|
|
|
|
+| [src/views/dashboard/admin/components/BarChart.vue](../../src/views/dashboard/admin/components/BarChart.vue) | 103 | [src/views/dashboard/admin/index.vue](../../src/views/dashboard/admin/index.vue);首页主要模板图表/面板展示已注释,存在 import 不表示已渲染 | — |
|
|
|
+| [src/views/dashboard/admin/components/BoxCard.vue](../../src/views/dashboard/admin/components/BoxCard.vue) | 118 | [src/views/dashboard/admin/index.vue](../../src/views/dashboard/admin/index.vue);首页主要模板图表/面板展示已注释,存在 import 不表示已渲染 | — |
|
|
|
+| [src/views/dashboard/admin/components/LineChart.vue](../../src/views/dashboard/admin/components/LineChart.vue) | 136 | [src/views/dashboard/admin/index.vue](../../src/views/dashboard/admin/index.vue);首页主要模板图表/面板展示已注释,存在 import 不表示已渲染 | — |
|
|
|
+| [src/views/dashboard/admin/components/PanelGroup.vue](../../src/views/dashboard/admin/components/PanelGroup.vue) | 251 | [src/views/dashboard/admin/index.vue](../../src/views/dashboard/admin/index.vue);首页主要模板图表/面板展示已注释,存在 import 不表示已渲染 | — |
|
|
|
+| [src/views/dashboard/admin/components/PieChart.vue](../../src/views/dashboard/admin/components/PieChart.vue) | 80 | [src/views/dashboard/admin/index.vue](../../src/views/dashboard/admin/index.vue);首页主要模板图表/面板展示已注释,存在 import 不表示已渲染 | — |
|
|
|
+| [src/views/dashboard/admin/components/RaddarChart.vue](../../src/views/dashboard/admin/components/RaddarChart.vue) | 117 | [src/views/dashboard/admin/index.vue](../../src/views/dashboard/admin/index.vue);首页主要模板图表/面板展示已注释,存在 import 不表示已渲染 | — |
|
|
|
+| [src/views/dashboard/admin/components/TodoList/index.vue](../../src/views/dashboard/admin/components/TodoList/index.vue) | 128 | [src/views/dashboard/admin/index.vue](../../src/views/dashboard/admin/index.vue);首页主要模板图表/面板展示已注释,存在 import 不表示已渲染 | — |
|
|
|
+| [src/views/dashboard/admin/components/TodoList/Todo.vue](../../src/views/dashboard/admin/components/TodoList/Todo.vue) | 82 | [src/views/dashboard/admin/components/TodoList/index.vue](../../src/views/dashboard/admin/components/TodoList/index.vue);首页主要模板图表/面板展示已注释,存在 import 不表示已渲染 | — |
|
|
|
+| [src/views/dashboard/admin/components/TransactionTable.vue](../../src/views/dashboard/admin/components/TransactionTable.vue) | 56 | [src/views/dashboard/admin/index.vue](../../src/views/dashboard/admin/index.vue);首页主要模板图表/面板展示已注释,存在 import 不表示已渲染 | [src/api/remote-search.js](../../src/api/remote-search.js) |
|
|
|
+| [src/views/dashboard/admin/index.vue](../../src/views/dashboard/admin/index.vue) | 546 | [src/views/dashboard/index.vue](../../src/views/dashboard/index.vue);Dashboard 当前选择该组件 | [src/api/article.js](../../src/api/article.js) |
|
|
|
+| [src/views/dashboard/editor/index.vue](../../src/views/dashboard/editor/index.vue) | 75 | [src/views/dashboard/index.vue](../../src/views/dashboard/index.vue);父页当前两条分支均选 admin | — |
|
|
|
+| [src/views/error-log/components/ErrorTestA.vue](../../src/views/error-log/components/ErrorTestA.vue) | 14 | [src/views/error-log/index.vue](../../src/views/error-log/index.vue) | — |
|
|
|
+| [src/views/error-log/components/ErrorTestB.vue](../../src/views/error-log/components/ErrorTestB.vue) | 12 | [src/views/error-log/index.vue](../../src/views/error-log/index.vue) | — |
|
|
|
+| [src/views/example/components/ArticleDetail.vue](../../src/views/example/components/ArticleDetail.vue) | 292 | [src/views/example/create.vue](../../src/views/example/create.vue)、[src/views/example/edit.vue](../../src/views/example/edit.vue) | [src/api/article.js](../../src/api/article.js)、[src/api/remote-search.js](../../src/api/remote-search.js) |
|
|
|
+| [src/views/example/components/Dropdown/Comment.vue](../../src/views/example/components/Dropdown/Comment.vue) | 42 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/example/components/Dropdown/Platform.vue](../../src/views/example/components/Dropdown/Platform.vue) | 47 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/example/components/Dropdown/SourceUrl.vue](../../src/views/example/components/Dropdown/SourceUrl.vue) | 39 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/example/components/Warning.vue](../../src/views/example/components/Warning.vue) | 11 | [src/views/example/components/ArticleDetail.vue](../../src/views/example/components/ArticleDetail.vue) | — |
|
|
|
+| [src/views/excel/components/AutoWidthOption.vue](../../src/views/excel/components/AutoWidthOption.vue) | 35 | [src/views/excel/export-excel.vue](../../src/views/excel/export-excel.vue) | — |
|
|
|
+| [src/views/excel/components/BookTypeOption.vue](../../src/views/excel/components/BookTypeOption.vue) | 40 | [src/views/excel/export-excel.vue](../../src/views/excel/export-excel.vue) | — |
|
|
|
+| [src/views/excel/components/FilenameOption.vue](../../src/views/excel/components/FilenameOption.vue) | 29 | [src/views/excel/export-excel.vue](../../src/views/excel/export-excel.vue) | — |
|
|
|
+| [src/views/login/components/SocialSignin.vue](../../src/views/login/components/SocialSignin.vue) | 73 | [src/views/login/index.vue](../../src/views/login/index.vue);登录当前未渲染 | — |
|
|
|
+| [src/views/permission/components/SwitchRoles.vue](../../src/views/permission/components/SwitchRoles.vue) | 33 | [src/views/permission/directive.vue](../../src/views/permission/directive.vue)、[src/views/permission/page.vue](../../src/views/permission/page.vue) | — |
|
|
|
+| [src/views/profile/components/Account.vue](../../src/views/profile/components/Account.vue) | 119 | [src/views/profile/index.vue](../../src/views/profile/index.vue) | [src/api/user.js](../../src/api/user.js) |
|
|
|
+| [src/views/profile/components/Activity.vue](../../src/views/profile/components/Activity.vue) | 186 | [src/views/profile/index.vue](../../src/views/profile/index.vue);Profile 当前未渲染 | — |
|
|
|
+| [src/views/profile/components/LoginPassword.vue](../../src/views/profile/components/LoginPassword.vue) | 69 | [src/views/profile/index.vue](../../src/views/profile/index.vue) | [src/api/user.js](../../src/api/user.js) |
|
|
|
+| [src/views/profile/components/PaymentPassword.vue](../../src/views/profile/components/PaymentPassword.vue) | 66 | [src/views/profile/index.vue](../../src/views/profile/index.vue) | [src/api/user.js](../../src/api/user.js) |
|
|
|
+| [src/views/profile/components/Timeline.vue](../../src/views/profile/components/Timeline.vue) | 44 | [src/views/profile/index.vue](../../src/views/profile/index.vue);Profile 当前未渲染 | — |
|
|
|
+| [src/views/profile/components/UserCard.vue](../../src/views/profile/components/UserCard.vue) | 220 | [src/views/profile/index.vue](../../src/views/profile/index.vue) | — |
|
|
|
+| [src/views/tab/components/TabPane.vue](../../src/views/tab/components/TabPane.vue) | 104 | [src/views/tab/index.vue](../../src/views/tab/index.vue) | [src/api/article.js](../../src/api/article.js) |
|
|
|
+| [src/views/table/dynamic-table/components/FixedThead.vue](../../src/views/table/dynamic-table/components/FixedThead.vue) | 63 | [src/views/table/dynamic-table/index.vue](../../src/views/table/dynamic-table/index.vue) | — |
|
|
|
+| [src/views/table/dynamic-table/components/UnfixedThead.vue](../../src/views/table/dynamic-table/components/UnfixedThead.vue) | 51 | [src/views/table/dynamic-table/index.vue](../../src/views/table/dynamic-table/index.vue) | — |
|
|
|
+
|
|
|
+关键状态:
|
|
|
+
|
|
|
+- **[已确认]** Dashboard 的 currentRole 默认 admin;created 中非 admin 分支仍指定 admin。editor 文件和 import 存在,但当前判断不切换到它。
|
|
|
+- **[已确认]** admin 首页当前显示轮播、会员信息卡、推荐链接占位与新闻/详情;推荐链接未接入,分享/复制按钮禁用。模板 PanelGroup、Transaction/Todo/BoxCard 等显示区被注释,不作为当前业务能力。
|
|
|
+- **[已确认]** Profile 渲染个人资料/登录密码/支付密码;Activity、Timeline 已注册但当前模板未显示。
|
|
|
+- **[已确认]** SocialSignin 在登录 script 中仍注册,但当前模板不显示它;不能按存在该组件声称第三方登录可用。
|
|
|
+
|
|
|
+## 6. 未静态接入页面及关联子页面(17 个)
|
|
|
+
|
|
|
+这些文件没有被当前 static router 引用。**[已确认]** 部分存在彼此之间的 import 或内部组件;**[待确认]** 后端动态菜单是否指向相关路径、外部入口或未来保留计划。generaMenu 本身不把菜单动态映射成这些文件,因此不能单靠菜单名称认为它们已经接入,也不能据此删除。
|
|
|
+
|
|
|
+| 文件 | 文本行数 | 静态调用方 | 直接 API |
|
|
|
+|---|---|---|---|
|
|
|
+| [src/views/clipboard/index.vue](../../src/views/clipboard/index.vue) | 50 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/documentation/index.vue](../../src/views/documentation/index.vue) | 58 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/example/create.vue](../../src/views/example/create.vue) | 14 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/example/edit.vue](../../src/views/example/edit.vue) | 14 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/example/list.vue](../../src/views/example/list.vue) | 113 | 未发现静态 import 调用方 | [src/api/article.js](../../src/api/article.js) |
|
|
|
+| [src/views/excel/export-excel.vue](../../src/views/excel/export-excel.vue) | 116 | 未发现静态 import 调用方 | [src/api/article.js](../../src/api/article.js) |
|
|
|
+| [src/views/excel/merge-header.vue](../../src/views/excel/merge-header.vue) | 102 | 未发现静态 import 调用方 | [src/api/article.js](../../src/api/article.js) |
|
|
|
+| [src/views/excel/select-excel.vue](../../src/views/excel/select-excel.vue) | 109 | 未发现静态 import 调用方 | [src/api/article.js](../../src/api/article.js) |
|
|
|
+| [src/views/excel/upload-excel.vue](../../src/views/excel/upload-excel.vue) | 43 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/guide/index.vue](../../src/views/guide/index.vue) | 36 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/i18n-demo/index.vue](../../src/views/i18n-demo/index.vue) | 169 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/pdf/download.vue](../../src/views/pdf/download.vue) | 202 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/pdf/index.vue](../../src/views/pdf/index.vue) | 12 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/qiniu/upload.vue](../../src/views/qiniu/upload.vue) | 42 | 未发现静态 import 调用方 | [src/api/qiniu.js](../../src/api/qiniu.js) |
|
|
|
+| [src/views/tab/index.vue](../../src/views/tab/index.vue) | 58 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/theme/index.vue](../../src/views/theme/index.vue) | 119 | 未发现静态 import 调用方 | — |
|
|
|
+| [src/views/zip/index.vue](../../src/views/zip/index.vue) | 79 | 未发现静态 import 调用方 | [src/api/article.js](../../src/api/article.js) |
|
|
|
+
|
|
|
+未接入组的用途:clipboard 复制示例、documentation 模板文档、example 文章示例、excel 导入/导出、guide 引导、i18n-demo 多语言、pdf 展示/下载、qiniu 上传示例、tab 示例、theme 主题示例、zip 导出。名称反映源码用途,不自动成为当前会员业务需求。PDF download 是 pdf/index 的关联子视图,单独列出保证文件覆盖完整。
|
|
|
+
|
|
|
+## 7. 页面样式与公共依赖说明
|
|
|
+
|
|
|
+**[已确认]** 对 114 个视图文件的 style 标签统计:40 个至少有 scoped 标签,24 个至少有非 scoped 标签,52 个没有 style 标签。一个文件可以同时包含 scoped 和非 scoped,因此前两项可能重叠;此统计不是 CSS 作用域安全结论。
|
|
|
+
|
|
|
+业务商品/订单/会员页面大量直接操作 Element Table/Dialog/Tabs/Radio,并含非 scoped 覆盖;部分文件重复 csClass。金额、状态、等级、权限、时区、后端 HTML和下载路径在模板表达式、过滤器与 methods 中交织。公共 Pagination、TreeChart、Uploader、LangSelect 是行为组件,不能在只重排 UI 时替换掉其事件/props 契约。
|
|
|
+
|
|
|
+登录和 dashboard admin 已有未提交的用户 UI 改动,清单对应当前内容,不回退到 HEAD。登录 scoped 私有主题不意味着全局主题已经变更;Navbar 和其他页面仍复用全局 Element 主题/语言功能。
|
|
|
+
|
|
|
+## 8. 清单验收与待确认项
|
|
|
+
|
|
|
+- **[已确认]** 静态路由 90 条全部列出;70 条视图引用可解析到 65 个实际文件。
|
|
|
+- **[已确认]** views 下 114 个 Vue 文件均由“路由表 + 无独立路由表 + 未静态接入表”覆盖。不存在把 /components 路由名直接拼成文件名的假定。
|
|
|
+- **[已确认]** 当前 13 个本地 API 模块的命名导入静态检查未发现缺失导出;不代表动态请求或第三方组件可用。
|
|
|
+- **[待确认]** 真实 menu、接口 payload、环境、授权角色、匿名/登录直达、缓存缺失、功能保留清单。
|
|
|
+- **[待确认]** UI 截图与 320/375/768/1024/1440px、短视口、多语言、键盘、弹层、支付/上传/下载回归。
|
|
|
+- **[待确认]** 正式构建;当前单元测试仅 4 工具套件通过,2 组件套件加载失败;完整结果见项目分析。没有运行真实登录或任何写接口。
|
|
|
+
|
|
|
+本轮只新增本清单和配套分析文档;没有修改路由、页面、公共组件、样式、依赖、配置或已有文档。
|
|
|
+
|