From 0df5d9e7ef57cd0d6c29d5798f0f42a9133b90cd Mon Sep 17 00:00:00 2001 From: herenshan112 Date: Wed, 24 May 2023 11:11:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8F=9C=E5=8D=95CURD=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/version1/menus/menus.go | 271 ++++++++++++++++++++++++++++++ api/version1/menus/type.go | 24 +++ apirouter/v1/menusRouters/pc.go | 14 +- models/modelAppPlatform/menus.go | 2 +- overall/publicmethod/technique.go | 19 ++- 5 files changed, 322 insertions(+), 8 deletions(-) diff --git a/api/version1/menus/menus.go b/api/version1/menus/menus.go index adb0b6d..9538a0e 100644 --- a/api/version1/menus/menus.go +++ b/api/version1/menus/menus.go @@ -4,6 +4,7 @@ import ( "appPlatform/models/modelAppPlatform" "appPlatform/overall" "appPlatform/overall/publicmethod" + "time" "github.com/gin-gonic/gin" ) @@ -97,3 +98,273 @@ func (a *ApiMethod) MenuOptions(c *gin.Context) { routerThree := publicmethod.GetMenuOptionsThree(0, menusList) publicmethod.Result(0, routerThree, c) } + +/* +* +@ 作者: 秦东 +@ 时间: 2023-05-22 16:40:42 +@ 功能: 新增菜单 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) AddNewMenu(c *gin.Context) { + var requestData AddNewMenuCont + c.ShouldBindJSON(&requestData) + if requestData.Name == "" { + publicmethod.Result(1, requestData, c, "请输入菜单名称!") + return + } + if requestData.Visible == 0 { + requestData.Visible = 1 + } + if requestData.Sort == 0 { + requestData.Sort = 50 + } + types := publicmethod.MenuTypeToInt(requestData.Types) + var menuCont modelAppPlatform.Menus + menuCont.Name = requestData.Name //菜单名称"` + menuCont.Types = types //菜单类型(1-菜单;2-目录;3-外链;4-按钮权限"` + menuCont.Path = requestData.Path //路由路径"` + menuCont.Component = requestData.Component //组件路径(vue页面完整路径,省略.vue后缀)"` + menuCont.Perm = publicmethod.GetUUid(3) //权限标识"` + menuCont.Visible = requestData.Visible //显示状态(1:显示;2:隐藏,3:删除)"` + menuCont.Sort = requestData.Sort //排序(数字越小排名越靠前))"` + menuCont.Icon = requestData.Icon //菜单图标"` + menuCont.Redirect = requestData.Redirect //跳转路径"` + menuCont.ParentId = requestData.ParentId //父菜单ID"` + menuCont.Time = time.Now().Unix() //创建时间"` + err := overall.CONSTANT_DB_AppPlatform.Create(&menuCont).Error + if err != nil { + publicmethod.Result(104, err, c) + return + } + publicmethod.Result(0, err, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-05-23 16:21:32 +@ 功能: 查看菜单 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) GetOneMenuCont(c *gin.Context) { + var requestData publicmethod.PublicId + err := c.ShouldBindJSON(&requestData) + if err != nil { + publicmethod.Result(100, err, c) + return + } + if requestData.Id == "" { + publicmethod.Result(1, requestData, c, "未知菜单!") + return + } + var menuCont modelAppPlatform.Menus + err = menuCont.GetCont(map[string]interface{}{"`id`": requestData.Id}) + if err != nil { + publicmethod.Result(107, err, c) + return + } + var sendCont EditMenuCont + sendCont.Id = menuCont.Id + sendCont.ParentId = menuCont.ParentId //父菜单ID + sendCont.Name = menuCont.Name //菜单名称 + sendCont.Visible = menuCont.Visible //菜单是否可见(1:是;2:否;) + sendCont.Icon = menuCont.Icon //菜单图标 + sendCont.Sort = menuCont.Sort //排序 + sendCont.Component = menuCont.Component //组件路径 + sendCont.Path = menuCont.Path //路由路径 + sendCont.Redirect = menuCont.Redirect //跳转路由路径 + sendCont.Types = publicmethod.MenuType(menuCont.Types) //菜单类型 + publicmethod.Result(0, sendCont, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-05-23 16:44:14 +@ 功能: 修改菜单 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) EditMenusCont(c *gin.Context) { + var requestData EditMenuCont + c.ShouldBindJSON(&requestData) + if requestData.Id == 0 { + publicmethod.Result(1, requestData, c, "未知菜单!") + return + } + if requestData.Name == "" { + publicmethod.Result(1, requestData, c, "请输入菜单名称!") + return + } + if requestData.Visible == 0 { + requestData.Visible = 1 + } + if requestData.Sort == 0 { + requestData.Sort = 50 + } + whe := publicmethod.MapOut[string]() + whe["`id`"] = requestData.Id + var menuCont modelAppPlatform.Menus + err := menuCont.GetCont(whe) + if err != nil { + publicmethod.Result(107, err, c) + return + } + editCont := publicmethod.MapOut[string]() + if requestData.Name != menuCont.Name { + editCont["name"] = requestData.Name + } + types := publicmethod.MenuTypeToInt(requestData.Types) + if types != menuCont.Types { + editCont["type"] = types + } + if requestData.Path != menuCont.Path { + editCont["path"] = requestData.Path + } + if requestData.Component != menuCont.Component { + editCont["component"] = requestData.Component + } + if requestData.Visible == 0 { + requestData.Visible = 1 + } + if requestData.Visible != menuCont.Visible { + editCont["visible"] = requestData.Visible + } + if requestData.Sort == 0 { + requestData.Sort = 50 + } + if requestData.Sort != menuCont.Sort { + editCont["sort"] = requestData.Sort + } + if requestData.Icon != menuCont.Icon { + editCont["icon"] = requestData.Icon + } + if requestData.Redirect != menuCont.Redirect { + editCont["redirect"] = requestData.Redirect + } + if requestData.ParentId != menuCont.ParentId { + editCont["parentId"] = requestData.ParentId + } + if len(editCont) > 0 { + editCont["time"] = time.Now().Unix() + } + err = menuCont.EiteCont(whe, editCont) + if err != nil { + publicmethod.Result(106, err, c) + return + } + publicmethod.Result(0, err, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-05-24 10:33:12 +@ 功能: 删除菜单 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) DeltMenusCont(c *gin.Context) { + var requestData publicmethod.PublicId + err := c.ShouldBindJSON(&requestData) + if err != nil { + publicmethod.Result(100, err, c) + return + } + if requestData.Id == "" { + publicmethod.Result(1, requestData, c, "未知菜单!") + return + } + var menuCont modelAppPlatform.Menus + err = menuCont.GetCont(map[string]interface{}{"`id`": requestData.Id}) + if err != nil { + publicmethod.Result(107, err, c) + return + } + editCont := publicmethod.MapOut[string]() + editCont["`visible`"] = 3 + editCont["`time`"] = time.Now().Unix() + err = menuCont.EiteCont(map[string]interface{}{"`id`": requestData.Id}, editCont) + if err != nil { + publicmethod.Result(106, err, c) + return + } + var sunMenus GetSunMenus + sunMenus.GetSunMenusList(menuCont.Id) + if len(sunMenus.Id) > 0 { + overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.Menus{}).Where("`id` IN ?", sunMenus.Id).Updates(editCont) + } + publicmethod.Result(0, err, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-05-24 10:52:12 +@ 功能: 获取所有子菜单 +@ 参数 + + #superior 上级菜单Id + +@ 返回值 + + # + +@ 方法原型 + + #func (g *GetSunMenus) GetSunMenusList(superior int) +*/ +func (g *GetSunMenus) GetSunMenusList(superior int) { + var menuId []int + err := overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.Menus{}).Select("`id`").Where("`visible` IN (1,2) AND `parentId` = ?", superior).Find(&menuId).Error + if err != nil { + return + } + if len(menuId) > 0 { + for _, v := range menuId { + if !publicmethod.IsInTrue[int](v, g.Id) { + g.Id = append(g.Id, v) + } + g.GetSunMenusList(v) + } + } +} diff --git a/api/version1/menus/type.go b/api/version1/menus/type.go index dbfb0d4..64c78c3 100644 --- a/api/version1/menus/type.go +++ b/api/version1/menus/type.go @@ -39,3 +39,27 @@ var syncSeting = sync.WaitGroup{} type ShearMenu struct { Title string `json:"title"` } + +// 新增菜单 +type AddNewMenuCont struct { + ParentId int `json:"parentId"` //父菜单ID + Name string `json:"name"` //菜单名称 + Visible int `json:"visible"` //菜单是否可见(1:是;2:否;) + Icon string `json:"icon"` //菜单图标 + Sort int `json:"sort"` //排序 + Component string `json:"component"` //组件路径 + Path string `json:"path"` //路由路径 + Redirect string `json:"redirect"` //跳转路由路径 + Types string `json:"type"` //菜单类型 +} + +// 边界菜单 +type EditMenuCont struct { + Id int `json:"id"` //id + AddNewMenuCont +} + +// 获取所有子菜单 +type GetSunMenus struct { + Id []int `json:"id"` //菜单Id +} diff --git a/apirouter/v1/menusRouters/pc.go b/apirouter/v1/menusRouters/pc.go index 199501f..77606de 100644 --- a/apirouter/v1/menusRouters/pc.go +++ b/apirouter/v1/menusRouters/pc.go @@ -12,10 +12,14 @@ func (a *ApiRouter) RouterGroupPc(router *gin.RouterGroup) { var methodBinding = version1.AppApiEntry.MenusApi { - apiRouter.GET("", methodBinding.Index) //入口 - apiRouter.POST("", methodBinding.Index) //入口 - apiRouter.GET("get_routers_three", methodBinding.GetMenusThree) //获取路由树 - apiRouter.GET("get_menus_three", methodBinding.GetMenusListTree) //获取菜单树 - apiRouter.GET("menu_options", methodBinding.MenuOptions) //菜单下拉列表 + apiRouter.GET("", methodBinding.Index) //入口 + apiRouter.POST("", methodBinding.Index) //入口 + apiRouter.GET("get_routers_three", methodBinding.GetMenusThree) //获取路由树 + apiRouter.GET("get_menus_three", methodBinding.GetMenusListTree) //获取菜单树 + apiRouter.GET("menu_options", methodBinding.MenuOptions) //菜单下拉列表 + apiRouter.POST("add_new_menu", methodBinding.AddNewMenu) //写入菜单 + apiRouter.POST("get_one_menu_cont", methodBinding.GetOneMenuCont) //获取单一菜单内容 + apiRouter.POST("edit_menus_cont", methodBinding.EditMenusCont) //修改菜单 + apiRouter.POST("delt_menus_cont", methodBinding.DeltMenusCont) //删除菜单 } } diff --git a/models/modelAppPlatform/menus.go b/models/modelAppPlatform/menus.go index 5b7c26d..baff404 100644 --- a/models/modelAppPlatform/menus.go +++ b/models/modelAppPlatform/menus.go @@ -18,7 +18,7 @@ type Menus struct { Icon string `json:"icon" gorm:"column:icon;type:varchar(255) ;default:'';comment:菜单图标"` Redirect string `json:"redirect" gorm:"column:redirect;type:varchar(255) ;default:'';comment:跳转路径"` ParentId int `json:"parentId" gorm:"column:parentId;type:int(5) unsigned;default:0;not null;comment:父菜单ID"` - Time int `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` + Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` } func (menus *Menus) TableName() string { diff --git a/overall/publicmethod/technique.go b/overall/publicmethod/technique.go index e705404..f9a695f 100644 --- a/overall/publicmethod/technique.go +++ b/overall/publicmethod/technique.go @@ -2188,7 +2188,7 @@ func GetAppMenuThree(parentId int, threeData []modelAppPlatform.Menus) []AppMenu node.Redirect = v.Redirect //跳转路径"` node.ParentId = v.ParentId //父菜单ID"` node.Time = v.Time //创建时间"` - node.Class = menuType(v.Types) + node.Class = MenuType(v.Types) node.Children = child //子路由列表 // // fmt.Printf("GetMenuThree-22222--%v--->%v\n", v.Id, node) treeList = append(treeList, node) @@ -2213,7 +2213,7 @@ func GetMenuOptionsThree(parentId int, threeData []modelAppPlatform.Menus) []App } // 菜单类型对照 -func menuType(class int) string { +func MenuType(class int) string { switch class { case 1: return "MENU" @@ -2228,3 +2228,18 @@ func menuType(class int) string { } return "CATALOG" } +func MenuTypeToInt(class string) int { + switch class { + case "MENU": + return 1 + case "CATALOG": + return 2 + case "EXTLINK": + return 3 + case "BUTTON": + return 4 + default: + return 2 + } + return 2 +}