一.需求分析

  • 在 02资料/章节210商品新增中商品类目显示 中把内容粘贴到项目中
  • 点击后显示类目选择页面,里面是一个tree组件,按照tree的深度逐层进行显示,刚显示对话框时并没有向服务器端传递数据,此时默认id=0,服务器端查询所有parent_id为0的数据
  • EasyUI Tree组件中每个节点属性如下,必须为这些名称,否则无法识别,所以需要在commons/EasyUI.go中新建一个结构体表示tree的节点
  1. id:绑定节点的标识值。
  2. text:显示的节点文本。
  3. iconCls:显示的节点图标CSSID
  4. checked:该节点是否被选中。
  5. state:节点状态,'open' 'closed'
  6. attributes:绑定该节点的自定义属性。
  7. target:目标DOM对象。
  • Tree的state表示节点状态,如果节点是closed状态,节点将显示成文件夹的形式,可以打开这个节点,开始时EasyUI默认向服务器端发送当前节点的id.如果节点的状态是closed节点表示叶子节点,没有子节点

二.代码演示

  • 在commons/EasyUI.go中添加新的结构体
  1. //tree
  2. type EasyUITree struct {
  3. Id int `json:"id"`
  4. Text string `json:"text"`
  5. State string `json:"state"`
  6. }
  • 在/item/cat/TbItemCatDao.go中添加新函数
  1. /*
  2. 根据parent_id查询所有子类目
  3. */
  4. func selByPid(pid int) (c []TbItemCat){
  5. rows,err:=commons.Dql("select * from tb_item_cat where parent_id=?",pid)
  6. if err!=nil{
  7. fmt.Println(err)
  8. return nil
  9. }
  10. c = make([]TbItemCat,0)
  11. for rows.Next() {
  12. var t TbItemCat
  13. rows.Scan(&t.Id,&t.ParentId,&t.Name,&t.Status,&t.SortOrder,&t.IsParent,&t.Created,&t.Updated)
  14. c= append(c,t)
  15. }
  16. commons.CloseConn()
  17. return
  18. }
  • 修改/item/cat/TbItemCat.go中结构体如下
  1. package cat
  2. //商品类目
  3. type TbItemCat struct {
  4. Id int
  5. ParentId int
  6. Name string
  7. Status byte
  8. SortOrder int8
  9. IsParent bool//此处由byte修改为bool
  10. Created string
  11. Updated string
  12. }
  • 在/item/cat/TbItemCatService中添加新函数
  1. func showCatByPidService(pid int) (tree []commons.EasyUITree){
  2. cats:=selByPid(pid)
  3. tree=make([]commons.EasyUITree,0)
  4. for _,n:= range cats{
  5. state:="open"
  6. if n.IsParent{
  7. state="closed"
  8. }
  9. tree=append(tree,commons.EasyUITree{n.Id,n.Name,state})
  10. }
  11. return
  12. }
  • 在/item/cat下新建TbItemCatController.go
  1. package cat
  2. import (
  3. "net/http"
  4. "strconv"
  5. "encoding/json"
  6. "commons"
  7. )
  8. func ItemCatHandler(){
  9. commons.Router.HandleFunc("/item/cat/show",showItemCatController)
  10. }
  11. func showItemCatController(w http.ResponseWriter,r *http.Request){
  12. id:=r.FormValue("id")
  13. if id==""{
  14. id="0"
  15. }
  16. idInt,_:=strconv.Atoi(id)
  17. t:=showCatByPidService(idInt)
  18. b,_:=json.Marshal(t)
  19. w.Header().Set("Content-type","application/json;charset=utf-8")
  20. w.Write(b)
  21. }
  • 在main.go中添加ItemCatHandler()函数的引用
  1. package main
  2. import (
  3. "net/http"
  4. "html/template"
  5. "user"
  6. "commons"
  7. "github.com/gorilla/mux"
  8. "item"
  9. "item/cat"
  10. )
  11. //显示登录页面
  12. func welcome(w http.ResponseWriter, r *http.Request) {
  13. t, _ := template.ParseFiles("view/login.html")
  14. t.Execute(w, nil)
  15. }
  16. //restful显示页面
  17. func showPage(w http.ResponseWriter, r *http.Request) {
  18. vars := mux.Vars(r)
  19. t, _ := template.ParseFiles("view/" + vars["page"] + ".html")
  20. t.Execute(w, nil)
  21. }
  22. func main() {
  23. commons.Router.PathPrefix("/static").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
  24. commons.Router.HandleFunc("/", welcome)
  25. //满足/page/{page}格式的处理
  26. commons.Router.HandleFunc("/page/{page}", showPage)
  27. //用户
  28. user.UserHandler()
  29. //商品
  30. item.ItemHandler()
  31. //商品类目
  32. cat.ItemCatHandler()
  33. http.ListenAndServe(":80", commons.Router)
  34. }