| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- 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"`
- ClientType int `form:"clientType"`
- }
- // GetClientMenus 获取交易端菜单
- // @Summary 获取交易端菜单
- // @Produce json
- // @Security ApiKeyAuth
- // @Param loginID query int true "登录账号"
- // @Param clientType query int false "终端类型,0:PC 1:Mobile"
- // @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"
- }
- // 读取json文件
- 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)
- // 查询成功
- logger.GetLogger().Debugln("GetPCMenus successed: %v", rst)
- appG.Response(http.StatusOK, e.SUCCESS, rst)
- }
- // 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
- }
- }
- clientMenus = append(clientMenus, 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),
- URL: data["url"].(string),
- Remark: data["remark"].(string),
- Children: createMenu(data["children"].([]interface{}), loginID), // TODO: - 这里为什么可以这样转?
- })
- }
- }
- return clientMenus
- }
|