路由、菜单与权限
静态路由
src/router/routes/staticRoutes.ts 中的路由在应用启动时注册,默认不要求登录。当前包含登录、测试与异常页。公开部署前建议删除 /test,并重新评估哪些异常页需要匿名访问。
动态路由
应用检测到 Token 后调用用户详情、菜单和角色接口。stores/user.ts 将扁平菜单转换为树并注册为 Layout 子路由。页面组件由以下 glob 懒加载:
ts
import.meta.glob(['@/views/**/*.vue', '!@/views/layout/**'])菜单字段:
| 字段 | 说明 |
|---|---|
id / parent_id | 构建菜单树 |
path | 浏览器路由路径 |
name | 唯一路由名 |
title | 菜单与页面标题 |
component | 相对 src/views/ 的 Vue 文件路径 |
redirect | 可选重定向 |
icon | 全局图标组件名 |
is_hide | Y 时不显示菜单 |
is_iframe / link | iframe 页面及目标地址 |
fixed_tab | Y 时作为固定页签;首个固定页签也作为首页跳转目标 |
action_list | 当前页面允许的操作码数组 |
路由守卫
- 切页前取消默认可取消的在途请求。
- 已登录访问
/login时跳回首页。 - 未登录访问未匹配路由时跳到登录页并保存 redirect。
- 已登录访问未知路由时显示 404。
- 根据页面标题与系统标题生成 document title。
- 按设置显示页面切换进度条。
按钮权限
vue
<n-button v-auth="'create'">新增</n-button>
<n-button v-auth="['update', 'delete']">编辑或删除权限</n-button>
<n-button v-auth="'UserList:export'">指定路由权限</n-button>对象形式支持一个或多个路由与操作码。脚本或渲染函数中使用 auth('delete');表格操作列使用 useRowActions 的 auth 字段。
v-auth 无权限时通过样式隐藏元素,并能在路由变化后恢复。它不是安全边界,后端必须再次校验。
外链与 iframe
外部 URL 可能带来钓鱼、点击劫持和数据外泄风险。建议后端只下发允许域名,前端增加 URL 协议与域名校验,并通过 CSP 限制 frame-src、connect-src 等来源。