4.9 KiB
4.9 KiB
前端开发指南(TDesign starter 深度说明)
2026-08-20 · 基于 apps/web 实际代码(starter 0.3.1)· 配套 docs/page-wireframes.md 使用。
1. 模板事实清单(实测)
| 项 | 事实 |
|---|---|
| 技术 | React 18.2 + Vite 2.9 + TS 4.8 + React Router 6 + Redux Toolkit + axios |
| 组件库 | tdesign-react 1.15 + tdesign-icons-react 0.6(MIT,可商用) |
| 目录 | src/pages(页面) / src/router(路由=菜单) / src/layouts(布局) / src/services(接口) / src/modules(redux) / src/configs(host.ts 环境) / mock(演示数据) |
| 模板页 | List/Base(表格列表) List/Card(卡片) Form/Base(表单) Form/Step(分步向导) Detail/Base(详情) Result(结果) User(成员) Dashboard(仪表盘) Login |
| 环境 | npm run dev(真实API) / dev:mock(mock数据); host.ts 分 mock/development/test/release/site |
| 过渡 | 无路由切换动画;仅零散 hover transition 与组件自带动效(见 §4) |
2. 关键机制(对接方式)
- 路由即菜单:src/router/modules/ 每个 .ts 一个顶级菜单;meta{title, Icon, hidden, single};children 即子菜单;isFullPage=true 为全屏页(登录页)。
- 布局:src/layouts/components/ AppLayout(整体) + Header + Menu + Footer + Page;新页面只需加路由+页面文件。
- 接口:src/services 为 axios 封装示例;把 src/configs/host.ts 的 development.API 指向 Go 服务器(如 http://localhost:8080)。
- 状态:Redux Toolkit(modules/user 存登录态);实时状态用原生 WebSocket(/ws,JWT 鉴权),事件 task./challenge./notification.*。
- mock 移除:删除 mock 目录与 vite-plugin-mock 使用,全部走真实 API。
3. 组件清单与场景映射
| TDesign 组件 | 适用场景 | 本项目页面 |
|---|---|---|
| Table + Tag + Pagination + Popconfirm | 数据列表/状态/二次确认 | 任务列表/素材/账号台账/成员/审计/租户/Agent总览 |
| Form + Input + Textarea + Select + Checkbox + Radio + Switch | 表单 | 登录/新建发布/设置/成员邀请 |
| Steps | 分步向导 | 新建发布四步 |
| DatePicker / DateRangePicker | 时间选择 | 定时发布/筛选 |
| Calendar | 月历 | 排期日历(若 1.15 无此组件则用卡片网格自绘,需 D6 前验证) |
| Upload + Progress + ImageViewer | 上传/预览 | 素材库 |
| Dialog | 模态弹窗 | 绑定扫码/验证码输入/邀请 |
| Drawer | 侧滑详情 | 任务详情/审核预览 |
| Timeline | 时间线 | 任务事件流 |
| Badge + Tag | 状态角标 | 绑定状态/任务状态/通知 |
| Message + Notification + Loading + Skeleton | 全局反馈 | 全站 |
| Tabs | 分栏 | 审核分平台预览/设置子页 |
| 二维码 | TDesign 无此组件 | 唯一新增依赖:qrcode.react(token 本地渲染) |
4. 过渡效果说明(结论:本期不做页面动画)
- starter 本身没有路由切换动画(实测仅 hover 背景/颜色 transition 与 Tree 组件动效)。
- TDesign 组件自带动效,直接使用:Drawer 滑入、Dialog 渐入、Message/Notification 渐入渐出、Tabs 下划线滑动、Loading 旋转。
- 约定:页面级不做过渡动画(保持响应快、实现简单);若后续需要统一 fade,用 TDesign 主题变量 --td-anim-duration-base 统一加,本期不排。
5. 直接套用规范(每个页面怎么做)
| 我们的页面 | 复制哪个模板 | 改动点 |
|---|---|---|
| 登录页 | pages/Login | 去第三方登录/注册,接 /api/auth/login |
| 仪表盘 | pages/Dashboard/Base | 替换统计卡片与最近任务表格 |
| 任务列表/账号台账/成员/审计 | pages/List/Base | 改 columns、操作列、接 API |
| 素材库 | pages/List/Card | 卡片项=素材缩略图+操作 |
| 新建发布 | pages/Form/Step | 四步:素材→平台账号→内容→定时提交 |
| 任务详情 | pages/Detail/Base → Drawer 化 | Timeline 事件流 + 回执截图 |
| 审核中心 | pages/List/Base + Drawer | 预览用 Tabs 分平台 |
| 设置 | pages/Form/Base + Tabs | 资料/安全/通知渠道/Agent设备 |
| admin 两页 | pages/List/Base | /admin 路由域 + 角色守卫 |
6. 菜单与路由改造清单(D1 完成)
- router/modules 改为:dashboard(工作台)、publish(发布管理: 任务列表/新建发布/排期日历)、material(素材库)、account(账号管理)、review(审核中心)、challenge(通知与挑战)、member(成员与权限)、setting(设置)、audit(审计日志)、admin(平台管理域)。
- 任务详情为 hidden 路由(不进菜单)。
- 权限:utils 增 auth.ts(角色→菜单过滤 + 路由守卫),角色:admin/reviewer/operator/platform_admin。
7. 前后端联调约定
- REST:/api/*,Header Authorization: Bearer ;401 自动 refresh 重试一次。
- WS:原生 WebSocket,连接 /ws?token=;心跳由服务端协议统一(10s/25s)。
- 分页约定:{ list, total, page, pageSize };错误码约定:业务码 + message,前端 Message 提示。