# 气站合同用户权限修复操作日志 操作时间:2026-08-18 操作类型:扩展与修复 影响模块:气站配送合同、平台用户服务关系、气站资源列表 ## 操作前状态 - 气站合同列表通过本站用户详情接口补载签约用户名称。 - 合同用户已不属于当前气站时,名称补载返回参数错误并显示“名称加载失败”。 - 总后台可在存在未完成履约业务时变更或归档用户服务关系。 - 合同用户转出后,编辑、启用、续签、气瓶绑定和订单创建缺少统一阻断。 ## 具体操作 - 合同列表与详情按合同已保存的全局用户主键读取当前业务名称,并随合同响应返回。 - 名称读取始终受合同所属气站范围保护,不新增平台用户全集查询能力。 - 新建合同和订单候选继续限定为与合同气站存在有效服务关系的用户。 - 签约用户转出后,仅保留合同查看和终止能力,阻止其他合同变更及继续履约。 - 总后台变更、归档服务关系前检查生效合同、未完成订单和未关闭工单。 - 未新增字段、未修改表结构、未执行历史数据回填。 - 合同中的用户名称可进入只读账户详情;详情接口必须验证当前气站确实存在引用该用户的合同。 - 合同范围只读详情返回用户基础主档和合同保存的本站配送点,不返回地址、钱包或其他气站服务关系,且前端隐藏编辑、重置密码和全部账户动作入口。 ## 操作后状态 - 气站合同列表直接显示签约用户名称,不再请求不属于本站的用户详情。 - 历史合同可以继续识别签约用户;用户记录不存在时显示“签约用户记录已失效”。 - 用户转出后的合同不可继续编辑或履约,仍允许查看和终止。 - 总后台无法通过直接更新、状态归档或删除入口绕过转移阻断。 - 总后台分配合同中的签约用户即使不属于当前气站,也可从合同查看包含该合同配送点的只读账户详情;普通本站用户列表范围保持不变。 ## 代码变更 - `backend/api/internal/logic/platform/gasorder/contract_party_display.go`:提供合同签约用户名称和服务关系状态查询。 - `backend/api/internal/logic/platform/gasorder/gasorder.go`:统一合同、绑定、续签和订单创建的用户归属校验。 - `backend/api/internal/logic/gas/gasorder.go`:返回当前气站合同的签约用户显示信息。 - `backend/api/internal/logic/gas/scope.go`、`user.go`:增加当前气站合同范围用户的只读详情、合同配送点上下文及头像鉴权,写接口仍要求有效服务关系。 - `backend/api/internal/logic/gas/user_test.go`:验证合同用户查询同时受用户标识和当前气站约束。 - `backend/api/internal/logic/platform/user/relation.go`:增加用户跨气站转移和归档阻断。 - `backend/api/internal/routers/platform.go`:为服务关系状态和归档注册业务专用处理器。 - `frontend/gas_admin/src/views/shared/resource-list-field-display.ts`:优先使用合同接口返回的用户名称。 - `frontend/gas_admin/src/views/resource/use-resource-relations.ts`:已有范围内名称时不再补载关联用户。 - `frontend/gas_admin/src/api/resource-page-rules.ts`、`ResourceRecordPage.vue`:限制用户转出后的合同编辑和动作。 - `frontend/gas_admin/src/api/resource-page-rules.ts`、`resource-display.ts`、`ResourceRecordPage.vue`、`CrudListPage.vue`:传递合同上下文、标记合同范围只读用户,并隐藏编辑、钱包和账户动作。 - `frontend/platform_admin/src` 对应资源页面:同步合同用户名称与转出后的动作限制,保持总后台一致。 ## 验证结果 - `go test ./...`:通过,覆盖全部后端包。 - 合同签约用户展示查询与候选范围测试:通过。 - 用户转移的生效合同、未完成订单、未关闭工单及无阻断业务测试:通过。 - `pnpm run type:check`:通过。 - `pnpm run contract:check`:通过,20 个资源一致。 - `pnpm run resource-pages:check`:通过,详情 20、新建 11、编辑 8。 - `pnpm run build`:通过。 - 平台总后台 `pnpm run type:check`、`pnpm run resource-pages:check`、`pnpm run build`:通过。 - 气站合同范围用户详情查询测试:通过;普通服务关系用户详情与写接口范围不变。 ## 风险评估 - 名称查询只能从当前合同记录到达一个签约用户,不会扩大气站可枚举的用户范围。 - 历史合同没有名称快照,按“不修改数据库”的约束显示用户当前名称;记录不存在时使用明确失效文案。 - 新增阻断只影响跨气站转移或解除关系,不影响同一气站内调整配送点和服务人员。 - 合同范围详情仅扩展按合同可达的只读路径,不改变用户列表范围;地址、钱包和所有写操作继续要求当前有效服务关系。 - 用户只读详情不展示合同履约内部字段“签约用户仍属当前气站”,统一以“账户权限:仅查看当前合同关联资料”说明访问边界,避免与合同、配送点的气站归属混淆。 - 气站订单列表由订单接口按订单保存的用户主键直接返回用户名称;从订单进入用户详情时携带订单关联合同上下文,不再依赖聚合用户详情补载名称。