# PC 管理端(frontend-pc) 深学在线 · 管理端。**纯 Vue 3 + Naive UI**(2026-10 从 Gi Admin Pro + Arco Design Vue 重搭)。 > 上一版这份 README 是 Gi Admin Pro 的模板原文(含它的演示账号 `admin / 123456`),已整体替换 —— > 那个账号在本项目里**不存在**。 ## 技术栈 | 项 | 值 | |---|---| | 框架 | Vue 3.5 + TypeScript + Vite 7 | | UI | **Naive UI 2.42**(无 Arco / Gi 依赖) | | 状态 | Pinia(`pinia-plugin-persistedstate`) | | 请求 | axios(`src/utils/http.ts` 统一封装) | | 样式 | SCSS(**Stylelint 已移除**,只有 ESLint) | ## 常用命令 ```bash pnpm install pnpm dev # → http://localhost:5173(/api 代理到 http://localhost:8080) pnpm build # 生产构建 → dist/ pnpm typecheck # vue-tsc(当前 0 错) pnpm lint # ESLint(@antfu/eslint-config) ``` - **没有 Mock**:`pnpm dev` 把 `/api` 代理到后端 8080 → **后端不起着就没有数据** - 路径别名:`@` → `src/` ## 演示账号(本地 dev) | 账号 | 密码 | 租户码 | 角色 | |---|---|---|---| | `admin` | `Admin@123` | `demo` | 学校管理员 | | `platform` | `Platform@123` | — | 平台运营 | > 账号在多个单位下重名时,登录页才会出现「租户码」输入框(服务端返回 `40012`)。 > 一键登录脚本:`python scripts/dev-login.py`。 ## 目录 ``` src/ ├── apis/xt/ 接口模块(按业务域分文件)+ types.ts ├── composables/ pagination.ts(列表页分页器统一参数) ├── config/ xt-routes.ts(业务菜单表:菜单键 ↔ 路由 ↔ 视图 ↔ 分组) ├── icons/ AppIcon.vue + icon-data.ts(由 scripts/extract-pc-icons.py 生成) ├── layout/ AppSider / AppHeader / index.vue ├── router/ 本地菜单表按后端 menuKeys 过滤后注册 ├── stores/ user.ts / acting-tenant.ts / app.ts ├── styles/ index.scss(只放跨页面样式) ├── utils/ http.ts / naive.ts / tag.ts / format.ts / auth.ts / rsa.ts └── views/ 页面(每个菜单一个目录) ``` ## 写代码前必读 **`AGENTS.md` 与 `.agents/`**(本目录内的规范,已按 Naive UI 重写)。四条最容易写错的: 1. **没有 auto-import** —— 组件与 API 全部显式 `import`; 2. **没有 `v-hasPerm`** —— 权限判断写 `useUserStore().has('码')`,字符串与后端 `PermissionDef` 逐字一致; 3. **`n-tag` 的 `type` 必须过 `@/utils/tag.ts`** —— Arco 色词直接透传会静默变灰; 4. **图标集升级后重跑** `scripts/extract-pc-icons.py` —— 缺图标是空占位、不报错。