Files
platforms/docs/项目文档_标准资源全页管理_v1.0.md
2026-08-11 14:28:13 +08:00

156 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 标准资源全页管理项目文档 v1.0
## 1. 项目概述
- 项目名称:平台总后台标准资源全页管理。
- 实施范围:仅端口 5173 的 `frontend/platform_admin`;气站后台、配送点后台和树形资源不在本次范围。
- 主要功能:把标准资源的新建、详情和编辑从列表抽屉迁移为独立 URL 页面,同时保留审核、归档、重置密码和流程流转等短操作。
- 技术栈Vue 3、TypeScript、Vue Router、Arco Design、Less、Go、Gin、GORM。
- 资源覆盖48 个资源契约中46 类标准列表资源提供详情页25 类提供新建页23 类提供编辑页;`ec_category``platform_menu` 两类树形资源保持树页面交互。
## 2. 页面与路由约定
标准资源路由由列表路由自动扩展,三类 URL 约定如下:
```text
列表路径/new # 新建页
列表路径/:identity # 详情页
列表路径/:identity/edit # 编辑页
```
- 路由元数据使用 `resource``recordMode``listRouteName` 驱动共享页面。
- 隐藏详情路由通过 `activeMenu` 保持来源菜单高亮。
- `return_to` 只接受站内绝对路径,防止开放重定向,并支持从钱包、机构账户等关联页面返回原记录。
- 旧的账户资料 `?mode=edit` 地址会转换到 `/edit`,保留已有书签兼容性。
- `/staff/add``/gasorder/create` 保留原业务入口名称,但直接渲染独立新建页。
## 3. 目录结构
```text
platforms/
├── frontend/platform_admin/
│ ├── scripts/
│ │ ├── check-backend-contract.mjs # 前后端资源契约检查
│ │ ├── check-resource-pages.mjs # 独立页面覆盖与抽屉残留检查
│ │ └── check-staff-organization-linkage.mjs # 工作人员组织联动检查
│ └── src/
│ ├── api/
│ │ ├── resource-page-rules.ts # 新建、编辑、只读和状态限制规则
│ │ ├── resource-navigation.ts # 页面地址与安全返回路径
│ │ ├── resource-display.ts # 字段、状态、金额和日期展示
│ │ └── resource-record-form.ts # 表单初始化与页面校验
│ ├── router/routes/modules/
│ │ ├── resource-route-builder.ts # 自动生成详情、新建和编辑路由
│ │ ├── dashboard-route.ts # 仪表盘路由分组
│ │ ├── finance-route.ts # 钱包与财务路由分组
│ │ └── platform.ts # 平台业务列表路由
│ └── views/
│ ├── resource/ # 共享全页详情、表单、动作、联动和摘要组件
│ └── shared/
│ ├── CrudListPage.vue # 列表与全页跳转入口
│ ├── ProtectedAvatarThumbnail.vue # 受控头像缩略图
│ └── protected-list-avatar-loader.ts # 懒加载、限流和当前页缓存
├── backend/api/internal/
│ ├── logic/platform/platform/account.go # 平台账户头像受控读取
│ └── routers/platform.go # 平台账户头像路由
└── docs/ # 同步需求、安全、项目与操作日志
```
## 4. 核心设计
### 4.1 显式页面规则
`resource-page-rules.ts` 按“资源 + 字段”声明能力,不通过字段名猜测更新权限:
- `identity` 永不进入创建或更新请求。
- 账户用户名、密码和业务创建编码按服务端 DTO 设为仅创建或只读。
- 工作人员资质所属人员、用户地址所属用户、服务关系所属用户、检修产品等归属字段在编辑时锁定;后端协议必传时只原样回传。
- 智能气阀归属变更使用专属业务动作并提交动作、原因和备注,不混入普通编辑。
- 配送合同仅草稿可编辑;已完成检修只允许维护备注;系统角色和平台角色权限按当前操作者锁定。
- 保存时只从允许更新字段构造请求,保存后重新读取详情校验服务端结果。
### 4.2 详情内容
- 详情页顶部只保留“列表 / 详情”面包屑、编辑和返回操作,不重复展示“详情资源名称”及说明文字。
- 页面网格从顶部按内容自然排列,详情卡片统一使用 `12px` 间距、圆角、标题高度和内容内边距,不随剩余视口高度拉伸。
- 普通资源使用响应式三列信息区;字段标签按文字自然宽度与值保持 `12px` 间距,长标签保持单行,避免短标签后留白或中文标签拆字换行;金额、状态、日期、布尔和关系字段统一格式化。
- 聚合详情中的数组继续以页签和表格展示,例如合同产品、修订记录和订单轨迹。
- 气站详情保留独立的紧凑启停区域;钱包归属资源保留钱包摘要和钱包详情入口,未开通钱包时显示单行紧凑提示。
- 工作人员、用户和平台账户保留头像、用户名、唯一标识、创建时间的账户摘要;气站、配送点和生产商账户仅展示紧凑文字摘要,不显示无数据能力的装饰头像。
- 工作人员、用户和平台账户列表将头像字段渲染为 32px 圆形缩略图。缩略图接近可视区时才通过单条受控接口读取,最多并发 6 个请求404 使用默认头像,权限、网络或解码异常回退默认头像并提供非阻断提示。列表刷新会清除当前页缓存,离开列表会取消请求并释放 Blob URL。
- 资源专属流程动作继续使用短模态框,危险动作显示风险提示,平台角色菜单分配保留专属适配。
### 4.3 新建与编辑
- 新建和编辑卡片铺满主内容区,卡片内部使用最大 `1440px` 的内容容器控制输入框行长;标题、字段和操作按钮保持同一左基线。
- 表单根据容器实际宽度响应:内容区达到约 `900px` 时使用双列,否则切换为单列;地址、备注、条款、参数和正文等长字段独占整行。
- 页面网格从顶部自然排列;新建、编辑页只保留“列表 / 当前操作”面包屑和右侧返回按钮,不重复展示操作大标题及说明文字;保存和取消按钮位于表单末尾,不吸附浏览器底部。
- 具备受控头像接口的账户继续保留头像和身份摘要;没有头像能力的账户在新建页直接进入表单,在编辑页使用紧凑文字摘要。
- 编辑页继续以禁用控件展示创建后不可修改字段,不额外显示说明条、字段旁提示或禁用占位文字;禁用字段不会进入更新请求。
- 必填、密码最短 6 位、关系选项和金额转换复用统一校验与负载构建逻辑。
- 页面检测表单和头像变更;返回、取消或浏览器路由离开时均提示是否放弃未保存内容。
- 机构“账户管理”不再打开二级模态框,而是进入带机构过滤条件的隐藏账户列表及其独立 CRUD 页面。
- 工作人员表单通过字段级可选配置启用气站与配送点联动:选择气站后只查询其直属配送点,先选普通配送点时自动回填所属气站;平台主管配送点仅在气站为空时可选。
- 更换或清空气站时只在已确认配送点不兼容后清空当前值;关联数据加载失败会保留现值,编辑记录不在列表前 100 条时按唯一标识补载。
- 配送点搜索始终携带当前气站条件,并以请求版本丢弃过期响应;未配置联动的用户服务关系、合同、产品和业务动作保持原行为。
### 4.4 安全与兼容
- 详情始终调用现有受保护资源接口,不使用列表缓存绕过脱敏和对象权限。
- 头像继续通过专用上传与受控读取接口;平台账户补充同等头像读取能力。列表缩略图不读取或暴露通用响应中的头像 URI只允许 `staff_account``user_account``platform_account` 三种已配置受控路由的资源启用。
- 平台账户普通编辑没有提交头像时保持原值,避免更新其他资料时意外清空头像。
- 气站和配送点账户的 `admin` 分别显示为“气站管理员”和“配送点管理员”,表单只读;历史未知编码保留并显示明确提示,不做自动权限迁移。
- 平台账户列表和详情使用动态平台角色名称,不直接暴露角色编码;无法匹配时显示“未知角色(原编码)”。
- `return_to` 拒绝协议相对地址和站外地址。
- 附件查看未接入:现有通用响应会剥离敏感 URI待受控下载接口完成后再扩展。
## 5. 行为变化
| 场景 | 变更前 | 变更后 |
| --- | --- | --- |
| 标准资源详情 | 列表内详情抽屉 | 独立详情 URL |
| 标准资源新建/编辑 | 共用表单抽屉 | 独立新建/编辑 URL |
| 账户管理 | 列表内二级模态框 | 隐藏账户列表与独立页面 |
| 审核、启停、删除 | 模态框或确认框 | 保持不变 |
| 树形资源 | 树页面抽屉 | 保持不变 |
| 返回来源 | 关闭抽屉 | 安全 `return_to` 返回 |
| 未保存修改 | 关闭即丢失 | 离开前二次确认 |
| 账户列表头像 | 普通文本列固定显示“-” | 当前可视记录显示受控圆形缩略图,无头像回退默认图 |
| 工作人员组织选择 | 气站和配送点独立选择,保存时才发现不匹配 | 双向联动、按气站筛选、切换时清除不兼容配送点 |
## 6. 验证方法
`frontend/platform_admin` 执行:
```powershell
npm.cmd run resource-pages:check
npm.cmd run staff-organization:check
npm.cmd run account-roles:check
npm.cmd run contract:check
npm.cmd run build
```
`backend/api` 执行:
```powershell
go test ./...
```
浏览器回归至少覆盖:标准列表进入详情、详情进入编辑、新建页、只读资源 404、钱包跳转、机构账户管理、未保存取消/确认、`/staff/add` 专用入口和小屏单列布局。
## 7. 维护指南
- 新增资源时先维护资源契约和 `resources.ts`,再在页面规则中显式声明可编辑字段。
- 服务端 Update DTO 变化时必须同步 `resource-page-rules.ts`,禁止直接把创建字段复用于更新。
- 新增详情专属内容时优先扩展详情区块或动作适配器,不把长流程塞回列表。
- 新增关联跳转时必须使用安全返回路径工具,不直接信任查询参数。
- 新增父子关联表单时必须显式配置 `relationLinkage`,不得按关联资源地址做全局推断;涉及强制业务规则时应同步增加后端专用校验。
- 新增标准资源后必须运行页面覆盖检查,保证详情、新建和编辑能力与资源模式一致。
## 8. 已知边界
- 气站后台 5175 和配送点后台 5176 尚未迁移。
- 树形资源仍保留现有抽屉与确认交互。
- 附件下载、预览和权限签名不在本次实现范围。
- 聚合子表在本地没有完整业务样本时主要依赖结构检查和生产构建,后续应补充固定测试数据的端到端用例。