174 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package system
 | |
| 
 | |
| import (
 | |
| 	"net/http"
 | |
| 
 | |
| 	"management/internal/db/model/dto"
 | |
| 	db "management/internal/db/sqlc"
 | |
| 	"management/internal/erpserver/biz"
 | |
| 	"management/internal/erpserver/model/form"
 | |
| 	"management/internal/pkg/binding"
 | |
| 	"management/internal/pkg/convertor"
 | |
| 	"management/internal/pkg/tpl"
 | |
| )
 | |
| 
 | |
| type CategoryHandler interface {
 | |
| 	List(w http.ResponseWriter, r *http.Request)
 | |
| 	Add(w http.ResponseWriter, r *http.Request)
 | |
| 	AddChildren(w http.ResponseWriter, r *http.Request)
 | |
| 	Edit(w http.ResponseWriter, r *http.Request)
 | |
| 	Save(w http.ResponseWriter, r *http.Request)
 | |
| 	Data(w http.ResponseWriter, r *http.Request)
 | |
| 	Refresh(w http.ResponseWriter, r *http.Request)
 | |
| 	RebuildParentPath(w http.ResponseWriter, r *http.Request)
 | |
| }
 | |
| 
 | |
| type categoryHandler struct {
 | |
| 	render tpl.Renderer
 | |
| 	biz    biz.IBiz
 | |
| }
 | |
| 
 | |
| var _ CategoryHandler = (*categoryHandler)(nil)
 | |
| 
 | |
| func NewCategoryHandler(render tpl.Renderer, biz biz.IBiz) *categoryHandler {
 | |
| 	return &categoryHandler{
 | |
| 		render: render,
 | |
| 		biz:    biz,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (h *categoryHandler) List(w http.ResponseWriter, r *http.Request) {
 | |
| 	switch r.Method {
 | |
| 	case http.MethodGet:
 | |
| 		h.render.HTML(w, r, "category/list.tmpl", nil)
 | |
| 	case http.MethodPost:
 | |
| 		var q dto.SearchDto
 | |
| 		q.SearchStatus = convertor.ConvertInt(r.PostFormValue("status"), 9999)
 | |
| 		q.SearchParentID = convertor.ConvertInt(r.PostFormValue("parentId"), 0)
 | |
| 		q.SearchName = r.PostFormValue("name")
 | |
| 		q.SearchID = convertor.ConvertInt[int64](r.PostFormValue("id"), 0)
 | |
| 		q.Page = convertor.ConvertInt(r.PostFormValue("page"), 1)
 | |
| 		q.Rows = convertor.ConvertInt(r.PostFormValue("rows"), 10)
 | |
| 		res, count, err := h.biz.SystemV1().CategoryBiz().List(r.Context(), q)
 | |
| 		if err != nil {
 | |
| 			http.Error(w, err.Error(), http.StatusInternalServerError)
 | |
| 			return
 | |
| 		}
 | |
| 
 | |
| 		data := tpl.ResponseList{
 | |
| 			Code:    0,
 | |
| 			Message: "ok",
 | |
| 			Count:   count,
 | |
| 			Data:    res,
 | |
| 		}
 | |
| 		h.render.JSON(w, data)
 | |
| 	default:
 | |
| 		http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (h *categoryHandler) Add(w http.ResponseWriter, r *http.Request) {
 | |
| 	h.render.HTML(w, r, "category/edit.tmpl", map[string]any{
 | |
| 		"Item": &db.Category{Sort: 6666},
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func (h *categoryHandler) AddChildren(w http.ResponseWriter, r *http.Request) {
 | |
| 	vars := r.URL.Query()
 | |
| 	parentID := convertor.QueryInt[int32](vars, "parentID", 0)
 | |
| 	vm := &db.Category{ParentID: parentID, Sort: 6666}
 | |
| 	h.render.HTML(w, r, "category/edit.tmpl", map[string]any{
 | |
| 		"Item": vm,
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func (h *categoryHandler) Edit(w http.ResponseWriter, r *http.Request) {
 | |
| 	vars := r.URL.Query()
 | |
| 	id := convertor.QueryInt[int32](vars, "id", 0)
 | |
| 	vm := &db.Category{Sort: 6666}
 | |
| 	if id > 0 {
 | |
| 		vm, _ = h.biz.SystemV1().CategoryBiz().Get(r.Context(), id)
 | |
| 	}
 | |
| 	h.render.HTML(w, r, "category/edit.tmpl", map[string]any{
 | |
| 		"Item": vm,
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func (h *categoryHandler) Save(w http.ResponseWriter, r *http.Request) {
 | |
| 	var req form.Category
 | |
| 	if err := binding.Form.Bind(r, &req); err != nil {
 | |
| 		h.render.JSONERR(w, binding.ValidatorErrors(err))
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	if *req.ID == 0 {
 | |
| 		err := h.biz.SystemV1().CategoryBiz().Create(r.Context(), &req)
 | |
| 		if err != nil {
 | |
| 			h.render.JSONERR(w, err.Error())
 | |
| 			return
 | |
| 		}
 | |
| 		h.render.JSONOK(w, "添加成功")
 | |
| 	} else {
 | |
| 		err := h.biz.SystemV1().CategoryBiz().Update(r.Context(), &req)
 | |
| 		if err != nil {
 | |
| 			h.render.JSONERR(w, err.Error())
 | |
| 			return
 | |
| 		}
 | |
| 		h.render.JSONOK(w, "更新成功")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (h *categoryHandler) Data(w http.ResponseWriter, r *http.Request) {
 | |
| 	ctx := r.Context()
 | |
| 	vars := r.URL.Query()
 | |
| 	t := vars.Get("type")
 | |
| 	if t == "tree" {
 | |
| 		res, err := h.biz.SystemV1().CategoryBiz().Tree(ctx, 0)
 | |
| 		if err != nil {
 | |
| 			h.render.JSONERR(w, err.Error())
 | |
| 			return
 | |
| 		}
 | |
| 
 | |
| 		h.render.JSON(w, res)
 | |
| 		return
 | |
| 	} else if t == "xmselect_tree" {
 | |
| 		res, err := h.biz.SystemV1().CategoryBiz().XmSelectTree(ctx, 0)
 | |
| 		if err != nil {
 | |
| 			h.render.JSONERR(w, err.Error())
 | |
| 			return
 | |
| 		}
 | |
| 
 | |
| 		h.render.JSON(w, res)
 | |
| 		return
 | |
| 	} else if t == "xmselect" {
 | |
| 		res, err := h.biz.SystemV1().CategoryBiz().XmSelect(ctx, vars.Get("letter"))
 | |
| 		if err != nil {
 | |
| 			h.render.JSONERR(w, err.Error())
 | |
| 			return
 | |
| 		}
 | |
| 
 | |
| 		h.render.JSON(w, res)
 | |
| 		return
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (h *categoryHandler) Refresh(w http.ResponseWriter, r *http.Request) {
 | |
| 	_, err := h.biz.SystemV1().CategoryBiz().Refresh(r.Context())
 | |
| 	if err != nil {
 | |
| 		h.render.JSONERR(w, err.Error())
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	h.render.JSONOK(w, "刷新成功")
 | |
| }
 | |
| 
 | |
| func (h *categoryHandler) RebuildParentPath(w http.ResponseWriter, r *http.Request) {
 | |
| 	err := h.biz.SystemV1().CategoryBiz().RebuildParentPath(r.Context())
 | |
| 	if err != nil {
 | |
| 		h.render.JSONERR(w, err.Error())
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	h.render.JSONOK(w, "重建成功")
 | |
| }
 |