feat(rock): 发货记录表格新增时间与备注列并支持上报失效联动

- 做了什么:
  1. 数据库新增 013_rock_tokens_remark.sql 迁移,rock_tokens 表补充 remark 字段并在 ListTokens 中支持备注模糊检索;
  2. 后端扩展 UpdateTokenRemark、MarkTokenAbnormal 接口,同时优化 ResetMismatchToken 支持 mismatch 与 abnormal 状态的解冻重置;
  3. 前端 RockTokenTable 新增「流转时间」列(入库/绑错/发货/绑定/提货)与「备注」列(TokenRemarkCell 浮窗快捷预设选择与自定义输入);
  4. 快捷选择「已上报」或点击「上报失效」自动将链接标记为 abnormal 作废,从可用库存池中剔除,防止被新订单领走;
  5. 优化操作列与顶部筛选栏:mismatch 增加「上报失效」与警示重置;abnormal 状态明确显示已失效并提供强制恢复;筛选栏新增「已上报失效」Tab。

- 为什么:
  解决绑定错误上报 0868 上游后无法记录备注、且原「解冻重置」容易误将已作废卡密放回可用库存池导致后续订单报错的问题。

- 验证方式:
  1. 后端单元测试 TestRockService_TokenRemarkAndAbnormal 与 TestRock 测试集通过;
  2. make fmt、go vet 通过;
  3. 前端 oxlint 检查通过 (0 errors, 0 warnings),npm run build 生产构建通过。
This commit is contained in:
yml2213
2026-10-08 20:13:25 +08:00
parent fcbd7715c7
commit e293cebaf5
13 changed files with 656 additions and 15 deletions
+52
View File
@@ -169,3 +169,55 @@ func (h *RockHandler) ReleaseToken(c *gin.Context) {
}
response.OK(c, gin.H{"message": "已释放回可用库存,该提货链接可以再次分配"})
}
type updateRemarkReq struct {
Remark string `json:"remark"`
Status string `json:"status"` // 可选:比如 abnormal
}
// UpdateRemark 更新 Token 备注并可联动更新状态
func (h *RockHandler) UpdateRemark(c *gin.Context) {
idUint, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil {
response.BadRequest(c, "无效的 Token ID")
return
}
var req updateRemarkReq
if err := c.ShouldBindJSON(&req); err != nil {
response.BadRequest(c, "参数解析失败")
return
}
token, err := h.rockSvc.UpdateTokenRemark(c.Request.Context(), uint(idUint), req.Remark, req.Status)
if err != nil {
response.BadRequest(c, err.Error())
return
}
response.OK(c, gin.H{
"message": "备注更新成功",
"token": token,
})
}
type markAbnormalReq struct {
Remark string `json:"remark"`
}
// MarkAbnormal 快捷标记为上报失效(作废,不可再用)
func (h *RockHandler) MarkAbnormal(c *gin.Context) {
idUint, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil {
response.BadRequest(c, "无效的 Token ID")
return
}
var req markAbnormalReq
_ = c.ShouldBindJSON(&req)
token, err := h.rockSvc.MarkTokenAbnormal(c.Request.Context(), uint(idUint), req.Remark)
if err != nil {
response.BadRequest(c, err.Error())
return
}
response.OK(c, gin.H{
"message": "已标记为上报失效,该提货链接已作废",
"token": token,
})
}