一. 需求分析

  • 不同类型商品有不同的规格参数模版,在设计数据库时直接把模版都放入到一个列中,类型为json,保证无论怎么变化都可以实现规格参数的处理
  • tb_item_param是规格参数模版表,这个表中存储了不同类型对应的模版信息
  • 页面显示时除了规格参数模版表中内容还需要显示对应类目的名称

二.代码实现

  • 在/item文件夹下新建文件param
  • 在/item/param中新建TbItemParam.go
  1. package param
  2. //模版
  3. type TbItemParam struct {
  4. Id int `json:"id"`
  5. ItemCatId int `json:"itemCatId"`
  6. ParamData string `json:"paramData"`
  7. Created string `json:"created"`
  8. Updated string `json:"updated"`
  9. }
  10. type TbItemParamCat struct {
  11. TbItemParam
  12. CatName string `json:"catName"`
  13. }
  • 在/item/param中新建TbItemParamDao.go
  1. package param
  2. import (
  3. "commons"
  4. "fmt"
  5. )
  6. //分页查询
  7. func selByPageDao(page,rows int) []TbItemParam{
  8. r,err:=commons.Dql("select * from tb_item_param limit ?,?",rows*(page-1),rows)
  9. if err!=nil{
  10. fmt.Println(err)
  11. return nil
  12. }
  13. t := make([]TbItemParam,0)
  14. for r.Next(){
  15. var param TbItemParam
  16. r.Scan(&param.Id,&param.ItemCatId,&param.ParamData,&param.Created,&param.Updated)
  17. t=append(t,param)
  18. }
  19. return t
  20. }
  21. //查询总个数
  22. func selCount() int{
  23. r,err:=commons.Dql("select count(*) from tb_item_param")
  24. if err!=nil{
  25. fmt.Println(err)
  26. return -1
  27. }
  28. if r.Next(){
  29. var count int
  30. r.Scan(&count)
  31. return count
  32. }
  33. return -1
  34. }
  • 在/item/param中新建TbItemParamService.go
  1. package param
  2. import "commons"
  3. import (
  4. c "item/cat"
  5. )
  6. //显示规格参数
  7. func showParamService(page, rows int) (d commons.Datagrid) {
  8. t := selByPageDao(page, rows)
  9. d.Total = selCount()
  10. cats := make([]TbItemParamCat, 0)
  11. for i := 0; i < len(t); i++ {
  12. var cat TbItemParamCat
  13. cat.Id = t[i].Id
  14. cat.Updated = t[i].Updated
  15. cat.Created = t[i].Created
  16. cat.ParamData = t[i].ParamData
  17. cat.ItemCatId = t[i].ItemCatId
  18. cat.CatName = c.ShowCatByIdService(t[i].ItemCatId).Name
  19. cats = append(cats, cat)
  20. }
  21. d.Rows = cats
  22. return
  23. }
  • 在/item/param中新建TbItemParamController.go
  1. package param
  2. import "commons"
  3. import (
  4. c "item/cat"
  5. )
  6. //显示规格参数
  7. func showParamService(page, rows int) (d commons.Datagrid) {
  8. t := selByPageDao(page, rows)
  9. d.Total = selCount()
  10. cats := make([]TbItemParamCat, 0)
  11. for i := 0; i < len(t); i++ {
  12. var cat TbItemParamCat
  13. cat.Id = t[i].Id
  14. cat.Updated = t[i].Updated
  15. cat.Created = t[i].Created
  16. cat.ParamData = t[i].ParamData
  17. cat.ItemCatId = t[i].ItemCatId
  18. cat.CatName = c.ShowCatByIdService(t[i].ItemCatId).Name
  19. cats = append(cats, cat)
  20. }
  21. d.Rows = cats
  22. return
  23. }
  • 在main.go中添加函数引用
  1. //规格参数
  2. param.ParamHandler()