| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- package common
- import (
- "encoding/json"
- "fmt"
- "mtp2_if/global/app"
- "mtp2_if/global/e"
- "mtp2_if/logger"
- "mtp2_if/models"
- "net/http"
- "os"
- "github.com/gin-gonic/gin"
- )
- // ClientMenu 客户端菜单
- type ClientMenu struct {
- Code string `json:"code"` // ID
- Title string `json:"title"` // 标题
- Sort int `json:"sort"` // 排序
- Type int `json:"type"` // 类型,1:菜单 2:按钮
- RuleKey string `json:"rulekey"` // 对应权限主键,对应FUNCMENULIST表RESOURCECODE
- IsShow bool `json:"isshow"` // 是否显示
- URL string `json:"url"` // URL
- Remark string `json:"remark"` // 备注
- Children []ClientMenu `json:"children"` // 子菜单列表
- }
- // GetClientMenusReq 获取PC交易端菜单请求参数
- type GetClientMenusReq struct {
- LoginID int `form:"loginID" binding:"required"`
- ClientType int `form:"clientType"`
- Name string `form:"name"`
- }
- // GetClientMenus 获取交易端菜单
- // @Summary 获取交易端菜单
- // @Produce json
- // @Security ApiKeyAuth
- // @Param loginID query int true "登录账号"
- // @Param clientType query int false "终端类型,0:PCWEB 1:Mobile,不传默认返回PC端数据"
- // @Param name query string false "分支名称,ermcp:风管云平台 pingan:平安期货,不传默认返回风管云平台"
- // @Success 200 {array} ClientMenu
- // @Failure 500 {object} app.Response
- // @Router /Common/GetClientMenus [get]
- // @Tags 通用服务
- func GetClientMenus(c *gin.Context) {
- appG := app.Gin{C: c}
- // 获取请求参数
- var req GetClientMenusReq
- if err := c.ShouldBind(&req); err != nil {
- logger.GetLogger().Errorf("GetClientMenus parse query req: %v", err)
- appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
- return
- }
- // 获取菜单数据
- jsonFile := "pc_menu.json"
- if req.ClientType == 1 {
- // Mobile
- jsonFile = "mobile_menu.json"
- }
- // 获取分支名称
- if len(req.Name) > 0 {
- if req.ClientType == 0 {
- // 目前只支持PCWEB
- jsonFile = fmt.Sprintf("pcweb_menu/pcweb_menu_%s.json", req.Name)
- }
- }
- // 读取json文件
- // 21-08-15 增加OEM菜单文件支持功能
- filePtr, err := os.Open(fmt.Sprintf("config/%s", jsonFile))
- if err != nil {
- // 读取文件失败
- logger.GetLogger().Errorf("GetClientMenus failed: %s", err.Error())
- appG.Response(http.StatusBadRequest, e.ERROR_CFG_FILE_FAIL, nil)
- return
- }
- defer filePtr.Close()
- var datas []interface{}
- // 创建Json编码器
- decoder := json.NewDecoder(filePtr)
- if err = decoder.Decode(&datas); err != nil {
- // Json解码失败
- logger.GetLogger().Errorf("GetClientMenus failed: %s", err.Error())
- appG.Response(http.StatusBadRequest, e.ERROR_CFG_JSON_FAIL, nil)
- return
- }
- rst := createMenu(datas, req.LoginID)
- r := make([]ClientMenu, 0)
- if req.ClientType == 0 {
- // PC 去掉第一层没有子项的
- for _, v := range rst {
- if len(v.Children) > 0 {
- r = append(r, v)
- }
- }
- } else {
- r = rst
- }
- // 查询成功
- logger.GetLogger().Debugln("GetPCMenus successed: %v", r)
- appG.Response(http.StatusOK, e.SUCCESS, r)
- }
- // createMenu 创建菜单数据
- func createMenu(datas []interface{}, loginID int) []ClientMenu {
- clientMenus := make([]ClientMenu, 0)
- for _, v := range datas {
- data := v.(map[string]interface{})
- if data["isshow"].(bool) {
- rulekey := data["rulekey"].(string)
- if len(rulekey) != 0 {
- // 判断是否有权限
- funcMenuList, err := models.GetErmcpRoleFuncMenuLists(loginID, rulekey)
- if err != nil {
- continue
- }
- if len(funcMenuList) == 0 {
- continue
- }
- }
- item := ClientMenu{
- Code: data["code"].(string),
- Title: data["title"].(string),
- Sort: int(data["sort"].(float64)),
- Type: int(data["type"].(float64)),
- RuleKey: data["rulekey"].(string),
- IsShow: data["isshow"].(bool),
- Children: createMenu(data["children"].([]interface{}), loginID), // TODO: - 这里为什么可以这样转?
- }
- if data["url"] != nil {
- item.URL = data["url"].(string)
- }
- if data["remark"] != nil {
- item.Remark = data["remark"].(string)
- }
- clientMenus = append(clientMenus, item)
- }
- }
- return clientMenus
- }
|