|
|
@@ -915,3 +915,115 @@ func (r *ErmcpLoginTaAccount) GetData() ([]ErmcpLoginTaAccount, error) {
|
|
|
err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
|
|
|
return sData, err
|
|
|
}
|
|
|
+
|
|
|
+// RoleMenu 角色菜单
|
|
|
+type RoleMenu struct {
|
|
|
+ USERID int64 `json:"userid" xorm:"'USERID'"` // 用户id
|
|
|
+ ROLEID int32 `json:"roleid" xorm:"'ROLEID'"` // 角色id
|
|
|
+ RESOURCECODE string `json:"resourcecode" xorm:"'RESOURCECODE'"` // 菜单代码
|
|
|
+ RESOURCENAME string `json:"resourcename" xorm:"'RESOURCENAME'"` // 菜单名称
|
|
|
+ RESOURCELEVEL int32 `json:"resourcelevel" xorm:"'RESOURCELEVEL'"` // 级别
|
|
|
+ MENUTYPE int32 `json:"menutype" xorm:"'MENUTYPE'"` // 菜单类型 1:管理端 2:交易端 3:终端(企业云平台)
|
|
|
+ PARENTCODE string `json:"parentcode" xorm:"'PARENTCODE'"` // 上级资源代码
|
|
|
+ URL string `json:"url" xorm:"'URL'"` // URL
|
|
|
+ SORT int32 `json:"sort" xorm:"'SORT'"` // 排序
|
|
|
+ ICONAME string `json:"iconame" xorm:"'ICONAME'"` // 菜单图标
|
|
|
+ REMARK string `json:"remark" xorm:"'REMARK'"` // 菜单备注
|
|
|
+ HASRIGHT int32 `json:"hasright" xorm:"'HASRIGHT'"` // 是否有权限 0-没有权限 1-有权限
|
|
|
+
|
|
|
+ LOGINID int64 `json:"-" form:"loginid" binding:"required"` // 登录id
|
|
|
+
|
|
|
+ SubMenu []RoleMenu // 子级菜单(结构同上层一样, swag解析不出来)
|
|
|
+}
|
|
|
+
|
|
|
+func (r *RoleMenu) calc() {
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+func (r *RoleMenu) buildSql() string {
|
|
|
+ var sqlId utils.SQLVal = "with tmp as" +
|
|
|
+ " (select *" +
|
|
|
+ " from (select count(*) over() cnt," +
|
|
|
+ " t.userid," +
|
|
|
+ " case" +
|
|
|
+ " when t.clientroleid is not null then" +
|
|
|
+ " t.clientroleid" +
|
|
|
+ " else" +
|
|
|
+ " decode(a.roletype, 20, 0, a.roletype)" +
|
|
|
+ " end roleid," +
|
|
|
+ " t.accountname loginName," +
|
|
|
+ " t.logincode," +
|
|
|
+ " u.accountname userName," +
|
|
|
+ " u.usertype," +
|
|
|
+ " u.rootuserid" +
|
|
|
+ " from loginaccount t" +
|
|
|
+ " left join useraccount u" +
|
|
|
+ " on t.userid = u.userid" +
|
|
|
+ " left join arearole a" +
|
|
|
+ " on t.userid = a.userid" +
|
|
|
+ " where 1 = 1" +
|
|
|
+ " and t.loginid = %v) k" +
|
|
|
+ " where (cnt > 1 and roleid != 0)" +
|
|
|
+ " or cnt = 1)," +
|
|
|
+ "tmpMenu as" +
|
|
|
+ " (select distinct resourcecode" +
|
|
|
+ " from ermcp_memberfuncmenu m" +
|
|
|
+ " inner join tmp" +
|
|
|
+ " on m.userid = tmp.rootuserid" +
|
|
|
+ " and m.roleid = tmp.roleid)" +
|
|
|
+ "select f.resourcecode," +
|
|
|
+ " f.resourcename," +
|
|
|
+ " f.resourcelevel," +
|
|
|
+ " f.menutype," +
|
|
|
+ " f.parentcode," +
|
|
|
+ " f.url," +
|
|
|
+ " f.sort," +
|
|
|
+ " f.iconame," +
|
|
|
+ " f.remark," +
|
|
|
+ " case" +
|
|
|
+ " when f.resourcecode in (select resourcecode from tmpMenu) then" +
|
|
|
+ " 1" +
|
|
|
+ " else" +
|
|
|
+ " 0" +
|
|
|
+ " end hasRight" +
|
|
|
+ " from funcmenulist f" +
|
|
|
+ " where f.menutype = 3" +
|
|
|
+ " and f.resourcelevel <> 0" +
|
|
|
+ " order by f.resourcelevel, f.sort"
|
|
|
+ sqlId.FormatParam(r.LOGINID)
|
|
|
+ return sqlId.String()
|
|
|
+}
|
|
|
+
|
|
|
+func (r *RoleMenu) addSub(lst []RoleMenu) {
|
|
|
+ for i := range lst {
|
|
|
+ if r.RESOURCECODE == lst[i].PARENTCODE {
|
|
|
+ v := lst[i]
|
|
|
+ v.SubMenu = make([]RoleMenu, 0)
|
|
|
+ v.addSub(lst)
|
|
|
+ r.SubMenu = append(r.SubMenu, v)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// GetDataEx 获取角色菜单
|
|
|
+func (r *RoleMenu) GetDataEx() (interface{}, error) {
|
|
|
+ sData := make([]RoleMenu, 0)
|
|
|
+ err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
|
|
|
+ for i := range sData {
|
|
|
+ sData[i].calc()
|
|
|
+ }
|
|
|
+
|
|
|
+ // 构建层级关系
|
|
|
+ sData2 := make([]RoleMenu, 0)
|
|
|
+ for _, v := range sData {
|
|
|
+ if v.RESOURCELEVEL == 1 {
|
|
|
+ v.SubMenu = make([]RoleMenu, 0)
|
|
|
+ sData2 = append(sData2, v)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for i := range sData2 {
|
|
|
+ sData2[i].addSub(sData)
|
|
|
+ }
|
|
|
+ return sData2, err
|
|
|
+}
|