Skip to content

路由、菜单与权限

静态路由

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_hideY 时不显示菜单
is_iframe / linkiframe 页面及目标地址
fixed_tabY 时作为固定页签;首个固定页签也作为首页跳转目标
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');表格操作列使用 useRowActionsauth 字段。

v-auth 无权限时通过样式隐藏元素,并能在路由变化后恢复。它不是安全边界,后端必须再次校验。

外链与 iframe

外部 URL 可能带来钓鱼、点击劫持和数据外泄风险。建议后端只下发允许域名,前端增加 URL 协议与域名校验,并通过 CSP 限制 frame-srcconnect-src 等来源。

基于 MIT License 开源