fix(admin): 微收口(注释/角色防御/dev 约定文档/husky 移除)
- routesAlias.ts 修复 clean:dev 打坏的块注释 - system-manage.ts menus/simple 标注死代码(backend 模式前置条件) - /me 映射非 staff roles 兜底 R_USER,防空数组跳过菜单角色过滤 - 新增 README-dev.md:config-object 签名/URL 无 /api 前缀/Bearer 归映射层/v-html 红线 - package.json 删 husky prepare(防 pnpm install 改写 core.hooksPath) Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
# admin 开发约定(Task 18-21 执行者必读)
|
||||
|
||||
基于 art-design-pro 模板的请求层适配约定,写业务前先读完本文件。
|
||||
|
||||
1. **request 是 config-object 签名**:`request.get<T>({ url, params })`,不是 axios 原生 `(url, config)`。
|
||||
2. **URL 不带 `/api` 前缀**:`VITE_API_URL=/api` 已作为 baseURL,写 `/admin/auth/me` 即请求 `/api/admin/auth/me`;带 `/api` 会变成 `/api/api/...`。
|
||||
3. **Bearer 不用业务层拼**:token 映射层已存 `Bearer <access>`,拦截器原样设置 Authorization;业务代码只管调 `request.*`。
|
||||
4. **v-html 红线**:业务代码(`src/views/tracker/**`、`src/api/**`)禁用 v-html;也不得向模板内置 v-html 组件(ArtTextScroll / ThemeSvg / v-highlight)传访客来源数据(UTM、referrer、UA 等用户可控字段)。
|
||||
@@ -15,7 +15,6 @@
|
||||
"lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}\"",
|
||||
"lint:stylelint": "stylelint \"**/*.{css,scss,vue}\" --fix",
|
||||
"lint:lint-staged": "lint-staged",
|
||||
"prepare": "husky",
|
||||
"commit": "git-cz",
|
||||
"clean:dev": "tsx scripts/clean-dev.ts"
|
||||
},
|
||||
|
||||
@@ -26,7 +26,8 @@ export async function fetchLogin(params: Api.Auth.LoginParams) {
|
||||
*
|
||||
* 后端仅返回 {username, is_admin},映射为模板 UserInfo 结构:
|
||||
* - userName ← username;email/avatar 留空(模板有静态兜底头像)
|
||||
* - roles ← is_admin ? ['R_ADMIN'] : [](菜单按 meta.roles 过滤,M1 无角色路由)
|
||||
* - roles ← is_admin ? ['R_ADMIN'] : ['R_USER'](空数组会跳过菜单角色过滤,
|
||||
* 非 staff 用户将看到全部菜单入口,故兜底 R_USER)
|
||||
* - buttons ← [](按钮级权限占位);userId ← 0(仅用于多用户工作台清理判断)
|
||||
*/
|
||||
export async function fetchGetUserInfo(): Promise<Api.Auth.UserInfo> {
|
||||
@@ -35,7 +36,7 @@ export async function fetchGetUserInfo(): Promise<Api.Auth.UserInfo> {
|
||||
})
|
||||
return {
|
||||
buttons: [],
|
||||
roles: data.is_admin ? ['R_ADMIN'] : [],
|
||||
roles: data.is_admin ? ['R_ADMIN'] : ['R_USER'],
|
||||
userId: 0,
|
||||
userName: data.username,
|
||||
email: ''
|
||||
|
||||
@@ -18,6 +18,7 @@ export function fetchGetRoleList(params: Api.SystemManage.RoleSearchParams) {
|
||||
}
|
||||
|
||||
// 获取菜单列表
|
||||
// 注意:后端无此端点,frontend 模式下死代码;切 backend 模式前需先实现
|
||||
export function fetchGetMenuList() {
|
||||
return request.get<AppRouteRecord[]>({
|
||||
url: '/v3/system/menus/simple'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* 公共路由别名
|
||||
# 存放系统级公共路由路径,如布局容器、登录页等
|
||||
* 存放系统级公共路由路径,如布局容器、登录页等
|
||||
*/
|
||||
export enum RoutesAlias {
|
||||
Layout = '/index/index', // 布局容器
|
||||
|
||||
Reference in New Issue
Block a user