feat(admin): 分类管理(分类树增删改移 + 后台页面)
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
@@ -354,19 +354,27 @@ func (s *Store) ListBrands(ctx context.Context) ([]Brand, error) {
|
||||
return out, rows.Err()
|
||||
}
|
||||
|
||||
// Category is a category option for the edit form.
|
||||
// Category is a category option for the edit form and the management view.
|
||||
type Category struct {
|
||||
ID string `json:"id"`
|
||||
NameZH string `json:"name_zh"`
|
||||
NameEN *string `json:"name_en"`
|
||||
Path string `json:"path"`
|
||||
Level int `json:"level"`
|
||||
ID string `json:"id"`
|
||||
NameZH string `json:"name_zh"`
|
||||
NameEN *string `json:"name_en"`
|
||||
Path string `json:"path"`
|
||||
Level int `json:"level"`
|
||||
ParentID *string `json:"parent_id"`
|
||||
GPCBrickCode *string `json:"gpc_brick_code"`
|
||||
ProductCount int `json:"product_count"`
|
||||
}
|
||||
|
||||
// ListCategories returns the full category tree.
|
||||
// ListCategories returns the full category tree (path order) with the number of
|
||||
// products directly assigned to each node.
|
||||
func (s *Store) ListCategories(ctx context.Context) ([]Category, error) {
|
||||
rows, err := s.pool.Query(ctx,
|
||||
"SELECT id, name_zh, name_en, path::text, level FROM category ORDER BY path")
|
||||
rows, err := s.pool.Query(ctx, `
|
||||
SELECT c.id, c.name_zh, c.name_en, c.path::text, c.level, c.parent_id::text,
|
||||
c.gpc_brick_code,
|
||||
(SELECT count(*) FROM product p WHERE p.category_id = c.id) AS product_count
|
||||
FROM category c
|
||||
ORDER BY c.path`)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -374,7 +382,8 @@ func (s *Store) ListCategories(ctx context.Context) ([]Category, error) {
|
||||
out := []Category{}
|
||||
for rows.Next() {
|
||||
var c Category
|
||||
if err := rows.Scan(&c.ID, &c.NameZH, &c.NameEN, &c.Path, &c.Level); err != nil {
|
||||
if err := rows.Scan(&c.ID, &c.NameZH, &c.NameEN, &c.Path, &c.Level,
|
||||
&c.ParentID, &c.GPCBrickCode, &c.ProductCount); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out = append(out, c)
|
||||
|
||||
Reference in New Issue
Block a user