From 792c8874aa4a15188fabd48f463df78ff1d0064f Mon Sep 17 00:00:00 2001 From: wenjianzhang Date: Sat, 16 Jan 2021 21:46:57 +0800 Subject: [PATCH] =?UTF-8?q?perf=F0=9F=91=8C=20:=20=E5=B2=97=E4=BD=8D?= =?UTF-8?q?=E3=80=81=E8=A7=92=E8=89=B2=E5=8A=9F=E8=83=BD=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/system/menu.go | 86 +++--- app/admin/apis/system/sys_dept/sys_dept.go | 42 ++- app/admin/apis/system/sys_menu/sys_menu.go | 281 ++++++++++++++++++ app/admin/apis/system/sys_post/sys_post.go | 174 +++++++++++ app/admin/apis/system/sys_role/sys_role.go | 175 +++++++++++ app/admin/models/system/sys_post.go | 30 ++ app/admin/models/system/sys_role.go | 33 ++ app/admin/router/sys_dept.go | 32 ++ app/admin/router/sys_menu.go | 39 +++ app/admin/router/sys_post.go | 26 ++ app/admin/router/sys_role.go | 25 ++ app/admin/router/sysrouter.go | 56 ++-- app/admin/service/dto/sys_dept.go | 3 +- app/admin/service/dto/sys_post.go | 117 ++++++++ app/admin/service/dto/sys_role.go | 128 ++++++++ app/admin/service/sys_dept.go | 64 +++- app/admin/service/sys_menu.go | 98 ++++-- app/admin/service/sys_post.go | 109 +++++++ app/admin/service/sys_role.go | 109 +++++++ .../version/1610804233204_migrate.go | 39 +++ common/dto/order.go | 12 + 21 files changed, 1575 insertions(+), 103 deletions(-) create mode 100644 app/admin/apis/system/sys_menu/sys_menu.go create mode 100644 app/admin/apis/system/sys_post/sys_post.go create mode 100644 app/admin/apis/system/sys_role/sys_role.go create mode 100644 app/admin/models/system/sys_post.go create mode 100644 app/admin/models/system/sys_role.go create mode 100644 app/admin/router/sys_dept.go create mode 100644 app/admin/router/sys_menu.go create mode 100644 app/admin/router/sys_post.go create mode 100644 app/admin/router/sys_role.go create mode 100644 app/admin/service/dto/sys_post.go create mode 100644 app/admin/service/dto/sys_role.go create mode 100644 app/admin/service/sys_post.go create mode 100644 app/admin/service/sys_role.go create mode 100644 cmd/migrate/migration/version/1610804233204_migrate.go create mode 100644 common/dto/order.go diff --git a/app/admin/apis/system/menu.go b/app/admin/apis/system/menu.go index ffe65e03..b76c4f7d 100644 --- a/app/admin/apis/system/menu.go +++ b/app/admin/apis/system/menu.go @@ -46,49 +46,6 @@ func GetMenu(c *gin.Context) { app.OK(c, result, "") } -// GetMenuTreeRoleselect 角色修改中的菜单列表 -func GetMenuTreeRoleselect(c *gin.Context) { - var Menu models.Menu - var SysRole models.SysRole - - id, err := tools.StringToInt(c.Param("roleId")) - SysRole.RoleId = id - //var r *models.SysRole - r, err := SysRole.Get() - - var result *[]models.MenuLable - menuIds := make([]int, 0) - if r.RoleKey != "admin" { - result, err = Menu.SetMenuLabel() - tools.HasError(err, "抱歉未找到相关信息", -1) - if id != 0 { - menuIds, err = SysRole.GetRoleMeunId() - tools.HasError(err, "抱歉未找到相关信息", -1) - } - } - app.Custum(c, gin.H{ - "code": 200, - "menus": result, - "checkedKeys": menuIds, - }) -} - -// @Summary 获取菜单树 -// @Description 获取JSON -// @Tags 菜单 -// @Accept application/x-www-form-urlencoded -// @Product application/x-www-form-urlencoded -// @Success 200 {string} string "{"code": 200, "message": "添加成功"}" -// @Success 200 {string} string "{"code": -1, "message": "添加失败"}" -// @Router /api/v1/menuTreeselect [get] -// @Security Bearer -func GetMenuTreeelect(c *gin.Context) { - var data models.Menu - result, err := data.SetMenuLabel() - tools.HasError(err, "抱歉未找到相关信息", -1) - app.OK(c, result, "") -} - // @Summary 创建菜单 // @Description 获取JSON // @Tags 菜单 @@ -183,3 +140,46 @@ func GetMenuIDS(c *gin.Context) { tools.HasError(err, "获取失败", 500) app.OK(c, result, "") } + +// GetMenuTreeRoleselect 角色修改中的菜单列表 +func GetMenuTreeRoleselect(c *gin.Context) { + var Menu models.Menu + var SysRole models.SysRole + + id, err := tools.StringToInt(c.Param("roleId")) + SysRole.RoleId = id + //var r *models.SysRole + r, err := SysRole.Get() + + var result *[]models.MenuLable + menuIds := make([]int, 0) + if r.RoleKey != "admin" { + result, err = Menu.SetMenuLabel() + tools.HasError(err, "抱歉未找到相关信息", -1) + if id != 0 { + menuIds, err = SysRole.GetRoleMeunId() + tools.HasError(err, "抱歉未找到相关信息", -1) + } + } + app.Custum(c, gin.H{ + "code": 200, + "menus": result, + "checkedKeys": menuIds, + }) +} + +// @Summary 获取菜单树 +// @Description 获取JSON +// @Tags 菜单 +// @Accept application/x-www-form-urlencoded +// @Product application/x-www-form-urlencoded +// @Success 200 {string} string "{"code": 200, "message": "添加成功"}" +// @Success 200 {string} string "{"code": -1, "message": "添加失败"}" +// @Router /api/v1/menuTreeselect [get] +// @Security Bearer +func GetMenuTreeelect(c *gin.Context) { + var data models.Menu + result, err := data.SetMenuLabel() + tools.HasError(err, "抱歉未找到相关信息", -1) + app.OK(c, result, "") +} \ No newline at end of file diff --git a/app/admin/apis/system/sys_dept/sys_dept.go b/app/admin/apis/system/sys_dept/sys_dept.go index 2e2b3602..a564f7e6 100644 --- a/app/admin/apis/system/sys_dept/sys_dept.go +++ b/app/admin/apis/system/sys_dept/sys_dept.go @@ -3,7 +3,6 @@ package sys_dept import ( "github.com/gin-gonic/gin" "go-admin/app/admin/models" - "go-admin/app/admin/service" "go-admin/app/admin/service/dto" "go-admin/common/apis" @@ -34,17 +33,16 @@ func (e *SysDept) GetSysDeptList(c *gin.Context) { } list := make([]models.SysDept, 0) - var count int64 serviceStudent := service.SysDept{} serviceStudent.MsgID = msgID serviceStudent.Orm = db - err = serviceStudent.GetSysDeptPage(d, &list, &count) + list, err = serviceStudent.SetDeptPage(d) if err != nil { e.Error(c, http.StatusUnprocessableEntity, err, "查询失败") return } - e.PageOK(c, list, int(count), d.GetPageIndex(), d.GetPageSize(), "查询成功") + e.OK(c, list, "查询成功") } func (e *SysDept) GetSysDept(c *gin.Context) { @@ -172,3 +170,39 @@ func (e *SysDept) DeleteSysDept(c *gin.Context) { } e.OK(c, control.GetId(), "删除成功") } + +// GetDeptTree 用户管理 左侧部门树 +func (e *SysDept) GetDeptTree(c *gin.Context) { + msgID := tools.GenerateMsgIDFromContext(c) + d := new(dto.SysDeptSearch) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + //查询列表 + err = d.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + + list := make([]dto.DeptLabel, 0) + serviceStudent := service.SysDept{} + serviceStudent.MsgID = msgID + serviceStudent.Orm = db + list, err = serviceStudent.SetDeptTree(d) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "查询失败") + return + } + + //var Dept models.SysDepts + //Dept.DeptName = c.Request.FormValue("deptName") + //Dept.Status = c.Request.FormValue("status") + //Dept.DeptId, _ = tools.StringToInt(c.Request.FormValue("deptId")) + //result, err := Dept.SetDept(false) + //tools.HasError(err, "抱歉未找到相关信息", -1) + e.OK(c, list, "") +} \ No newline at end of file diff --git a/app/admin/apis/system/sys_menu/sys_menu.go b/app/admin/apis/system/sys_menu/sys_menu.go new file mode 100644 index 00000000..ab61c27d --- /dev/null +++ b/app/admin/apis/system/sys_menu/sys_menu.go @@ -0,0 +1,281 @@ +package sys_menu + +import ( + "github.com/gin-gonic/gin" + "go-admin/app/admin/models" + "go-admin/app/admin/service" + "go-admin/app/admin/service/dto" + "go-admin/common/apis" + "go-admin/common/log" + "go-admin/tools" + "go-admin/tools/app" + "net/http" +) + +type SysMenu struct { + apis.Api +} + +func (e *SysMenu) GetSysMenuList(c *gin.Context) { + msgID := tools.GenerateMsgIDFromContext(c) + d := new(dto.SysMenuSearch) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + //查询列表 + err = d.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + + var list *[]models.SysMenu + serviceSysMenu := service.SysMenu{} + serviceSysMenu.MsgID = msgID + serviceSysMenu.Orm = db + list, err = serviceSysMenu.GetSysMenuPage(d) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "查询失败") + return + } + + e.OK(c, list, "查询成功") +} + +func (e *SysMenu) GetSysMenu(c *gin.Context) { + control := new(dto.SysMenuById) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + msgID := tools.GenerateMsgIDFromContext(c) + //查看详情 + err = control.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + var object models.SysMenu + + serviceSysMenu := service.SysMenu{} + serviceSysMenu.MsgID = msgID + serviceSysMenu.Orm = db + err = serviceSysMenu.GetSysMenu(control, &object) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "查询失败") + return + } + + e.OK(c, object, "查看成功") +} + +func (e *SysMenu) InsertSysMenu(c *gin.Context) { + control := new(dto.SysMenuControl) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + msgID := tools.GenerateMsgIDFromContext(c) + //新增操作 + err = control.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + object, err := control.Generate() + if err != nil { + e.Error(c, http.StatusInternalServerError, err, "模型生成失败") + return + } + // 设置创建人 + object.SetCreateBy(tools.GetUserId(c)) + + serviceSysMenu := service.SysMenu{} + serviceSysMenu.Orm = db + serviceSysMenu.MsgID = msgID + err = serviceSysMenu.InsertSysMenu(object) + if err != nil { + log.Error(err) + e.Error(c, http.StatusInternalServerError, err, "创建失败") + return + } + + e.OK(c, object.GetId(), "创建成功") +} + +func (e *SysMenu) UpdateSysMenu(c *gin.Context) { + control := new(dto.SysMenuControl) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + msgID := tools.GenerateMsgIDFromContext(c) + //更新操作 + err = control.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + object, err := control.Generate() + if err != nil { + e.Error(c, http.StatusInternalServerError, err, "模型生成失败") + return + } + object.SetUpdateBy(tools.GetUserId(c)) + + serviceSysMenu := service.SysMenu{} + serviceSysMenu.Orm = db + serviceSysMenu.MsgID = msgID + err = serviceSysMenu.UpdateSysMenu(object) + if err != nil { + log.Error(err) + return + } + e.OK(c, object.GetId(), "更新成功") +} + +func (e *SysMenu) DeleteSysMenu(c *gin.Context) { + control := new(dto.SysMenuById) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + msgID := tools.GenerateMsgIDFromContext(c) + //删除操作 + err = control.Bind(c) + if err != nil { + log.Errorf("MsgID[%s] Bind error: %s", msgID, err) + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + + serviceSysMenu := service.SysMenu{} + serviceSysMenu.Orm = db + serviceSysMenu.MsgID = msgID + err = serviceSysMenu.RemoveSysMenu(control) + if err != nil { + log.Error(err) + return + } + e.OK(c, control.GetId(), "删除成功") +} + +// @Summary 根据角色名称获取菜单列表数据(左菜单使用) +// @Description 获取JSON +// @Tags 菜单 +// @Param id path int true "id" +// @Success 200 {string} string "{"code": 200, "data": [...]}" +// @Success 200 {string} string "{"code": -1, "message": "抱歉未找到相关信息"}" +// @Router /api/v1/menurole [get] +// @Security Bearer +func (e *SysMenu) GetMenuRole(c *gin.Context) { + msgID := tools.GenerateMsgIDFromContext(c) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + serviceSysMenu := service.SysMenu{} + serviceSysMenu.MsgID = msgID + serviceSysMenu.Orm = db + result, err := serviceSysMenu.SetMenuRole(tools.GetRoleName(c)) + + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "查询失败") + return + } + + app.OK(c, result, "") +} + +// @Summary 获取角色对应的菜单id数组 +// @Description 获取JSON +// @Tags 菜单 +// @Param id path int true "id" +// @Success 200 {string} string "{"code": 200, "data": [...]}" +// @Success 200 {string} string "{"code": -1, "message": "抱歉未找到相关信息"}" +// @Router /api/v1/menuids/{id} [get] +// @Security Bearer +func (e *SysMenu) GetMenuIDS(c *gin.Context) { + var data models.RoleMenu + data.RoleName = c.GetString("role") + data.UpdateBy = tools.GetUserIdStr(c) + result, err := data.GetIDS() + tools.HasError(err, "获取失败", 500) + app.OK(c, result, "") +} + +// GetMenuTreeRoleselect 角色修改中的菜单列表 +func (e *SysMenu) GetMenuTreeRoleselect(c *gin.Context) { + var Menu models.Menu + var SysRole models.SysRole + + id, err := tools.StringToInt(c.Param("roleId")) + SysRole.RoleId = id + //var r *models.SysRole + r, err := SysRole.Get() + + var result *[]models.MenuLable + menuIds := make([]int, 0) + if r.RoleKey != "admin" { + result, err = Menu.SetMenuLabel() + tools.HasError(err, "抱歉未找到相关信息", -1) + if id != 0 { + menuIds, err = SysRole.GetRoleMeunId() + tools.HasError(err, "抱歉未找到相关信息", -1) + } + } + app.Custum(c, gin.H{ + "code": 200, + "menus": result, + "checkedKeys": menuIds, + }) +} + +// @Summary 获取菜单树 +// @Description 获取JSON +// @Tags 菜单 +// @Accept application/x-www-form-urlencoded +// @Product application/x-www-form-urlencoded +// @Success 200 {string} string "{"code": 200, "message": "添加成功"}" +// @Success 200 {string} string "{"code": -1, "message": "添加失败"}" +// @Router /api/v1/menuTreeselect [get] +// @Security Bearer +func (e *SysMenu) GetMenuTreeSelect(c *gin.Context) { + msgID := tools.GenerateMsgIDFromContext(c) + d := new(dto.SysMenuSearch) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + err = d.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + + serviceSysMenu := service.SysMenu{} + serviceSysMenu.MsgID = msgID + serviceSysMenu.Orm = db + result, err := serviceSysMenu.SetSysMenuLabel(d) + + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "查询失败") + return + } + e.OK(c, result, "") +} diff --git a/app/admin/apis/system/sys_post/sys_post.go b/app/admin/apis/system/sys_post/sys_post.go new file mode 100644 index 00000000..8ab880fc --- /dev/null +++ b/app/admin/apis/system/sys_post/sys_post.go @@ -0,0 +1,174 @@ +package sys_post + +import ( + "github.com/gin-gonic/gin" + + "go-admin/app/admin/models/system" + "go-admin/app/admin/service" + "go-admin/app/admin/service/dto" + "go-admin/common/apis" + "go-admin/common/log" + "go-admin/tools" + + "net/http" +) + +type SysPost struct { + apis.Api +} + +func (e *SysPost) GetSysPostList(c *gin.Context) { + msgID := tools.GenerateMsgIDFromContext(c) + d := new(dto.SysPostSearch) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + //查询列表 + err = d.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + + list := make([]system.SysPost, 0) + var count int64 + serviceStudent := service.SysPost{} + serviceStudent.MsgID = msgID + serviceStudent.Orm = db + err = serviceStudent.GetSysPostPage(d, &list, &count) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "查询失败") + return + } + + e.PageOK(c, list, int(count), d.GetPageIndex(), d.GetPageSize(), "查询成功") +} + +func (e *SysPost) GetSysPost(c *gin.Context) { + control := new(dto.SysPostById) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + msgID := tools.GenerateMsgIDFromContext(c) + //查看详情 + err = control.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + var object system.SysPost + + serviceSysOperlog := service.SysPost{} + serviceSysOperlog.MsgID = msgID + serviceSysOperlog.Orm = db + err = serviceSysOperlog.GetSysPost(control, &object) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "查询失败") + return + } + + e.OK(c, object, "查看成功") +} + +func (e *SysPost) InsertSysPost(c *gin.Context) { + control := new(dto.SysPostControl) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + msgID := tools.GenerateMsgIDFromContext(c) + //新增操作 + err = control.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + object, err := control.Generate() + if err != nil { + e.Error(c, http.StatusInternalServerError, err, "模型生成失败") + return + } + // 设置创建人 + object.SetCreateBy(tools.GetUserId(c)) + + serviceSysPost := service.SysPost{} + serviceSysPost.Orm = db + serviceSysPost.MsgID = msgID + err = serviceSysPost.InsertSysPost(object) + if err != nil { + log.Error(err) + e.Error(c, http.StatusInternalServerError, err, "创建失败") + return + } + + e.OK(c, object.GetId(), "创建成功") +} + +func (e *SysPost) UpdateSysPost(c *gin.Context) { + control := new(dto.SysPostControl) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + msgID := tools.GenerateMsgIDFromContext(c) + //更新操作 + err = control.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + object, err := control.Generate() + if err != nil { + e.Error(c, http.StatusInternalServerError, err, "模型生成失败") + return + } + object.SetUpdateBy(tools.GetUserId(c)) + + serviceSysPost := service.SysPost{} + serviceSysPost.Orm = db + serviceSysPost.MsgID = msgID + err = serviceSysPost.UpdateSysPost(object) + if err != nil { + log.Error(err) + return + } + e.OK(c, object.GetId(), "更新成功") +} + +func (e *SysPost) DeleteSysPost(c *gin.Context) { + control := new(dto.SysPostById) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + msgID := tools.GenerateMsgIDFromContext(c) + //删除操作 + err = control.Bind(c) + if err != nil { + log.Errorf("MsgID[%s] Bind error: %s", msgID, err) + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + + serviceSysPost := service.SysPost{} + serviceSysPost.Orm = db + serviceSysPost.MsgID = msgID + err = serviceSysPost.RemoveSysPost(control) + if err != nil { + log.Error(err) + return + } + e.OK(c, control.GetId(), "删除成功") +} diff --git a/app/admin/apis/system/sys_role/sys_role.go b/app/admin/apis/system/sys_role/sys_role.go new file mode 100644 index 00000000..2e535d74 --- /dev/null +++ b/app/admin/apis/system/sys_role/sys_role.go @@ -0,0 +1,175 @@ +package sys_role + +import ( + "github.com/gin-gonic/gin" + + "go-admin/app/admin/models/system" + "go-admin/app/admin/service" + "go-admin/app/admin/service/dto" + "go-admin/common/apis" + "go-admin/common/log" + "go-admin/tools" + + "net/http" +) + +type SysRole struct { + apis.Api +} + +func (e *SysRole) GetSysRoleList(c *gin.Context) { + msgID := tools.GenerateMsgIDFromContext(c) + d := new(dto.SysRoleSearch) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + //查询列表 + err = d.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + + list := make([]system.SysRole, 0) + var count int64 + serviceStudent := service.SysRole{} + serviceStudent.MsgID = msgID + serviceStudent.Orm = db + err = serviceStudent.GetSysRolePage(d, &list, &count) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "查询失败") + return + } + + e.PageOK(c, list, int(count), d.GetPageIndex(), d.GetPageSize(), "查询成功") +} + +func (e *SysRole) GetSysRole(c *gin.Context) { + control := new(dto.SysRoleById) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + msgID := tools.GenerateMsgIDFromContext(c) + //查看详情 + err = control.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + var object system.SysRole + + serviceSysOperlog := service.SysRole{} + serviceSysOperlog.MsgID = msgID + serviceSysOperlog.Orm = db + err = serviceSysOperlog.GetSysRole(control, &object) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "查询失败") + return + } + + e.OK(c, object, "查看成功") +} + +func (e *SysRole) InsertSysRole(c *gin.Context) { + control := new(dto.SysRoleControl) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + msgID := tools.GenerateMsgIDFromContext(c) + //新增操作 + err = control.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + object, err := control.Generate() + if err != nil { + e.Error(c, http.StatusInternalServerError, err, "模型生成失败") + return + } + // 设置创建人 + object.CreateBy= tools.GetUserId(c) + + serviceSysRole := service.SysRole{} + serviceSysRole.Orm = db + serviceSysRole.MsgID = msgID + err = serviceSysRole.InsertSysRole(object) + if err != nil { + log.Error(err) + e.Error(c, http.StatusInternalServerError, err, "创建失败") + return + } + + e.OK(c, object.GetId(), "创建成功") +} + +func (e *SysRole) UpdateSysRole(c *gin.Context) { + control := new(dto.SysRoleControl) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + msgID := tools.GenerateMsgIDFromContext(c) + //更新操作 + err = control.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + object, err := control.Generate() + if err != nil { + e.Error(c, http.StatusInternalServerError, err, "模型生成失败") + return + } + object.UpdateBy = tools.GetUserId(c) + + serviceSysRole := service.SysRole{} + serviceSysRole.Orm = db + serviceSysRole.MsgID = msgID + err = serviceSysRole.UpdateSysRole(object) + if err != nil { + log.Error(err) + return + } + e.OK(c, object.GetId(), "更新成功") +} + +func (e *SysRole) DeleteSysRole(c *gin.Context) { + control := new(dto.SysRoleById) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } + + msgID := tools.GenerateMsgIDFromContext(c) + //删除操作 + err = control.Bind(c) + if err != nil { + log.Errorf("MsgID[%s] Bind error: %s", msgID, err) + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + + serviceSysRole := service.SysRole{} + serviceSysRole.Orm = db + serviceSysRole.MsgID = msgID + err = serviceSysRole.RemoveSysRole(control) + if err != nil { + log.Error(err) + return + } + e.OK(c, control.GetId(), "删除成功") +} + diff --git a/app/admin/models/system/sys_post.go b/app/admin/models/system/sys_post.go new file mode 100644 index 00000000..352f7064 --- /dev/null +++ b/app/admin/models/system/sys_post.go @@ -0,0 +1,30 @@ +package system + +import "go-admin/common/models" + +type SysPost struct { + PostId int `gorm:"primary_key;AUTO_INCREMENT" json:"postId"` //岗位编号 + PostName string `gorm:"size:128;" json:"postName"` //岗位名称 + PostCode string `gorm:"size:128;" json:"postCode"` //岗位代码 + Sort int `gorm:"" json:"sort"` //岗位排序 + Status int `gorm:"size:4;" json:"status"` //状态 + Remark string `gorm:"size:255;" json:"remark"` //描述 + models.ControlBy + models.ModelTime + + DataScope string `gorm:"-" json:"dataScope"` + Params string `gorm:"-" json:"params"` +} + +func (SysPost) TableName() string { + return "sys_post" +} + +func (e *SysPost) Generate() models.ActiveRecord { + o := *e + return &o +} + +func (e *SysPost) GetId() interface{} { + return e.PostId +} diff --git a/app/admin/models/system/sys_role.go b/app/admin/models/system/sys_role.go new file mode 100644 index 00000000..b3c1482a --- /dev/null +++ b/app/admin/models/system/sys_role.go @@ -0,0 +1,33 @@ +package system + +import "go-admin/common/models" + +type SysRole struct { + RoleId int `json:"roleId" gorm:"primary_key;AUTO_INCREMENT"` // 角色编码 + RoleName string `json:"roleName" gorm:"size:128;"` // 角色名称 + Status string `json:"status" gorm:"size:4;"` // + RoleKey string `json:"roleKey" gorm:"size:128;"` //角色代码 + RoleSort int `json:"roleSort" gorm:""` //角色排序 + Flag string `json:"flag" gorm:"size:128;"` // + Remark string `json:"remark" gorm:"size:255;"` //备注 + Admin bool `json:"admin" gorm:"size:4;"` + DataScope string `json:"dataScope" gorm:"size:128;"` + models.ControlBy + models.ModelTime + Params string `json:"params" gorm:"-"` + MenuIds []int `json:"menuIds" gorm:"-"` + DeptIds []int `json:"deptIds" gorm:"-"` +} + +func (SysRole) TableName() string { + return "sys_role" +} + +func (e *SysRole) Generate() models.ActiveRecord { + o := *e + return &o +} + +func (e *SysRole) GetId() interface{} { + return e.RoleId +} diff --git a/app/admin/router/sys_dept.go b/app/admin/router/sys_dept.go new file mode 100644 index 00000000..432d0d73 --- /dev/null +++ b/app/admin/router/sys_dept.go @@ -0,0 +1,32 @@ +package router + +import ( + "github.com/gin-gonic/gin" + "go-admin/app/admin/apis/system/sys_dept" + "go-admin/app/admin/middleware" + jwt "go-admin/pkg/jwtauth" +) + +func init() { + routerCheckRole = append(routerCheckRole, registerSysDeptRouter) +} + +// 需认证的路由代码 +func registerSysDeptRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { + api := &sys_dept.SysDept{} + r := v1.Group("/dept").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) + { + r.GET("", api.GetSysDeptList) + r.GET("/:id", api.GetSysDept) + r.POST("", api.InsertSysDept) + r.PUT("/:id", api.UpdateSysDept) + r.DELETE("/:id", api.DeleteSysDept) + } + + r1 := v1.Group("").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) + { + r1.GET("/deptTree", api.GetDeptTree) + } + + +} diff --git a/app/admin/router/sys_menu.go b/app/admin/router/sys_menu.go new file mode 100644 index 00000000..1b34dfa3 --- /dev/null +++ b/app/admin/router/sys_menu.go @@ -0,0 +1,39 @@ +package router + +import ( + "github.com/gin-gonic/gin" + "go-admin/app/admin/apis/system/sys_menu" + "go-admin/app/admin/middleware" + jwt "go-admin/pkg/jwtauth" +) + +func init() { + routerCheckRole = append(routerCheckRole, registerSysMenuRouter) +} + +// 需认证的路由代码 +func registerSysMenuRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { + api := &sys_menu.SysMenu{} + //menu := v1.Group("/menu").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) + //{ + // menu.GET("/:id", system.GetMenu) + // menu.POST("", system.InsertMenu) + // menu.PUT("", system.UpdateMenu) + // menu.DELETE("/:id", system.DeleteMenu) + //} + r := v1.Group("/menu").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) + { + r.GET("", api.GetSysMenuList) + r.GET("/:id", api.GetSysMenu) + r.POST("", api.InsertSysMenu) + r.PUT("/:id", api.UpdateSysMenu) + r.DELETE("/:id", api.DeleteSysMenu) + } + + r1 := v1.Group("").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) + { + r1.GET("/menurole", api.GetMenuRole) + } + + +} diff --git a/app/admin/router/sys_post.go b/app/admin/router/sys_post.go new file mode 100644 index 00000000..17c1ce71 --- /dev/null +++ b/app/admin/router/sys_post.go @@ -0,0 +1,26 @@ +package router + +import ( + "github.com/gin-gonic/gin" + "go-admin/app/admin/apis/system/sys_post" + "go-admin/app/admin/middleware" + jwt "go-admin/pkg/jwtauth" +) + +func init() { + routerCheckRole = append(routerCheckRole, registerSyPostRouter) +} + +// 需认证的路由代码 +func registerSyPostRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { + api := &sys_post.SysPost{} + r := v1.Group("/post").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) + { + r.GET("", api.GetSysPostList) + r.GET("/:id", api.GetSysPost) + r.POST("", api.InsertSysPost) + r.PUT("/:id", api.UpdateSysPost) + r.DELETE("/:id", api.DeleteSysPost) + } +} + diff --git a/app/admin/router/sys_role.go b/app/admin/router/sys_role.go new file mode 100644 index 00000000..189c0e6c --- /dev/null +++ b/app/admin/router/sys_role.go @@ -0,0 +1,25 @@ +package router + +import ( + "github.com/gin-gonic/gin" + "go-admin/app/admin/apis/system/sys_role" + "go-admin/app/admin/middleware" + jwt "go-admin/pkg/jwtauth" +) + +func init() { + routerCheckRole = append(routerCheckRole, registerSysRoleRouter) +} + +// 需认证的路由代码 +func registerSysRoleRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { + api := &sys_role.SysRole{} + r := v1.Group("/role").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) + { + r.GET("", api.GetSysRoleList) + r.GET("/:id", api.GetSysRole) + r.POST("", api.InsertSysRole) + r.PUT("/:id", api.UpdateSysRole) + r.DELETE("/:id", api.DeleteSysRole) + } +} diff --git a/app/admin/router/sysrouter.go b/app/admin/router/sysrouter.go index 9e68d750..774a1413 100644 --- a/app/admin/router/sysrouter.go +++ b/app/admin/router/sysrouter.go @@ -104,20 +104,20 @@ func sysCheckRoleRouterInit(r *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddle registerPageRouter(v1, authMiddleware) registerBaseRouter(v1, authMiddleware) - registerDeptRouter(v1, authMiddleware) + //registerDeptRouter(v1, authMiddleware) registerDictRouter(v1, authMiddleware) registerSysUserRouter(v1, authMiddleware) - registerRoleRouter(v1, authMiddleware) + //registerRoleRouter(v1, authMiddleware) registerUserCenterRouter(v1, authMiddleware) - registerPostRouter(v1, authMiddleware) - registerMenuRouter(v1, authMiddleware) + //registerPostRouter(v1, authMiddleware) + //registerMenuRouter(v1, authMiddleware) } func registerBaseRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { v1auth := v1.Group("").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) { v1auth.GET("/getinfo", system.GetInfo) - v1auth.GET("/menurole", system.GetMenuRole) + v1auth.PUT("/roledatascope", system.UpdateRoleDataScope) v1auth.GET("/roleMenuTreeselect/:roleId", system.GetMenuTreeRoleselect) v1auth.GET("/roleDeptTreeselect/:roleId", system.GetDeptTreeRoleselect) @@ -130,13 +130,13 @@ func registerBaseRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddlewar func registerPageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { v1auth := v1.Group("").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) { - v1auth.GET("/deptList", system.GetDeptList) - v1auth.GET("/deptTree", system.GetDeptTree) + //v1auth.GET("/deptList", system.GetDeptList) + //v1auth.GET("/deptTree", system.GetDeptTree) v1auth.GET("/sysUserList", system.GetSysUserList) - v1auth.GET("/rolelist", system.GetRoleList) + //v1auth.GET("/rolelist", system.GetRoleList) //v1auth.GET("/configList", system.GetConfigList) - v1auth.GET("/postlist", system.GetPostList) - v1auth.GET("/menulist", system.GetMenuList) + //v1auth.GET("/postlist", system.GetPostList) + //v1auth.GET("/menulist", system.GetMenuList) } } @@ -159,15 +159,15 @@ func registerPostRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddlewar } } -func registerMenuRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { - menu := v1.Group("/menu").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) - { - menu.GET("/:id", system.GetMenu) - menu.POST("", system.InsertMenu) - menu.PUT("", system.UpdateMenu) - menu.DELETE("/:id", system.DeleteMenu) - } -} +//func registerMenuRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { +// menu := v1.Group("/menu").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) +// { +// menu.GET("/:id", system.GetMenu) +// menu.POST("", system.InsertMenu) +// menu.PUT("", system.UpdateMenu) +// menu.DELETE("/:id", system.DeleteMenu) +// } +//} func registerRoleRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { role := v1.Group("/role").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) @@ -209,15 +209,15 @@ func registerDictRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddlewar } } -func registerDeptRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { - dept := v1.Group("/dept").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) - { - dept.GET("/:deptId", system.GetDept) - dept.POST("", system.InsertDept) - dept.PUT("", system.UpdateDept) - dept.DELETE("/:id", system.DeleteDept) - } -} +//func registerDeptRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { +// dept := v1.Group("/dept").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) +// { +// dept.GET("/:deptId", system.GetDept) +// dept.POST("", system.InsertDept) +// dept.PUT("", system.UpdateDept) +// dept.DELETE("/:id", system.DeleteDept) +// } +//} func registerSysSettingRouter(v1 *gin.RouterGroup) { api := system.SysSetting{} setting := v1.Group("/setting") diff --git a/app/admin/service/dto/sys_dept.go b/app/admin/service/dto/sys_dept.go index 1d48de80..4e1133d2 100644 --- a/app/admin/service/dto/sys_dept.go +++ b/app/admin/service/dto/sys_dept.go @@ -13,6 +13,7 @@ import ( // SysConfigSearch 列表或者搜索使用结构体 type SysDeptSearch struct { dto.Pagination `search:"-"` + DeptId int `form:"deptId" search:"type:exact;column:dept_id;table:sys_dept" comment:"id"` //id ParentId int `form:"parentId" search:"type:exact;column:parent_id;table:sys_dept" comment:"上级部门"` //上级部门 DeptPath string `form:"deptPath" search:"type:exact;column:dept_path;table:sys_dept" comment:""` //路径 DeptName string `form:"deptName" search:"type:exact;column:dept_name;table:sys_dept" comment:"部门名称"` //部门名称 @@ -128,4 +129,4 @@ type DeptLabel struct { Id int `gorm:"-" json:"id"` Label string `gorm:"-" json:"label"` Children []DeptLabel `gorm:"-" json:"children"` -} \ No newline at end of file +} diff --git a/app/admin/service/dto/sys_post.go b/app/admin/service/dto/sys_post.go new file mode 100644 index 00000000..59df058e --- /dev/null +++ b/app/admin/service/dto/sys_post.go @@ -0,0 +1,117 @@ +package dto + +import ( + "encoding/json" + "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" + "go-admin/app/admin/models/system" + "go-admin/common/dto" + "go-admin/common/log" + "go-admin/tools" +) + +// SysPostSearch 列表或者搜索使用结构体 +type SysPostSearch struct { + dto.Pagination `search:"-"` + PostId int `form:"postId" search:"type:exact;column:post_id;table:sys_post" comment:"id"` // id + PostName string `form:"postName" search:"type:exact;column:post_name;table:sys_post" comment:"名称"` // 名称 + PostCode string `form:"postCode" search:"type:exact;column:post_code;table:sys_post" comment:"编码"` // 编码 + Sort int `form:"sort" search:"type:exact;column:sort;table:sys_post" comment:"排序"` // 排序 + Status int `form:"status" search:"type:exact;column:status;table:sys_post" comment:"状态"` // 状态 + Remark string `form:"remark" search:"type:exact;column:remark;table:sys_post" comment:"备注"` // 备注 +} + +func (m *SysPostSearch) GetNeedSearch() interface{} { + return *m +} + +// Bind 映射上下文中的结构体数据 +func (m *SysPostSearch) Bind(ctx *gin.Context) error { + msgID := tools.GenerateMsgIDFromContext(ctx) + err := ctx.ShouldBind(m) + if err != nil { + log.Debugf("MsgID[%s] ShouldBind error: %s", msgID, err.Error()) + } + return err +} + +// SysConfigControl 增、改使用的结构体 +type SysPostControl struct { + PostId int `uri:"id" comment:"id"` // id + PostName string `form:"postName" comment:"名称"` // 名称 + PostCode string `form:"postCode" comment:"编码"` // 编码 + Sort int `form:"sort" comment:"排序"` // 排序 + Status int `form:"status" comment:"状态"` // 状态 + Remark string `form:"remark" comment:"备注"` // 备注 +} + +// Bind 映射上下文中的结构体数据 +func (s *SysPostControl) Bind(ctx *gin.Context) error { + msgID := tools.GenerateMsgIDFromContext(ctx) + err := ctx.ShouldBindUri(s) + if err != nil { + log.Debugf("MsgID[%s] ShouldBindUri error: %s", msgID, err.Error()) + return err + } + err = ctx.ShouldBindBodyWith(s, binding.JSON) + if err != nil { + log.Debugf("MsgID[%s] ShouldBind error: %#v", msgID, err.Error()) + } + var jsonStr []byte + jsonStr, err = json.Marshal(s) + if err != nil { + log.Debugf("MsgID[%s] ShouldBind error: %#v", msgID, err.Error()) + } + ctx.Set("body", string(jsonStr)) + return err +} + +// Generate 结构体数据转化 从 SysConfigControl 至 system.SysConfig 对应的模型 +func (s *SysPostControl) Generate() (*system.SysPost, error) { + return &system.SysPost{ + PostId: s.PostId, + PostName: s.PostName, + PostCode: s.PostCode, + Sort: s.Sort, + Status: s.Status, + Remark: s.Remark, + }, nil +} + +// GetId 获取数据对应的ID +func (s *SysPostControl) GetId() interface{} { + return s.PostId +} + +// SysConfigById 获取单个或者删除的结构体 +type SysPostById struct { + Id int `uri:"id"` + Ids []int `json:"ids"` +} + +func (s *SysPostById) Generate() *SysPostById { + cp := *s + return &cp +} + +func (s *SysPostById) GetId() interface{} { + return s.Id +} + +func (s *SysPostById) Bind(ctx *gin.Context) error { + msgID := tools.GenerateMsgIDFromContext(ctx) + err := ctx.ShouldBindUri(s) + if err != nil { + log.Debugf("MsgID[%s] ShouldBindUri error: %s", msgID, err.Error()) + return err + } + err = ctx.ShouldBind(s) + if err != nil { + log.Debugf("MsgID[%s] ShouldBind error: %#v", msgID, err.Error()) + } + return err +} + +func (s *SysPostById) GenerateM() (*system.SysPost, error) { + return &system.SysPost{}, nil +} diff --git a/app/admin/service/dto/sys_role.go b/app/admin/service/dto/sys_role.go new file mode 100644 index 00000000..26effbeb --- /dev/null +++ b/app/admin/service/dto/sys_role.go @@ -0,0 +1,128 @@ +package dto + +import ( + "encoding/json" + "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" + "go-admin/app/admin/models" + "go-admin/app/admin/models/system" + "go-admin/common/dto" + "go-admin/common/log" + "go-admin/tools" +) + +// SysRoleSearch 列表或者搜索使用结构体 +type SysRoleSearch struct { + dto.Pagination `search:"-"` + + RoleId int `form:"roleId" search:"type:exact;column:role_id;table:sys_role" comment:"角色编码"` // 角色编码 + RoleName string `form:"roleName" search:"type:exact;column:role_name;table:sys_role" comment:"角色名称"` // 角色名称 + Status string `form:"status" search:"type:exact;column:status;table:sys_role" comment:"状态"` // 状态 + RoleKey string `form:"roleKey" search:"type:exact;column:role_key;table:sys_role" comment:"角色代码"` // 角色代码 + RoleSort int `form:"roleSort" search:"type:exact;column:role_sort;table:sys_role" comment:"角色排序"` // 角色排序 + Flag string `form:"flag" search:"type:exact;column:flag;table:sys_role" comment:"标记"` // 标记 + Remark string `form:"remark" search:"type:exact;column:remark;table:sys_role" comment:"备注"` // 备注 + Admin bool `form:"admin" search:"type:exact;column:admin;table:sys_role" comment:"是否管理员"` + DataScope string `form:"dataScope" search:"type:exact;column:data_scope;table:sys_role" comment:"是否管理员"` +} + +func (m *SysRoleSearch) GetNeedSearch() interface{} { + return *m +} + +// Bind 映射上下文中的结构体数据 +func (m *SysRoleSearch) Bind(ctx *gin.Context) error { + msgID := tools.GenerateMsgIDFromContext(ctx) + err := ctx.ShouldBind(m) + if err != nil { + log.Debugf("MsgID[%s] ShouldBind error: %s", msgID, err.Error()) + } + return err +} + +// SysConfigControl 增、改使用的结构体 +type SysRoleControl struct { + RoleId int `uri:"roleId" comment:"角色编码"` // 角色编码 + RoleName string `form:"roleName" comment:"角色名称"` // 角色名称 + Status string `form:"status" comment:"状态"` // 状态 + RoleKey string `form:"roleKey" comment:"角色代码"` // 角色代码 + RoleSort int `form:"roleSort" comment:"角色排序"` // 角色排序 + Flag string `form:"flag" comment:"标记"` // 标记 + Remark string `form:"remark" comment:"备注"` // 备注 + Admin bool `form:"admin" comment:"是否管理员"` + DataScope string `form:"dataScope" comment:"是否管理员"` +} + +// Bind 映射上下文中的结构体数据 +func (s *SysRoleControl) Bind(ctx *gin.Context) error { + msgID := tools.GenerateMsgIDFromContext(ctx) + err := ctx.ShouldBindUri(s) + if err != nil { + log.Debugf("MsgID[%s] ShouldBindUri error: %s", msgID, err.Error()) + return err + } + err = ctx.ShouldBindBodyWith(s, binding.JSON) + if err != nil { + log.Debugf("MsgID[%s] ShouldBind error: %#v", msgID, err.Error()) + } + var jsonStr []byte + jsonStr, err = json.Marshal(s) + if err != nil { + log.Debugf("MsgID[%s] ShouldBind error: %#v", msgID, err.Error()) + } + ctx.Set("body", string(jsonStr)) + return err +} + +// Generate 结构体数据转化 从 SysConfigControl 至 system.SysConfig 对应的模型 +func (s *SysRoleControl) Generate() (*system.SysRole, error) { + return &system.SysRole{ + RoleId: s.RoleId, + RoleName: s.RoleName, + Status: s.Status, + RoleKey: s.RoleKey, + RoleSort: s.RoleSort, + Flag: s.Flag, + Remark: s.Remark, + Admin: s.Admin, + DataScope: s.DataScope, + }, nil +} + +// GetId 获取数据对应的ID +func (s *SysRoleControl) GetId() interface{} { + return s.RoleId +} + +// SysConfigById 获取单个或者删除的结构体 +type SysRoleById struct { + Id int `uri:"id"` + Ids []int `json:"ids"` +} + +func (s *SysRoleById) Generate() *SysRoleById { + cp := *s + return &cp +} + +func (s *SysRoleById) GetId() interface{} { + return s.Id +} + +func (s *SysRoleById) Bind(ctx *gin.Context) error { + msgID := tools.GenerateMsgIDFromContext(ctx) + err := ctx.ShouldBindUri(s) + if err != nil { + log.Debugf("MsgID[%s] ShouldBindUri error: %s", msgID, err.Error()) + return err + } + err = ctx.ShouldBind(s) + if err != nil { + log.Debugf("MsgID[%s] ShouldBind error: %#v", msgID, err.Error()) + } + return err +} + +func (s *SysRoleById) GenerateM() (*models.SysRole, error) { + return &models.SysRole{}, nil +} diff --git a/app/admin/service/sys_dept.go b/app/admin/service/sys_dept.go index 7cf85b16..5078c04e 100644 --- a/app/admin/service/sys_dept.go +++ b/app/admin/service/sys_dept.go @@ -15,7 +15,7 @@ type SysDept struct { } // GetSysDeptPage 获取SysDept列表 -func (e *SysDept) GetSysDeptPage(c *dto.SysDeptSearch, list *[]models.SysDept, count *int64) error { +func (e *SysDept) GetSysDeptPage(c *dto.SysDeptSearch, list *[]models.SysDept) error { var err error var data models.SysDept msgID := e.MsgID @@ -23,10 +23,8 @@ func (e *SysDept) GetSysDeptPage(c *dto.SysDeptSearch, list *[]models.SysDept, c err = e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), - cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), ). - Find(list).Limit(-1).Offset(-1). - Count(count).Error + Find(list).Error if err != nil { log.Errorf("msgID[%s] db error:%s", msgID, err) return err @@ -110,7 +108,7 @@ func (e *SysDept) RemoveSysDept(d *dto.SysDeptById) error { } // GetSysDeptList 获取组织数据 -func (e *SysDept) GetSysDeptList(c *dto.SysDeptSearch, list *[]models.SysDept) error { +func (e *SysDept) getSysDeptList(c *dto.SysDeptSearch, list *[]models.SysDept) error { var err error var data models.SysDept msgID := e.MsgID @@ -128,9 +126,9 @@ func (e *SysDept) GetSysDeptList(c *dto.SysDeptSearch, list *[]models.SysDept) e } // SetDeptTree 设置组织数据 -func (e *SysDept) SetDeptTree() (c *dto.SysDeptSearch, m []dto.DeptLabel, err error) { +func (e *SysDept) SetDeptTree(c *dto.SysDeptSearch) (m []dto.DeptLabel, err error) { var list []models.SysDept - err = e.GetSysDeptList(c, &list) + err = e.getSysDeptList(c, &list) m = make([]dto.DeptLabel, 0) for i := 0; i < len(list); i++ { @@ -140,7 +138,7 @@ func (e *SysDept) SetDeptTree() (c *dto.SysDeptSearch, m []dto.DeptLabel, err er e := dto.DeptLabel{} e.Id = list[i].DeptId e.Label = list[i].DeptName - deptsInfo := DeptCall(&list, e) + deptsInfo := deptTreeCall(&list, e) m = append(m, deptsInfo) } @@ -148,7 +146,7 @@ func (e *SysDept) SetDeptTree() (c *dto.SysDeptSearch, m []dto.DeptLabel, err er } // Call 递归构造组织数据 -func DeptCall(deptlist *[]models.SysDept, dept dto.DeptLabel) dto.DeptLabel { +func deptTreeCall(deptlist *[]models.SysDept, dept dto.DeptLabel) dto.DeptLabel { list := *deptlist min := make([]dto.DeptLabel, 0) for j := 0; j < len(list); j++ { @@ -156,9 +154,55 @@ func DeptCall(deptlist *[]models.SysDept, dept dto.DeptLabel) dto.DeptLabel { continue } mi := dto.DeptLabel{Id: list[j].DeptId, Label: list[j].DeptName, Children: []dto.DeptLabel{}} - ms := DeptCall(deptlist, mi) + ms := deptTreeCall(deptlist, mi) min = append(min, ms) } dept.Children = min return dept } + +// SetDeptPage 设置dept页面数据 +func (e *SysDept) SetDeptPage(c *dto.SysDeptSearch) (m []models.SysDept, err error) { + var list []models.SysDept + err = e.getSysDeptList(c, &list) + + //m := make([]models.SysDept, 0) + for i := 0; i < len(list); i++ { + if list[i].ParentId != 0 { + continue + } + info := e.deptPageCall(&list, list[i]) + + m = append(m, info) + } + return +} + +func (e *SysDept) deptPageCall(deptlist *[]models.SysDept, menu models.SysDept) models.SysDept { + list := *deptlist + + min := make([]models.SysDept, 0) + for j := 0; j < len(list); j++ { + + if menu.DeptId != list[j].ParentId { + continue + } + mi := models.SysDept{} + mi.DeptId = list[j].DeptId + mi.ParentId = list[j].ParentId + mi.DeptPath = list[j].DeptPath + mi.DeptName = list[j].DeptName + mi.Sort = list[j].Sort + mi.Leader = list[j].Leader + mi.Phone = list[j].Phone + mi.Email = list[j].Email + mi.Status = list[j].Status + mi.CreatedAt = list[j].CreatedAt + mi.Children = []models.SysDept{} + ms := e.deptPageCall(deptlist, mi) + min = append(min, ms) + + } + menu.Children = min + return menu +} diff --git a/app/admin/service/sys_menu.go b/app/admin/service/sys_menu.go index f833bd41..024a9ad9 100644 --- a/app/admin/service/sys_menu.go +++ b/app/admin/service/sys_menu.go @@ -16,6 +16,23 @@ type SysMenu struct { } // GetSysMenuPage 获取SysMenu列表 +func (e *SysMenu) GetSysMenuPage(c *dto.SysMenuSearch) (*[]models.SysMenu, error) { + var m = make([]models.SysMenu, 0) + var err error + var menu = make([]models.SysMenu, 0) + err = e.getSysMenuPage(c, &menu) + for i := 0; i < len(menu); i++ { + if menu[i].ParentId != 0 { + continue + } + menusInfo := menuCall(&menu, menu[i]) + + m = append(m, menusInfo) + } + return &m, err +} + +// getSysMenuPage 菜单列表 func (e *SysMenu) getSysMenuPage(c *dto.SysMenuSearch, list *[]models.SysMenu) error { var err error var data models.SysMenu @@ -23,6 +40,7 @@ func (e *SysMenu) getSysMenuPage(c *dto.SysMenuSearch, list *[]models.SysMenu) e err = e.Orm.Model(&data). Scopes( + cDto.OrderDest("sort", false), cDto.MakeCondition(c.GetNeedSearch()), ). Find(list).Error @@ -145,7 +163,7 @@ func (e *SysMenu) GetSysMenuList(c *dto.SysMenuSearch, list *[]models.SysMenu) e } // SetSysMenuTree 设置菜单数据 -func (e *SysMenu) SetSysMenuTree() (c *dto.SysMenuSearch, m []dto.MenuLabel, err error) { +func (e *SysMenu) SetSysMenuLabel(c *dto.SysMenuSearch) (m []dto.MenuLabel, err error) { var list []models.SysMenu err = e.GetSysMenuList(c, &list) @@ -164,6 +182,29 @@ func (e *SysMenu) SetSysMenuTree() (c *dto.SysMenuSearch, m []dto.MenuLabel, err return } +// 左侧菜单 +func (e *SysMenu) GetSysMenuByRoleName(roleName string) (Menus []models.SysMenu, err error) { + var table *gorm.DB + var data models.SysMenu + msgID := e.MsgID + + if roleName == "admin" { + table = e.Orm.Model(&data).Select("sys_menu.*") + table = table.Where(" menu_type in ('M','C')") + } else { + table = e.Orm.Model(&data).Select("sys_menu.*").Joins("left join sys_role_menu on sys_role_menu.menu_id=sys_menu.menu_id") + table = table.Where("sys_role_menu.role_name=? and menu_type in ('M','C')", roleName) + } + + err = table.Order("sort").Find(&Menus).Error + + if err != nil { + log.Errorf("msgID[%s] db error:%s", msgID, err) + return + } + return +} + // menuLabelCall 递归构造组织数据 func menuLabelCall(elist *[]models.SysMenu, dept dto.MenuLabel) dto.MenuLabel { list := *elist @@ -193,21 +234,6 @@ func menuLabelCall(elist *[]models.SysMenu, dept dto.MenuLabel) dto.MenuLabel { return dept } -// GetMenuList 菜单列表 -func (e *SysMenu) GetSysMenuPage() (c *dto.SysMenuSearch, m []models.SysMenu, err error) { - err = e.getSysMenuPage(c,&m) - m = make([]models.SysMenu, 0) - for i := 0; i < len(m); i++ { - if m[i].ParentId != 0 { - continue - } - menusInfo := menuCall(&m, m[i]) - - m = append(m, menusInfo) - } - return -} - func menuCall(menulist *[]models.SysMenu, menu models.SysMenu) models.SysMenu { list := *menulist @@ -246,4 +272,42 @@ func menuCall(menulist *[]models.SysMenu, menu models.SysMenu) models.SysMenu { } menu.Children = min return menu -} \ No newline at end of file +} + +func (e *SysMenu) SetMenuRole(roleName string) (m []models.SysMenu, err error) { + + menus, err := e.getByRoleName(roleName) + + m = make([]models.SysMenu, 0) + for i := 0; i < len(menus); i++ { + if menus[i].ParentId != 0 { + continue + } + menusInfo := menuCall(&menus, menus[i]) + + m = append(m, menusInfo) + } + return +} + +func (e *SysMenu) getByRoleName(roleName string) (Menus []models.SysMenu, err error) { + var data models.SysMenu + msgID := e.MsgID + var table *gorm.DB + if roleName == "admin" { + table = e.Orm.Model(&data).Select("sys_menu.*") + table = table.Where(" menu_type in ('M','C')") + } else { + table = e.Orm.Model(&data).Select("sys_menu.*").Joins("left join sys_role_menu on sys_role_menu.menu_id=sys_menu.menu_id") + table = table.Where("sys_role_menu.role_name=? and menu_type in ('M','C')", roleName) + } + err = table.Scopes( + cDto.OrderDest("sort", false), + ).Find(&Menus).Error + + if err != nil { + log.Errorf("msgID[%s] db error:%s", msgID, err) + return + } + return +} diff --git a/app/admin/service/sys_post.go b/app/admin/service/sys_post.go new file mode 100644 index 00000000..6dfad2a3 --- /dev/null +++ b/app/admin/service/sys_post.go @@ -0,0 +1,109 @@ +package service + +import ( + "errors" + "go-admin/app/admin/models/system" + "go-admin/app/admin/service/dto" + cDto "go-admin/common/dto" + "go-admin/common/log" + "go-admin/common/service" + "gorm.io/gorm" +) + +type SysPost struct { + service.Service +} + +// GetSysPostPage 获取SysPost列表 +func (e *SysPost) GetSysPostPage(c *dto.SysPostSearch, list *[]system.SysPost, count *int64) error { + var err error + var data system.SysPost + msgID := e.MsgID + + err = e.Orm.Model(&data). + Scopes( + cDto.MakeCondition(c.GetNeedSearch()), + cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), + ). + Find(list).Limit(-1).Offset(-1). + Count(count).Error + if err != nil { + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + return nil +} + +// GetSysPost 获取SysPost对象 +func (e *SysPost) GetSysPost(d *dto.SysPostById, model *system.SysPost) error { + var err error + var data system.SysPost + msgID := e.MsgID + + db := e.Orm.Model(&data). + First(model, d.GetId()) + err = db.Error + if err != nil && errors.Is(err, gorm.ErrRecordNotFound) { + err = errors.New("查看对象不存在或无权查看") + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + if db.Error != nil { + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + return nil +} + +// InsertSysPost 创建SysPost对象 +func (e *SysPost) InsertSysPost(model *system.SysPost) error { + var err error + var data system.SysPost + msgID := e.MsgID + + err = e.Orm.Model(&data). + Create(model).Error + if err != nil { + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + return nil +} + +// UpdateSysPost 修改SysPost对象 +func (e *SysPost) UpdateSysPost(c *system.SysPost) error { + var err error + var data system.SysPost + msgID := e.MsgID + + db := e.Orm.Model(&data). + Where(c.GetId()).Updates(c) + if db.Error != nil { + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + if db.RowsAffected == 0 { + return errors.New("无权更新该数据") + + } + return nil +} + +// RemoveSysPost 删除SysPost +func (e *SysPost) RemoveSysPost(d *dto.SysPostById) error { + var err error + var data system.SysPost + msgID := e.MsgID + + db := e.Orm.Model(&data).Delete(&data, d.GetId()) + if db.Error != nil { + err = db.Error + log.Errorf("MsgID[%s] Delete error: %s", msgID, err) + return err + } + if db.RowsAffected == 0 { + err = errors.New("无权删除该数据") + return err + } + return nil +} diff --git a/app/admin/service/sys_role.go b/app/admin/service/sys_role.go new file mode 100644 index 00000000..637004eb --- /dev/null +++ b/app/admin/service/sys_role.go @@ -0,0 +1,109 @@ +package service + +import ( + "errors" + "go-admin/app/admin/models/system" + "go-admin/app/admin/service/dto" + cDto "go-admin/common/dto" + "go-admin/common/log" + "go-admin/common/service" + "gorm.io/gorm" +) + +type SysRole struct { + service.Service +} + +// GetSysRolePage 获取SysRole列表 +func (e *SysRole) GetSysRolePage(c *dto.SysRoleSearch, list *[]system.SysRole, count *int64) error { + var err error + var data system.SysRole + msgID := e.MsgID + + err = e.Orm.Model(&data). + Scopes( + cDto.MakeCondition(c.GetNeedSearch()), + cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), + ). + Find(list).Limit(-1).Offset(-1). + Count(count).Error + if err != nil { + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + return nil +} + +// GetSysRole 获取SysRole对象 +func (e *SysRole) GetSysRole(d *dto.SysRoleById, model *system.SysRole) error { + var err error + var data system.SysRole + msgID := e.MsgID + + db := e.Orm.Model(&data). + First(model, d.GetId()) + err = db.Error + if err != nil && errors.Is(err, gorm.ErrRecordNotFound) { + err = errors.New("查看对象不存在或无权查看") + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + if db.Error != nil { + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + return nil +} + +// InsertSysRole 创建SysRole对象 +func (e *SysRole) InsertSysRole(model *system.SysRole) error { + var err error + var data system.SysRole + msgID := e.MsgID + + err = e.Orm.Model(&data). + Create(model).Error + if err != nil { + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + return nil +} + +// UpdateSysRole 修改SysRole对象 +func (e *SysRole) UpdateSysRole(c *system.SysRole) error { + var err error + var data system.SysRole + msgID := e.MsgID + + db := e.Orm.Model(&data). + Where(c.GetId()).Updates(c) + if db.Error != nil { + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + if db.RowsAffected == 0 { + return errors.New("无权更新该数据") + + } + return nil +} + +// RemoveSysRole 删除SysRole +func (e *SysRole) RemoveSysRole(d *dto.SysRoleById) error { + var err error + var data system.SysRole + msgID := e.MsgID + + db := e.Orm.Model(&data).Delete(&data, d.GetId()) + if db.Error != nil { + err = db.Error + log.Errorf("MsgID[%s] Delete error: %s", msgID, err) + return err + } + if db.RowsAffected == 0 { + err = errors.New("无权删除该数据") + return err + } + return nil +} diff --git a/cmd/migrate/migration/version/1610804233204_migrate.go b/cmd/migrate/migration/version/1610804233204_migrate.go new file mode 100644 index 00000000..390515bd --- /dev/null +++ b/cmd/migrate/migration/version/1610804233204_migrate.go @@ -0,0 +1,39 @@ +package version + +import ( + "go-admin/app/admin/models/system" + + //"go-admin/app/admin/models" + "gorm.io/gorm" + "runtime" + + "go-admin/cmd/migrate/migration" + common "go-admin/common/models" +) + +func init() { + _, fileName, _, _ := runtime.Caller(0) + migration.Migrate.SetVersion(migration.GetFilename(fileName), _1610804233204Test) +} + +func _1610804233204Test(db *gorm.DB, version string) error { + return db.Transaction(func(tx *gorm.DB) error { + + // TODO: 这里开始写入要变更的内容 + post := system.SysPost{} + err := tx.Model(&post).Where("status = ?", 0).Update("status", 2).Error + if err != nil { + return err + } + + role := system.SysRole{} + err = tx.Model(&role).Where("status = ?", 0).Update("status", 2).Error + if err != nil { + return err + } + + return tx.Create(&common.Migration{ + Version: version, + }).Error + }) +} diff --git a/common/dto/order.go b/common/dto/order.go new file mode 100644 index 00000000..25455fbe --- /dev/null +++ b/common/dto/order.go @@ -0,0 +1,12 @@ +package dto + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" +) + +func OrderDest(sort string, bl bool) func(db *gorm.DB) *gorm.DB { + return func(db *gorm.DB) *gorm.DB { + return db.Order(clause.OrderByColumn{Column: clause.Column{Name: sort}, Desc: bl}) + } +}