package pick import ( "github.com/gin-gonic/gin" "zhiyuan/pkg/app" "zhiyuan/pkg/param/material/item" pkgParam "zhiyuan/pkg/param/material/pkg" "zhiyuan/pkg/utils" "zhiyuan/services/form" "zhiyuan/services/material/pick" "zhiyuan/services/material/pkg" ) func BuildList(c *gin.Context) { pkgID := utils.StrTo(c.Query("pkg_id")).MustInt() if pkgID <= 0 { app.Error(c, "套餐id有误") return } pkgInfo, err := pkg.GetPkg(map[string]interface{}{"id": pkgID}, []string{"id", "room_types", "pkg_name"}, nil) if err != nil { app.Error(c, "套餐id有误") return } type BuildList struct { ID int `json:"id"` BuildName string `json:"build_name"` BuildType int `json:"build_type"` Price float64 `json:"price"` Unit int `json:"unit"` UnitName string `json:"unit_name"` BuildTypeName string `json:"build_type_name"` } buildList := make([]BuildList, 0) if _, err := pick.GetBuilds(map[string]interface{}{"pkg_id": pkgID}, nil, app.Page{}, &buildList); err != nil { app.Error(c, err.Error()) return } BuildListMap := make(map[int][]BuildList, 0) unitTypes := utils.ParseSliceMap(item.Params.Unit, "id") for _, v := range buildList { v.UnitName = utils.ToStr(unitTypes[utils.ToStr(v.Unit)]["name"]) BuildListMap[v.BuildType] = append(BuildListMap[v.BuildType], v) } type PkgBuildList struct { BuildType int `json:"build_type"` BuildTypeName string `json:"build_type_name"` Builds []BuildList `json:"builds"` } pkgBuildListGroup := make([]PkgBuildList, 0) for _, v := range pkgParam.Params.BuildType { if BuildListMap[v.ID] == nil { BuildListMap[v.ID] = make([]BuildList, 0) } pkgBuildListGroup = append(pkgBuildListGroup, PkgBuildList{ BuildType: v.ID, BuildTypeName: v.Name, Builds: BuildListMap[v.ID], }) } pkgBuildList := make([]map[string]interface{}, 0) for _, v := range pkgBuildListGroup { pkgBuildList = append(pkgBuildList, map[string]interface{}{ "build_type": v.BuildType, "build_type_name": v.BuildTypeName, "rowspan": len(v.Builds) + 1, "colspan": 1, }) for _, build := range v.Builds { pkgBuildList = append(pkgBuildList, map[string]interface{}{ "id": build.ID, "unit_name": build.UnitName, "unit": build.Unit, "price": build.Price, "build_type": build.BuildType, "build_name": build.BuildName, "rowspan": 0, "colspan": 0, }) } } app.Success(c, map[string]interface{}{"build_list": pkgBuildList, "pkg_info": pkgInfo}) } func BuildAdd(c *gin.Context) { var form form.MaterialPickBuildAdd if app.Bind(c, &form) != nil { return } if id, err := pick.AddBuild(form); err != nil { app.Error(c, err.Error()) return } else { app.Success(c, gin.H{"id": id}) } } func BuildEdit(c *gin.Context) { id := utils.StrTo(c.Param("id")).MustInt() if id <= 0 { app.Error(c, "id有误") return } var form form.MaterialPickBuildAdd if app.Bind(c, &form) != nil { return } if _, err := pick.EditBuild(form, id); err != nil { app.ErrorMsg(c, err.Error(), nil) return } app.Success(c, nil) } func BuildDel(c *gin.Context) { id := utils.StrTo(c.Param("id")).MustInt() if id <= 0 { app.Error(c, "id有误") return } if _, err := pick.DelBuild(id); err != nil { app.ErrorMsg(c, err.Error(), nil) return } app.Success(c, nil) }