diff --git a/admin/main_test.go b/admin/main_test.go index 368a2c7..3c32e57 100644 --- a/admin/main_test.go +++ b/admin/main_test.go @@ -36,6 +36,35 @@ func TestPaginationCSS_桌面右对齐且窄窗口不遮挡内容(t *testing.T) } } +func TestPurchaseModal_未选规格行保持隐藏且不提交(t *testing.T) { + files := map[string][]string{ + "static/css/app.css": { + ".purchase-confirm-row[hidden] { display: none; }", + }, + "templates/syb/list.html": { + `class="purchase-confirm-row" data-purchase-row="{{.SybID}}" hidden`, + `name="mapping_option_key" value="{{.MappingOptionKey}}" disabled`, + `name="context_version" value="{{.ContextVersion}}" disabled`, + `name="max_price_yuan" min="0.01" step="0.01" value="{{.DefaultMaxPrice}}" required disabled`, + }, + "static/js/app.js": { + "row.hidden = !enabled;", + "input.disabled = !enabled;", + }, + } + for path, wants := range files { + content, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + for _, want := range wants { + if !strings.Contains(string(content), want) { + t.Errorf("%s 缺少采购弹窗回归约束 %q", path, want) + } + } + } +} + func TestTemplatesAndRoutesCanBeBuiltWithoutDatabaseConnection(t *testing.T) { if _, err := newRouter(nil); err != nil { t.Fatalf("模板或路由组装失败: %v", err) diff --git a/admin/static/css/app.css b/admin/static/css/app.css index a9cc127..af82105 100644 --- a/admin/static/css/app.css +++ b/admin/static/css/app.css @@ -308,6 +308,7 @@ tr.empty small { color: #aaa; } border: 1px solid #d9dde3; border-radius: 6px; } +.purchase-confirm-row[hidden] { display: none; } .purchase-confirm-row label { display: grid; gap: 6px; } .execution-mode-fieldset { display: grid; diff --git a/docs/admin/05-ui-specification.md b/docs/admin/05-ui-specification.md index f05130b..e9ed5f8 100644 --- a/docs/admin/05-ui-specification.md +++ b/docs/admin/05-ui-specification.md @@ -563,7 +563,8 @@ HTML 片段,只替换弹窗内部的表格、总数和分页。主货运单表 每条确认行同时显示顺运宝规格原文和当前映射的唯一 PDD 规格组合。价格输入只对应该 组合中的选定颜色,不显示同一 PDD 商品的其他颜色或价格。批量创建时每条顺运宝明细 各自显示一个选定组合和一个价格输入;映射或商品上下文在弹窗打开后变化时,服务端拒绝 -旧提交并要求刷新。 +旧提交并要求刷新。未勾选的确认行必须同时保持 `hidden` 和 input `disabled`;采购行的 +grid 样式不得覆盖 `hidden`,关闭后改变勾选再打开也不得残留上一次的确认行。 `[必须]` 校验不过的**不要静默跳过**,要列出来告诉操作员缺什么: