diff --git a/app/admin/middleware/logger.go b/app/admin/middleware/logger.go index f846446..299de8e 100644 --- a/app/admin/middleware/logger.go +++ b/app/admin/middleware/logger.go @@ -7,6 +7,7 @@ import ( "go-admin/logger" config2 "go-admin/tools/config" "io" + "strconv" "strings" "time" @@ -116,29 +117,24 @@ func SetDBOperLog(c *gin.Context, clientIP string, statusCode int, reqUri string sysOperLog.RequestMethod = c.Request.Method sysOperLog.OperUrl = reqUri if reqUri == "/login" { - sysOperLog.BusinessType = "10" sysOperLog.Title = "用户登录" sysOperLog.OperName = "-" - } else if strings.Contains(reqUri, "/api/v1/logout") { - sysOperLog.BusinessType = "11" } else if strings.Contains(reqUri, "/api/v1/getCaptcha") { - sysOperLog.BusinessType = "12" sysOperLog.Title = "验证码" - } else { - if reqMethod == "POST" { - sysOperLog.BusinessType = "1" - } else if reqMethod == "PUT" { - sysOperLog.BusinessType = "2" - } else if reqMethod == "DELETE" { - sysOperLog.BusinessType = "3" - } } + + // 从白名单中读取对应的操作类型 + resultUrl := strings.Replace(c.Request.RequestURI, "/api/v1", "", 1) + nType, _ := global.WHILTE[resultUrl] + sysOperLog.BusinessType = strconv.Itoa(nType) + sysOperLog.Method = reqMethod if len(menuList) > 0 { sysOperLog.Title = menuList[0].Title + menu.Title = menuList[0].Title + sysOperLog.MenuTitle, _ = menu.GetParentTitle() } - b, _ := c.Get("body") - sysOperLog.OperParam, _ = tools.StructToJsonStr(b) + sysOperLog.CreateBy = tools.GetUserName(c) sysOperLog.OperTime = tools.GetCurrentTime() sysOperLog.LatencyTime = (latencyTime).String() diff --git a/app/admin/models/menu.go b/app/admin/models/menu.go index a1d7940..46aa915 100644 --- a/app/admin/models/menu.go +++ b/app/admin/models/menu.go @@ -3,7 +3,6 @@ package models import ( "errors" "fmt" - orm "go-admin/common/global" "go-admin/tools" ) @@ -249,6 +248,44 @@ func (e *Menu) Get() (Menus []Menu, err error) { return } +func (e *Menu) GetParentTitle() (title string, err error) { + // 查询指定 title 的记录 + var menu Menu + table := orm.Eloquent.Table(e.TableName()) + if err := table.Where("title = ? AND menu_type = ?", e.Title, "F").First(&menu).Error; err != nil { + return "", err + } + + // 递归查询父节点的 title 直到找到 parentId 为 0 的节点 + return getParentTitle(menu.ParentId) +} + +// getParentTitle 递归查询父节点的 title +func getParentTitle(parentID int) (string, error) { + if parentID == 0 { + return "", nil + } + + var parentMenu Menu + table := orm.Eloquent.Table("sys_menu") + // 查询父节点的记录 + if err := table.Where("menu_id = ?", parentID).First(&parentMenu).Error; err != nil { + return "", err + } + + // 递归查询父节点的 title + parentTitle, err := getParentTitle(parentMenu.ParentId) + if err != nil { + return "", err + } + + // 组合当前节点的 title 和父节点的 title,去掉开头的横杠 + if parentTitle != "" { + return fmt.Sprintf("%s-%s", parentTitle, parentMenu.Title), nil + } + return parentMenu.Title, nil +} + func (e *Menu) GetPage() (Menus []Menu, err error) { table := orm.Eloquent.Table(e.TableName()) if e.MenuName != "" { diff --git a/app/admin/models/operlog.go b/app/admin/models/operlog.go index e970dba..73124af 100644 --- a/app/admin/models/operlog.go +++ b/app/admin/models/operlog.go @@ -9,7 +9,7 @@ import ( // sys_operlog type SysOperLog struct { OperId int `json:"operId" gorm:"primary_key;AUTO_INCREMENT"` //日志编码 - Title string `json:"title" gorm:"size:255;"` //操作模块 + Title string `json:"title" gorm:"size:255;"` //操作模块-具体事件 BusinessType string `json:"businessType" gorm:"size:128;"` //操作类型 BusinessTypes string `json:"businessTypes" gorm:"size:128;"` Method string `json:"method" gorm:"size:128;"` //函数 @@ -31,6 +31,7 @@ type SysOperLog struct { Remark string `json:"remark" gorm:"size:255;"` //备注 LatencyTime string `json:"latencyime" gorm:"size:128;"` //耗时 UserAgent string `json:"userAgent" gorm:"size:255;"` //ua + MenuTitle string `json:"menuTitle" gorm:"size:255;"` //操作模块 BaseModel } diff --git a/common/global/constant.go b/common/global/constant.go index 6443052..b0946d0 100644 --- a/common/global/constant.go +++ b/common/global/constant.go @@ -1,22 +1,26 @@ package global +// WHILTE 操作类型: 1 新增;2 修改;3 删除;4 授权;5 导出;6 导入;10 登陆;11 退出; 12 获取验证码; var WHILTE = map[string]int{ "/supplier/create": 1, //供应商 "/supplier/update": 2, "/supplier/delete": 3, - "/category/create": 4, //商品分类 - "/category/update": 5, - "/category/delete": 6, - "/category/import_category": 7, - "/commodity/create": 8, //商品资料 - "/commodity/edit": 9, - "/commodity/delete": 10, - "/commodity/import_commodity": 11, - "/cashier/create": 12, //收付款设置 - "/cashier/edit": 13, - "/cashier/delete": 14, - "/inventory/delivery": 15, //库存管理 - "/inventory/print": 16, - "/inventory/import": 17, - "/inventory/add_remark": 18, + "/category/create": 1, //商品分类 + "/category/update": 2, + "/category/delete": 3, + "/category/import_category": 6, + "/commodity/create": 1, //商品资料 + "/commodity/edit": 2, + "/commodity/delete": 3, + "/commodity/import_commodity": 6, + "/cashier/create": 1, //收付款设置 + "/cashier/edit": 2, + "/cashier/delete": 3, + "/inventory/delivery": 2, //库存管理 + "/inventory/print": 2, + "/inventory/import": 6, + "/inventory/add_remark": 2, + "/login": 10, //登陆 + "/logout": 11, //退出 + "/getCaptcha": 12, //获取验证码 }