|
|
@@ -5,7 +5,10 @@ import (
|
|
|
"ERP_user/conf"
|
|
|
"ERP_user/logs"
|
|
|
"ERP_user/models/Account"
|
|
|
+ "ERP_user/models/System"
|
|
|
+ "encoding/json"
|
|
|
"fmt"
|
|
|
+
|
|
|
beego "github.com/beego/beego/v2/server/web"
|
|
|
menulibs "gogs.baozhida.cn/zoie/ERP_libs/Menu"
|
|
|
"gogs.baozhida.cn/zoie/ERP_libs/lib"
|
|
|
@@ -55,7 +58,6 @@ func (c *MenuController) List() {
|
|
|
|
|
|
c.Data["json"] = lib.JSONS{Code: 200, Msg: sysName + "ok!", Data: r_jsons}
|
|
|
c.ServeJSON()
|
|
|
- return
|
|
|
}
|
|
|
|
|
|
// 列表 -
|
|
|
@@ -119,5 +121,423 @@ func (c *MenuController) User_List() {
|
|
|
|
|
|
c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
|
|
|
c.ServeJSON()
|
|
|
- return
|
|
|
+}
|
|
|
+
|
|
|
+// 获取单个菜单详情
|
|
|
+func (c *MenuController) Get() {
|
|
|
+ id, _ := c.GetInt("id")
|
|
|
+ if id < 1 {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "id Err!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ T_code := c.GetString("T_code")
|
|
|
+ if len(T_code) == 0 {
|
|
|
+ T_code = conf.ERP_ACCOUNT_Sys // 默认本地系统
|
|
|
+ }
|
|
|
+ sysName := Account.Get_Sys_Name(T_code)
|
|
|
+ if sysName == T_code {
|
|
|
+ // 不存在这个code
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_code Err!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var menu menulibs.Menu
|
|
|
+ var apis []menulibs.API
|
|
|
+ var err error
|
|
|
+
|
|
|
+ // 根据T_code判断是本地系统还是其他系统
|
|
|
+ if T_code == conf.ERP_ACCOUNT_Sys {
|
|
|
+ menu, err = Account.Read_Menu_ById(id)
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取关联的API列表
|
|
|
+ apis, err = Account.Read_API_List_ByMenuId(id)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), "获取API列表失败:", err)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 其他系统,通过NATS调用
|
|
|
+ menu, err = NatsServer.ERP_Read_Menu_ById(T_code, id)
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: sysName + " 查询失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 注意:其他系统的API列表需要通过各自的系统获取,这里暂时不获取
|
|
|
+ }
|
|
|
+
|
|
|
+ type MenuWithAPIs struct {
|
|
|
+ menulibs.Menu
|
|
|
+ APIs []menulibs.API `json:"apis"`
|
|
|
+ }
|
|
|
+ menuWithAPIs := MenuWithAPIs{
|
|
|
+ Menu: menu,
|
|
|
+ APIs: apis,
|
|
|
+ }
|
|
|
+
|
|
|
+ var r_jsons lib.R_JSONS
|
|
|
+ r_jsons.Data = menuWithAPIs
|
|
|
+
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
|
|
|
+ c.ServeJSON()
|
|
|
+}
|
|
|
+
|
|
|
+// 添加菜单
|
|
|
+func (c *MenuController) Add() {
|
|
|
+ T_name := c.GetString("T_name")
|
|
|
+ T_mid, _ := c.GetInt("T_mid")
|
|
|
+ T_permission := c.GetString("T_permission")
|
|
|
+ T_icon := c.GetString("T_icon")
|
|
|
+ T_uri := c.GetString("T_uri")
|
|
|
+ T_type := c.GetString("T_type")
|
|
|
+ T_code := c.GetString("T_code")
|
|
|
+ T_sort, _ := c.GetInt("T_sort")
|
|
|
+ T_apis := c.GetString("T_apis") // API JSON字符串
|
|
|
+
|
|
|
+ if len(T_name) < 1 {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "菜单名称不能为空!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ sysName := Account.Get_Sys_Name(T_code)
|
|
|
+ if sysName == T_code {
|
|
|
+ // 不存在这个code
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_code Err!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果未指定类型,默认为菜单类型
|
|
|
+ if len(T_type) == 0 {
|
|
|
+ T_type = menulibs.MenuType
|
|
|
+ }
|
|
|
+
|
|
|
+ var_ := menulibs.Menu{
|
|
|
+ T_mid: T_mid,
|
|
|
+ T_name: T_name,
|
|
|
+ T_permission: T_permission,
|
|
|
+ T_icon: T_icon,
|
|
|
+ T_uri: T_uri,
|
|
|
+ T_type: T_type,
|
|
|
+ T_sort: T_sort,
|
|
|
+ T_State: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ var id int
|
|
|
+ var err error
|
|
|
+
|
|
|
+ // 根据T_code判断是本地系统还是其他系统
|
|
|
+ if T_code == conf.ERP_ACCOUNT_Sys {
|
|
|
+ // 本地系统,直接调用
|
|
|
+ id, err = Account.Add_Menu(var_)
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理API JSON字符串
|
|
|
+ if len(T_apis) > 0 {
|
|
|
+ var apiList []struct {
|
|
|
+ T_name string `json:"T_name"`
|
|
|
+ T_uri string `json:"T_uri"`
|
|
|
+ T_method string `json:"T_method"`
|
|
|
+ }
|
|
|
+ err = json.Unmarshal([]byte(T_apis), &apiList)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), "解析API JSON失败:", err)
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "API JSON格式错误!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 批量添加API
|
|
|
+ if len(apiList) > 0 {
|
|
|
+ var apis []menulibs.API
|
|
|
+ for _, api := range apiList {
|
|
|
+ if len(api.T_method) == 0 {
|
|
|
+ api.T_method = "POST"
|
|
|
+ }
|
|
|
+ apis = append(apis, menulibs.API{
|
|
|
+ T_Menu_Id: id,
|
|
|
+ T_name: api.T_name,
|
|
|
+ T_uri: api.T_uri,
|
|
|
+ T_method: api.T_method,
|
|
|
+ T_enable: 1,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ _, err = Account.InsertMulti_API(apis)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), "添加API失败:", err)
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加API失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ // 其他系统,通过NATS调用
|
|
|
+ id, err = NatsServer.ERP_Add_Menu(T_code, var_, T_apis)
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: sysName + " 添加失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 清除所有权限的API缓存
|
|
|
+ Account.Redis_API_DelAll()
|
|
|
+ // 确保菜单缓存已清除(Add_Menu中已清除,这里再次确保)
|
|
|
+ Account.Redis_Menu_DelAll()
|
|
|
+ System.Add_UserLogs_T(c.User.T_uuid, "菜单", sysName+" 新增", var_)
|
|
|
+
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 200, Msg: sysName + " ok!", Data: id}
|
|
|
+ c.ServeJSON()
|
|
|
+}
|
|
|
+
|
|
|
+// 修改菜单
|
|
|
+func (c *MenuController) Edit() {
|
|
|
+ id, _ := c.GetInt("id")
|
|
|
+ if id < 1 {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "id Err!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ T_code := c.GetString("T_code")
|
|
|
+ if len(T_code) == 0 {
|
|
|
+ T_code = conf.ERP_ACCOUNT_Sys // 默认本地系统
|
|
|
+ }
|
|
|
+ sysName := Account.Get_Sys_Name(T_code)
|
|
|
+ if sysName == T_code {
|
|
|
+ // 不存在这个code
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_code Err!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var menu menulibs.Menu
|
|
|
+ var err error
|
|
|
+
|
|
|
+ // 根据T_code判断是本地系统还是其他系统
|
|
|
+ if T_code == conf.ERP_ACCOUNT_Sys {
|
|
|
+ menu, err = Account.Read_Menu_ById(id)
|
|
|
+ } else {
|
|
|
+ menu, err = NatsServer.ERP_Read_Menu_ById(T_code, id)
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var cols []string
|
|
|
+
|
|
|
+ // 获取需要更新的字段
|
|
|
+ // 检查参数是否存在(通过检查原始请求参数)
|
|
|
+ input, _ := c.Input()
|
|
|
+
|
|
|
+ if _, exists := input["T_mid"]; exists {
|
|
|
+ if T_mid, err := c.GetInt("T_mid"); err == nil {
|
|
|
+ menu.T_mid = T_mid
|
|
|
+ cols = append(cols, "T_mid")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if _, exists := input["T_name"]; exists {
|
|
|
+ if T_name := c.GetString("T_name"); T_name != "" {
|
|
|
+ menu.T_name = T_name
|
|
|
+ cols = append(cols, "T_name")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // T_permission, T_icon, T_uri 允许为空字符串,只要参数存在就更新
|
|
|
+ if _, exists := input["T_permission"]; exists {
|
|
|
+ menu.T_permission = c.GetString("T_permission")
|
|
|
+ cols = append(cols, "T_permission")
|
|
|
+ }
|
|
|
+ if _, exists := input["T_icon"]; exists {
|
|
|
+ menu.T_icon = c.GetString("T_icon")
|
|
|
+ cols = append(cols, "T_icon")
|
|
|
+ }
|
|
|
+ if _, exists := input["T_uri"]; exists {
|
|
|
+ menu.T_uri = c.GetString("T_uri")
|
|
|
+ cols = append(cols, "T_uri")
|
|
|
+ }
|
|
|
+ if _, exists := input["T_type"]; exists {
|
|
|
+ if T_type := c.GetString("T_type"); T_type != "" {
|
|
|
+ menu.T_type = T_type
|
|
|
+ cols = append(cols, "T_type")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if _, exists := input["T_sort"]; exists {
|
|
|
+ if T_sort, err := c.GetInt("T_sort"); err == nil {
|
|
|
+ menu.T_sort = T_sort
|
|
|
+ cols = append(cols, "T_sort")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if _, exists := input["T_State"]; exists {
|
|
|
+ if T_State, err := c.GetInt("T_State"); err == nil && T_State >= 0 {
|
|
|
+ menu.T_State = T_State
|
|
|
+ cols = append(cols, "T_State")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理API JSON字符串
|
|
|
+ T_apis := c.GetString("T_apis")
|
|
|
+
|
|
|
+ if len(cols) == 0 && len(T_apis) == 0 {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "没有需要更新的字段!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据T_code判断是本地系统还是其他系统
|
|
|
+ if T_code == conf.ERP_ACCOUNT_Sys {
|
|
|
+ // 本地系统,直接调用
|
|
|
+ // 处理API JSON字符串
|
|
|
+ if _, exists := input["T_apis"]; exists {
|
|
|
+ // 先删除旧的API(软删除)
|
|
|
+ _, err = Account.Delete_API_ByMenuId(id)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), "删除旧API失败:", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果有新的API,则添加
|
|
|
+ if len(T_apis) > 0 {
|
|
|
+ var apiList []struct {
|
|
|
+ T_name string `json:"T_name"`
|
|
|
+ T_uri string `json:"T_uri"`
|
|
|
+ T_method string `json:"T_method"`
|
|
|
+ }
|
|
|
+ err = json.Unmarshal([]byte(T_apis), &apiList)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), "解析API JSON失败:", err)
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "API JSON格式错误!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 批量添加API
|
|
|
+ if len(apiList) > 0 {
|
|
|
+ var apis []menulibs.API
|
|
|
+ for _, api := range apiList {
|
|
|
+ if len(api.T_method) == 0 {
|
|
|
+ api.T_method = "POST"
|
|
|
+ }
|
|
|
+ apis = append(apis, menulibs.API{
|
|
|
+ T_Menu_Id: id,
|
|
|
+ T_name: api.T_name,
|
|
|
+ T_uri: api.T_uri,
|
|
|
+ T_method: api.T_method,
|
|
|
+ T_enable: 1,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ _, err = Account.InsertMulti_API(apis)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error(lib.FuncName(), "添加API失败:", err)
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加API失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果有菜单字段需要更新,则更新菜单
|
|
|
+ if len(cols) > 0 {
|
|
|
+ _, err = Account.Update_Menu(menu, cols...)
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ // 其他系统,通过NATS调用
|
|
|
+ _, err = NatsServer.ERP_Update_Menu(T_code, menu, cols, T_apis)
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: sysName + " 修改失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Account.Redis_Menu_DelAll()
|
|
|
+ Account.Redis_API_DelAll()
|
|
|
+ System.Add_UserLogs_T(c.User.T_uuid, "菜单", sysName+" 修改", menu)
|
|
|
+
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 200, Msg: sysName + " ok!", Data: id}
|
|
|
+ c.ServeJSON()
|
|
|
+}
|
|
|
+
|
|
|
+// 删除菜单(软删除)
|
|
|
+func (c *MenuController) Del() {
|
|
|
+ id, _ := c.GetInt("id")
|
|
|
+ if id < 1 {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "id Err!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ T_code := c.GetString("T_code")
|
|
|
+ if len(T_code) == 0 {
|
|
|
+ T_code = conf.ERP_ACCOUNT_Sys // 默认本地系统
|
|
|
+ }
|
|
|
+ sysName := Account.Get_Sys_Name(T_code)
|
|
|
+ if sysName == T_code {
|
|
|
+ // 不存在这个code
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_code Err!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var menu menulibs.Menu
|
|
|
+ var err error
|
|
|
+
|
|
|
+ // 根据T_code判断是本地系统还是其他系统
|
|
|
+ if T_code == conf.ERP_ACCOUNT_Sys {
|
|
|
+ menu, err = Account.Read_Menu_ById(id)
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ _, err = Account.Delete_Menu(menu)
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 其他系统,先获取菜单,然后删除
|
|
|
+ menu, err = NatsServer.ERP_Read_Menu_ById(T_code, id)
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ _, err = NatsServer.ERP_Delete_Menu(T_code, menu)
|
|
|
+ if err != nil {
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 202, Msg: sysName + " 删除失败!"}
|
|
|
+ c.ServeJSON()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Account.Redis_Menu_DelAll()
|
|
|
+ Account.Redis_API_DelAll()
|
|
|
+ System.Add_UserLogs_T(c.User.T_uuid, "菜单", sysName+" 删除", menu)
|
|
|
+
|
|
|
+ c.Data["json"] = lib.JSONS{Code: 200, Msg: sysName + " ok!", Data: id}
|
|
|
+ c.ServeJSON()
|
|
|
}
|