3.0 KiB
3.0 KiB
项目文档:配送点合同附件管理 v1.0
1. 项目概述
配送点管理端将配送合同的“附件地址”文本字段升级为受控 PDF 附件流程。数据库继续使用 gasorder_contract.file_uri 保存服务端受控路径,但浏览器只接收附件状态、签名收据和文件 Blob,不读取或提交内部路径。
技术栈:Go、Gin、GORM、Vue 3、TypeScript、Arco Design。运行时依赖现有合同附件目录及服务端签名密钥。
2. 目录结构
backend/api/internal/
├── logic/delivery/order.go # 配送点范围包装、列表脱敏
├── logic/platform/gasorder/ # 复用 PDF 校验、收据和文件服务
└── routers/delivery.go # 上传、清理、读取路由
frontend/delivery_admin/src/
├── api/contract-attachment.ts # 附件 HTTP 客户端
├── views/resource/ContractAttachmentField.vue
├── views/resource/use-contract-attachment.ts
├── views/resource/ResourceRecordPage.vue # 详情、表单和保存编排
└── views/shared/ResourceListPage.vue # 脱敏附件状态入口
3. 核心流程
- 新建或草稿编辑页选择单个 PDF,前端预检扩展名、MIME 和 10 MiB 上限。
- 点击保存后上传至临时目录,服务端校验真实 MIME、
%PDF-文件头和%%EOF,并签发绑定当前操作人的 30 分钟收据。 - 合同创建或更新提交
attachment_receipt;替换或移除同时提交attachment_version,避免并发覆盖。 - 保存失败时调用清理接口;取消编辑不会改变原附件。
- 预览和下载只接受合同 identity,经当前气站、配送点和 JWT 范围校验后返回
private, no-store的 PDF。
4. 安全与业务规则
- 合同列表响应删除
file_uri,只返回has_attachment。 - 详情响应使用
attachment元数据,旧路径异常时显示“需重新上传”。 - 只有草稿合同可上传、替换或移除;启用前必须存在有效 PDF。
- 跨配送点读取统一不可访问,不返回文件路径或磁盘信息。
- 新版配送点管理端始终删除载荷中的
file_uri;后端旧字段仅为兼容历史调用保留。
5. 接口
POST /gasorder_contract/attachment/upload:上传临时 PDF。POST /gasorder_contract/attachment/cleanup:按签名清理凭证删除临时文件。GET /gasorder_contract/:identity/attachment:鉴权预览或下载正式附件。
6. 维护与验证
修改附件流程后应运行配送逻辑、平台附件服务和路由测试,以及配送前端 type:check、resource-pages:check、contract:check 和生产构建。不得恢复普通 URI 输入框或 <a href="file_uri"> 直链。
7. 变更记录
- v1.0(2026-08-22):新增配送域附件接口、列表脱敏、详情预览下载及草稿上传替换移除。
- 修正《项目文档_配送点独立资源页面_v1.0》中 2026-08-22 新增的“文本 URI”边界,使其重新符合 2026-07-30 原始敏感数据保护基线。