diff --git a/docs/task/197-删除已停用同步店铺.md b/docs/task/197-删除已停用同步店铺.md new file mode 100644 index 0000000..f95e1a5 --- /dev/null +++ b/docs/task/197-删除已停用同步店铺.md @@ -0,0 +1,60 @@ +# 197 Admin:允许删除已停用的顺运宝同步店铺 + +- 类型:需求 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 / 顺运宝同步店铺准入 +- 状态:已完成 +- 日期:2026-08-13 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/197 + +## 背景与目标 + +#196 支持店铺新增、停用和重新启用,但错误名称会永久留在管理列表。本任务允许 +管理员永久删除已停用配置,同时确保启用店铺及历史业务数据不会被误删。 + +## 最终方案 + +- 仅在已停用店铺行显示危险样式的“删除”按钮。 +- 删除使用管理员路由、POST、CSRF,并复用现有 `data-confirm-submit` 二次确认; + 文案包含店铺名称,明确历史货运单和同步记录不会删除。 +- Repository 使用 `shop_id=? AND enabled=0` 参数化条件删除。即使提交后店铺被并发 + 重新启用,删除也不会命中。 +- 服务端对空编号、店铺不存在和仍启用返回可操作错误,不能依赖页面隐藏按钮。 +- 删除只影响 `syb_allowed_shops` 配置行;同名店铺之后可以重新新增。 +- 未修改数据库结构、同步规则、历史货运单、同步记录或 Client 接口。 + +## 改了哪些 + +- `admin/repository/syb.go`:增加停用状态条件删除。 +- `admin/service/syb_allowed_shop.go`:增加管理员删除业务校验。 +- `admin/handler/web/web.go`、`syb_shop.go`:增加管理员 POST 删除路由及反馈。 +- `admin/templates/syb/shops.html`:停用项删除按钮和带名称的二次确认。 +- `admin/service/syb_allowed_shop_test.go`、`admin/main_test.go`:服务端门禁、历史数据、 + 重建同名店铺、模板和路由回归。 +- `docs/admin/03-data-model.md`、`05-ui-specification.md`:更新数据和交互约束。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 启用店铺不显示删除入口,伪造请求也拒绝 | 通过 | +| 停用店铺显示删除按钮并二次确认店铺名称 | 通过 | +| 删除路由仅管理员可用并受 CSRF 保护 | 通过 | +| 删除后不再显示且可重新新增同名店铺 | 通过 | +| 历史货运单和同步记录保持不变 | 通过 | +| 并发重新启用不会被条件删除 | 通过(SQL 条件和自动化测试) | +| 固定 Go 1.23.0 build、vet、test | 通过 | + +## 测试 + +- 执行的命令: + - `$env:GOTOOLCHAIN="go1.23.0"; go vet ./...; go build ./...; go test ./... -count=1` + - `go test ./service ./... -count=1` + - `git diff --check` +- 结果:全部通过,功能提交为 `761058e`。 +- **没验证到的部分**:未启动浏览器人工点击确认/取消;未用真实网页登录采购员 + 请求删除路由;未部署生产。该任务没有数据库结构变更,不需要新增迁移演练。 + +## 相关提交 + +- `761058e` 删除已停用的同步店铺