# 2026-04-13 ## ops2 项目采购模块改造 为采购订单增加状态管理功能,涉及前后端多处改动: ### 后端改动 - `TabPurchaseOrder` 新增 `OrderStatus` 字段(pending/ordered/arrived/received),默认 pending - `TabPurchaseOrder` 新增 `UpdatedAt` 字段(GORM autoUpdateTime) - `TabPurchaseCosts` 新增 `CurrencyType`(1-CNY 2-MOP 3-HKD 4-USD)和 `CostType`(1-单价 2-运费) - 新表 `TabPurchaseCommit`:记录每次状态变更(Action: create/create_status)、旧状态、新状态、评论、操作IP - `CostItem` 前端结构体 `CurrencyType` 和 `Type` 从 string 改为 int(与数据库一致) - `/purchase/getorder` 新增返回 `commits`(状态变更记录列表) - `/purchase/updatestatus` 新接口:更新订单状态,可选附带 comment,写入 TabPurchaseCommit + TabPurchaseLog - `addorder` 创建时自动写入第一条 commit(状态 pending) - 状态值白名单校验:只允许 pending/ordered/arrived/received ### 前端改动 - `api/purchase.js` 新增 `updateOrderStatus(id, status, comment)` 方法 - `PurchaseList.vue` 列表页去掉假数据列,显示真实标题/备注/创建时间,状态用彩色标签(黄-待处理、蓝-已下单、紫-已到达、绿-已收件) - `ShowOrder.vue` 详情页新增:状态快捷切换按钮(四个状态一键切换)、状态变更 commit 历史时间线(竖排列表,含状态标签+时间+评论) - i18n 同步新增 8 个翻译 key ### 注意事项 - 重启后端后 GORM AutoMigrate 会自动新增字段和表,无需手动 SQL - 前端 `CostItem` 的 CurrencyType/Type 改为 int,与后端一致