5b877451eb
旧模板的 193 个文件整体删除,换成纯 Vue 3.5 + Naive UI 2.42 的树。
- 去掉 auto-import(组件与 API 全显式 import)、v-hasPerm(改 user.has('码'),全库 8 处)、
Stylelint;n-tag 的 type 统一过 utils/tag.ts 转换(Arco 色词直接透传会静默变灰)
- 图标改为构建期抽取:scripts/extract-pc-icons.py -> icons/icon-data.ts(37 个),
内网离线部署不会白屏
- 重搭后修掉 6 类"编译 / lint / typecheck 全绿、界面上就是坏的"故障:
① NGrid 的 cols 写成像素值(不是断点名 -> 永远只 1 列,工作台因此错乱)
② n-tab-pane 用 tab 属性(只渲染空注释节点,整排 tab 一个字都不显示)
③ 漏 import 被当未知自定义元素(样式整块丢) ④ .n-card__content 类名不存在
(高度链第一环失效,表格行在 DOM 里但屏幕上没有) ⑤ 填报单状态映射错位一格
⑥ 有标题的卡片没有上内边距(naive 的 padding-top 只给"内容区是长子"的卡片)
- 卡片式版面提成全局基线:styles/index.scss 的 xt-* 令牌 + .page-card / .toolbar /
.section-title,页面只引用、不再各写一套
- 品牌:改名「深学在线」,文字标换成几何标(方 = 卷宗 / 环 = 在线,不用文字字形);
index.html 的页签图标从 404 的 /favicon.ico 改指真实存在的 /favicon.svg
65 lines
2.7 KiB
Markdown
65 lines
2.7 KiB
Markdown
# 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` —— 缺图标是空占位、不报错。
|