feat: 可扩展档案模式框架 + 内置 3C(电子) 模式
- 新增 category.archive_kind 与 kind_field 字段模板表(迁移 0010) - 种子 electronics 字段模板 + 3C 品类树(手机/笔记本/平板等) - 后端按档案模式动态计算完整度/合格:食品沿用 food_detail, 其它模式走 product.attributes + kind_field - 新增 GET /api/kind-fields?kind= 接口 - 后台编辑页按品类模式动态渲染规格参数表单 - 公开详情页/接口输出带标签的规格表 Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
@@ -84,6 +84,7 @@ func (h *Handler) Router() http.Handler {
|
||||
r.Put("/api/brands/{id}", h.UpdateBrand)
|
||||
r.Post("/api/brands/{id}/merge", h.MergeBrands)
|
||||
r.Delete("/api/brands/{id}", h.DeleteBrand)
|
||||
r.Get("/api/kind-fields", h.ListKindFields)
|
||||
r.Get("/api/categories", h.ListCategories)
|
||||
r.Post("/api/categories", h.CreateCategory)
|
||||
r.Put("/api/categories/{id}", h.UpdateCategory)
|
||||
@@ -423,6 +424,20 @@ func (h *Handler) ListBrands(w http.ResponseWriter, r *http.Request) {
|
||||
writeJSON(w, http.StatusOK, map[string]any{"items": items})
|
||||
}
|
||||
|
||||
// ListKindFields returns the editable spec field template for an archive kind.
|
||||
func (h *Handler) ListKindFields(w http.ResponseWriter, r *http.Request) {
|
||||
kind := strings.TrimSpace(r.URL.Query().Get("kind"))
|
||||
if kind == "" {
|
||||
writeError(w, http.StatusBadRequest, "bad_request", "缺少 kind 参数")
|
||||
return
|
||||
}
|
||||
items, err := h.store.ListKindFields(r.Context(), kind)
|
||||
if h.handleErr(w, err) {
|
||||
return
|
||||
}
|
||||
writeJSON(w, http.StatusOK, map[string]any{"items": items, "kind": kind})
|
||||
}
|
||||
|
||||
// ListCategories returns category options.
|
||||
func (h *Handler) ListCategories(w http.ResponseWriter, r *http.Request) {
|
||||
items, err := h.store.ListCategories(r.Context())
|
||||
|
||||
Reference in New Issue
Block a user