Browse Source

菜单CURD完成

v1
超级管理员 3 years ago
parent
commit
0df5d9e7ef
  1. 271
      api/version1/menus/menus.go
  2. 24
      api/version1/menus/type.go
  3. 14
      apirouter/v1/menusRouters/pc.go
  4. 2
      models/modelAppPlatform/menus.go
  5. 19
      overall/publicmethod/technique.go

271
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)
}
}
}

24
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
}

14
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) //删除菜单
}
}

2
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 {

19
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
}

Loading…
Cancel
Save