sys_role.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta_gn/eta_api/models"
  5. "eta_gn/eta_api/models/system"
  6. "eta_gn/eta_api/services"
  7. "eta_gn/eta_api/utils"
  8. "fmt"
  9. "github.com/rdlucklib/rdluck_tools/paging"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. type SysRoleController struct {
  15. BaseAuthController
  16. }
  17. // @router /role/add [post]
  18. func (this *SysRoleController) Add() {
  19. br := new(models.BaseResponse).Init()
  20. defer func() {
  21. this.Data["json"] = br
  22. this.ServeJSON()
  23. }()
  24. var req system.SysRoleAddReq
  25. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  26. if err != nil {
  27. br.Msg = "参数解析异常!"
  28. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  29. return
  30. }
  31. if req.RoleName == "" {
  32. br.Msg = "角色名称不能为空"
  33. return
  34. }
  35. count, err := system.GetSysRoleCount(req.RoleName)
  36. if err != nil && !utils.IsErrNoRow(err) {
  37. br.Msg = "获取数据失败"
  38. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  39. return
  40. }
  41. if count > 0 {
  42. br.Msg = "角色已存在,请重新输入"
  43. return
  44. }
  45. item := new(system.SysRole)
  46. item.RoleName = req.RoleName
  47. item.RoleType = req.RoleType
  48. item.RoleTypeCode = services.GetRoleTypeCode(req.RoleType)
  49. item.CreateTime = time.Now()
  50. item.ModifyTime = time.Now()
  51. _, err = system.AddSysRole(item)
  52. if err != nil {
  53. br.Msg = "新增失败"
  54. br.ErrMsg = "新增失败,Err:" + err.Error()
  55. return
  56. }
  57. br.Ret = 200
  58. br.Success = true
  59. br.Msg = "新增成功"
  60. }
  61. // @router /role/edit [post]
  62. func (this *SysRoleController) Edit() {
  63. br := new(models.BaseResponse).Init()
  64. defer func() {
  65. this.Data["json"] = br
  66. this.ServeJSON()
  67. }()
  68. var req system.SysRoleEditReq
  69. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  70. if err != nil {
  71. br.Msg = "参数解析异常!"
  72. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  73. return
  74. }
  75. if req.RoleId <= 0 {
  76. br.Msg = "参数错误"
  77. br.ErrMsg = "参数错误,GroupId 小于等于0 "
  78. return
  79. }
  80. if req.RoleName == "" {
  81. br.Msg = "分组名称不能为空"
  82. return
  83. }
  84. item, e := system.GetSysRoleById(req.RoleId)
  85. if e != nil {
  86. if !utils.IsErrNoRow(e) {
  87. br.Msg = "操作失败"
  88. br.ErrMsg = "获取角色失败, Err: " + e.Error()
  89. return
  90. }
  91. br.Msg = "角色不存在, 请刷新页面"
  92. return
  93. }
  94. exists, e := system.GetSysRoleByName(req.RoleName)
  95. if e != nil && !utils.IsErrNoRow(e) {
  96. br.Msg = "操作失败"
  97. br.ErrMsg = "获取重名角色失败, Err: " + e.Error()
  98. return
  99. }
  100. if e == nil && exists.RoleId > 0 && exists.RoleId != item.RoleId {
  101. br.Msg = "名称已存在,请重新输入"
  102. return
  103. }
  104. roleTypeCode := services.GetRoleTypeCode(req.RoleType)
  105. e = system.ModifySysRole(req.RoleName, req.RoleType, roleTypeCode, req.RoleId)
  106. if e != nil {
  107. br.Msg = "操作失败"
  108. br.ErrMsg = "更新角色信息失败, Err: " + e.Error()
  109. return
  110. }
  111. br.Ret = 200
  112. br.Success = true
  113. br.IsAddLog = true
  114. br.Msg = "修改成功"
  115. }
  116. // @router /role/delete [post]
  117. func (this *SysRoleController) Delete() {
  118. br := new(models.BaseResponse).Init()
  119. defer func() {
  120. this.Data["json"] = br
  121. this.ServeJSON()
  122. }()
  123. var req system.SysRoleDeleteReq
  124. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  125. if err != nil {
  126. br.Msg = "参数解析异常!"
  127. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  128. return
  129. }
  130. if req.RoleId <= 0 {
  131. br.Msg = "参数错误"
  132. br.ErrMsg = "参数错误,GroupId 小于等于0 "
  133. return
  134. }
  135. _, e := system.GetSysRoleById(req.RoleId)
  136. if e != nil {
  137. if utils.IsErrNoRow(err) {
  138. br.Msg = "角色不存在, 请刷新页面"
  139. return
  140. }
  141. br.Msg = "删除失败"
  142. br.ErrMsg = "获取角色信息失败, Err: " + e.Error()
  143. return
  144. }
  145. err = system.DeleteSysRole(req.RoleId)
  146. if err != nil {
  147. br.Msg = "删除失败"
  148. br.ErrMsg = "删除失败,Err:" + err.Error()
  149. return
  150. }
  151. br.Ret = 200
  152. br.Success = true
  153. br.IsAddLog = true
  154. br.Msg = "删除成功"
  155. }
  156. // @router /role/list [get]
  157. func (this *SysRoleController) ListSysRole() {
  158. br := new(models.BaseResponse).Init()
  159. defer func() {
  160. this.Data["json"] = br
  161. this.ServeJSON()
  162. }()
  163. sysUser := this.SysUser
  164. if sysUser == nil {
  165. br.Msg = "请登录"
  166. br.ErrMsg = "请登录,SysUser Is Empty"
  167. return
  168. }
  169. pageSize, _ := this.GetInt("PageSize")
  170. currentIndex, _ := this.GetInt("CurrentIndex")
  171. keyWord := this.GetString("KeyWord")
  172. var startSize int
  173. if pageSize <= 0 {
  174. pageSize = utils.PageSize20
  175. }
  176. if currentIndex <= 0 {
  177. currentIndex = 1
  178. }
  179. startSize = utils.StartIndex(currentIndex, pageSize)
  180. var condition string
  181. var pars []interface{}
  182. if keyWord != "" {
  183. condition += ` AND role_name LIKE '%` + keyWord + `%' `
  184. }
  185. total, err := system.GetSysRoleListCount(condition, pars)
  186. if err != nil {
  187. br.Msg = "获取失败"
  188. br.ErrMsg = "获取失败,Err:" + err.Error()
  189. return
  190. }
  191. list, err := system.GetSysRoleList(condition, pars, startSize, pageSize)
  192. if err != nil {
  193. br.Msg = "获取失败"
  194. br.ErrMsg = "获取失败,Err:" + err.Error()
  195. return
  196. }
  197. page := paging.GetPaging(currentIndex, pageSize, total)
  198. resp := new(system.SysRoleListResp)
  199. resp.List = list
  200. resp.Paging = page
  201. br.Ret = 200
  202. br.Success = true
  203. br.Msg = "获取成功"
  204. br.Data = resp
  205. }
  206. // @router /role/menu/list [get]
  207. func (this *SysRoleController) SysRoleMenusList() {
  208. br := new(models.BaseResponse).Init()
  209. defer func() {
  210. this.Data["json"] = br
  211. this.ServeJSON()
  212. }()
  213. roleId, err := this.GetInt("RoleId")
  214. if err != nil {
  215. br.Msg = "获取角色失败"
  216. br.ErrMsg = "获取角色失败,Err:" + err.Error()
  217. return
  218. }
  219. fmt.Println("roleId", roleId)
  220. list := make([]*system.RoleMenuList, 0)
  221. sysUser := this.SysUser
  222. if sysUser == nil {
  223. br.Msg = "请登录"
  224. br.ErrMsg = "请登录,SysUser Is Empty"
  225. return
  226. }
  227. list, err = system.GetRoleMenuList()
  228. if err != nil {
  229. br.Msg = "获取失败"
  230. br.ErrMsg = "获取失败,Err:" + err.Error()
  231. return
  232. }
  233. lenList := len(list)
  234. for i := 0; i < lenList; i++ {
  235. item := list[i]
  236. child, err := system.GetRoleMenuByParentId(item.MenuId)
  237. if err != nil {
  238. br.Msg = "获取失败"
  239. br.ErrMsg = "获取子菜单数据失败,Err:" + err.Error()
  240. return
  241. }
  242. list[i].Child = child
  243. checkList := make([]int, 0)
  244. if roleId > 0 {
  245. checkItem, err := system.GetCheckListRoleMenu(roleId, item.MenuId)
  246. if err != nil {
  247. br.Msg = "获取失败"
  248. br.ErrMsg = "获取选择数据失败,Err:" + err.Error()
  249. return
  250. }
  251. for _, v := range checkItem {
  252. checkList = append(checkList, v.MenuId)
  253. }
  254. }
  255. list[i].CheckList = checkList
  256. }
  257. resp := new(system.RoleMenuListResp)
  258. resp.List = list
  259. br.Ret = 200
  260. br.Success = true
  261. br.Msg = "获取成功"
  262. br.Data = resp
  263. }
  264. // @router /role/menu/add [post]
  265. func (this *SysRoleController) SysRoleMenusAdd() {
  266. br := new(models.BaseResponse).Init()
  267. defer func() {
  268. this.Data["json"] = br
  269. this.ServeJSON()
  270. }()
  271. var req system.RoleMenusAddReq
  272. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  273. if err != nil {
  274. br.Msg = "参数解析异常!"
  275. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  276. return
  277. }
  278. roleId := req.RoleId
  279. if roleId <= 0 {
  280. br.Msg = "参数错误"
  281. br.ErrMsg = "参数错误,RoleId 小于等于0 "
  282. return
  283. }
  284. if req.MenuIdStr == "" {
  285. br.Msg = "请选择菜单"
  286. br.ErrMsg = "请选择菜单,MenuIdStr IS Empty "
  287. return
  288. }
  289. sysUser := this.SysUser
  290. if sysUser == nil {
  291. br.Msg = "请登录"
  292. br.ErrMsg = "请登录,SysUser Is Empty"
  293. return
  294. }
  295. err = system.DeleteRoleMenuByRoleId(roleId)
  296. if err != nil {
  297. br.Msg = "设置失败"
  298. br.ErrMsg = "清空原有设置失败,Err:" + err.Error()
  299. return
  300. }
  301. menuArr := strings.Split(req.MenuIdStr, ",")
  302. for _, v := range menuArr {
  303. menuId, err := strconv.Atoi(v)
  304. if err != nil {
  305. br.Msg = "设置失败"
  306. br.ErrMsg = "menuId 解析失败,Err:" + err.Error()
  307. return
  308. }
  309. item := new(system.SysRoleMenu)
  310. item.RoleId = roleId
  311. item.MenuId = menuId
  312. _, err = system.AddSysRoleMenu(item)
  313. if err != nil {
  314. br.Msg = "设置失败"
  315. br.ErrMsg = "新增设置失败,Err:" + err.Error()
  316. return
  317. }
  318. }
  319. if req.MenuButtonIdStr != "" {
  320. err = system.DeleteSysRoleButton(roleId)
  321. if err != nil {
  322. br.Msg = "设置失败"
  323. br.ErrMsg = "删除已设置数据失败,Err:" + err.Error()
  324. return
  325. }
  326. buttonMap := make(map[string]string)
  327. buttonArr := strings.Split(req.MenuButtonIdStr, ",")
  328. for _, v := range buttonArr {
  329. if _, ok := buttonMap[v]; !ok {
  330. buttonId, err := strconv.Atoi(v)
  331. count, err := system.GetSysRoleButtonCount(roleId, buttonId)
  332. if err != nil {
  333. br.Msg = "判断设置失败存在失败"
  334. br.ErrMsg = "判断设置失败存在失败,Err:" + err.Error()
  335. return
  336. }
  337. if count <= 0 {
  338. button := new(system.SysRoleButton)
  339. button.RoleId = roleId
  340. button.MenuButtonId = buttonId
  341. button.CreateTime = time.Now()
  342. _, err = system.AddSysRoleButton(button)
  343. if err != nil {
  344. br.Msg = "设置失败"
  345. br.ErrMsg = "按钮权限设置失败,Err:" + err.Error()
  346. return
  347. }
  348. }
  349. }
  350. buttonMap[v] = v
  351. }
  352. } else {
  353. err = system.DeleteSysRoleButton(roleId)
  354. if err != nil {
  355. br.Msg = "设置失败"
  356. br.ErrMsg = "删除已设置数据失败,Err:" + err.Error()
  357. return
  358. }
  359. }
  360. br.Ret = 200
  361. br.Success = true
  362. br.IsAddLog = true
  363. br.Msg = "设置成功"
  364. }
  365. // @router /role/all [get]
  366. func (this *SysRoleController) AllSysRole() {
  367. br := new(models.BaseResponse).Init()
  368. defer func() {
  369. this.Data["json"] = br
  370. this.ServeJSON()
  371. }()
  372. sysUser := this.SysUser
  373. if sysUser == nil {
  374. br.Msg = "请登录"
  375. br.ErrMsg = "请登录,SysUser Is Empty"
  376. return
  377. }
  378. levelFlag := false
  379. roleLevel := this.GetString("RoleLevel")
  380. if roleLevel != "" {
  381. levelFlag = true
  382. }
  383. list, err := system.GetSysRoleAll(levelFlag)
  384. if err != nil {
  385. br.Msg = "获取失败"
  386. br.ErrMsg = "获取失败,Err:" + err.Error()
  387. return
  388. }
  389. resp := new(system.SysRoleAllResp)
  390. resp.List = list
  391. br.Ret = 200
  392. br.Success = true
  393. br.Msg = "获取成功"
  394. br.Data = resp
  395. }
  396. // @router /role/menu/auth_list [get]
  397. func (this *SysRoleController) SysRoleMenuAuthList() {
  398. br := new(models.BaseResponse).Init()
  399. defer func() {
  400. if br.ErrMsg == "" {
  401. br.IsSendEmail = false
  402. }
  403. this.Data["json"] = br
  404. this.ServeJSON()
  405. }()
  406. sysUser := this.SysUser
  407. if sysUser == nil {
  408. br.Msg = "请登录"
  409. br.ErrMsg = "请登录,SysUser Is Empty"
  410. return
  411. }
  412. resp := new(system.SysMenuListResp)
  413. resp.ChoiceList = make([]int, 0)
  414. resp.HalfChoiceList = make([]int, 0)
  415. resp.List = make([]*system.SysMenuItem, 0)
  416. roleId, _ := this.GetInt("RoleId", 0)
  417. if roleId > 0 {
  418. relates, e := system.GetSysRoleMenuByRoleId(roleId)
  419. if e != nil {
  420. br.Msg = "获取失败"
  421. br.ErrMsg = "获取角色关联菜单失败, Err: " + e.Error()
  422. return
  423. }
  424. for _, r := range relates {
  425. if r.Type == 1 {
  426. resp.HalfChoiceList = append(resp.HalfChoiceList, r.MenuId)
  427. continue
  428. }
  429. resp.ChoiceList = append(resp.ChoiceList, r.MenuId)
  430. }
  431. }
  432. order := `sort ASC, create_time DESC, menu_id DESC`
  433. list, e := system.GetSysMenuItemsByCondition(` AND hidden = 0`, make([]interface{}, 0), []string{}, order)
  434. if e != nil {
  435. br.Msg = "获取失败"
  436. br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
  437. return
  438. }
  439. items := make([]*system.SysMenuItem, 0)
  440. for _, v := range list {
  441. t := &system.SysMenuItem{
  442. MenuId: v.MenuId,
  443. ParentId: v.ParentId,
  444. Name: v.Name,
  445. Sort: v.Sort,
  446. Path: v.Path,
  447. IconPath: v.IconPath,
  448. Component: v.Component,
  449. Hidden: v.Hidden,
  450. MenuType: v.MenuType,
  451. ButtonCode: v.ButtonCode,
  452. Children: make([]*system.SysMenuItem, 0),
  453. }
  454. items = append(items, t)
  455. }
  456. items = services.GetMenuTreeRecursive(items, 0)
  457. resp.List = items
  458. br.Data = resp
  459. br.Ret = 200
  460. br.Success = true
  461. br.Msg = "获取成功"
  462. }
  463. // @router /role/menu/auth_save [post]
  464. func (this *SysRoleController) SysRoleMenuAuthSave() {
  465. br := new(models.BaseResponse).Init()
  466. defer func() {
  467. if br.ErrMsg == "" {
  468. br.IsSendEmail = false
  469. }
  470. this.Data["json"] = br
  471. this.ServeJSON()
  472. }()
  473. sysUser := this.SysUser
  474. if sysUser == nil {
  475. br.Msg = "请登录"
  476. br.ErrMsg = "请登录,SysUser Is Empty"
  477. br.Ret = 408
  478. return
  479. }
  480. type RoleMenusSaveReq struct {
  481. RoleId int `description:"角色ID"`
  482. MenuIds []int `description:"菜单IDs"`
  483. HalfMenuIds []int `description:"半选菜单IDs-仅供前端回显用的"`
  484. }
  485. var req RoleMenusSaveReq
  486. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  487. if err != nil {
  488. br.Msg = "参数解析异常!"
  489. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  490. return
  491. }
  492. if req.RoleId <= 0 {
  493. br.Msg = "参数有误"
  494. return
  495. }
  496. if len(req.MenuIds) == 0 {
  497. br.Msg = "请选择菜单"
  498. return
  499. }
  500. items := make([]*system.SysRoleMenu, 0)
  501. for _, v := range req.MenuIds {
  502. t := new(system.SysRoleMenu)
  503. t.MenuId = v
  504. t.RoleId = req.RoleId
  505. items = append(items, t)
  506. }
  507. for _, v := range req.HalfMenuIds {
  508. t := new(system.SysRoleMenu)
  509. t.MenuId = v
  510. t.Type = 1
  511. t.RoleId = req.RoleId
  512. items = append(items, t)
  513. }
  514. if e := system.CreateMultiSysRoleMenu(req.RoleId, items); e != nil {
  515. br.Msg = "保存失败"
  516. br.ErrMsg = "保存角色菜单权限失败, Err: " + e.Error()
  517. return
  518. }
  519. br.Ret = 200
  520. br.Success = true
  521. br.Msg = "设置成功"
  522. }
  523. // @router /role/menu/buttons [get]
  524. func (this *SysRoleController) ButtonList() {
  525. br := new(models.BaseResponse).Init()
  526. defer func() {
  527. if br.ErrMsg == "" {
  528. br.IsSendEmail = false
  529. }
  530. this.Data["json"] = br
  531. this.ServeJSON()
  532. }()
  533. sysUser := this.SysUser
  534. if sysUser == nil {
  535. br.Msg = "请登录"
  536. br.ErrMsg = "请登录,SysUser Is Empty"
  537. br.Ret = 408
  538. return
  539. }
  540. roleId := sysUser.RoleId
  541. list, e := system.GetMenuButtonsByRoleId(roleId)
  542. if e != nil {
  543. br.Msg = "获取失败"
  544. br.ErrMsg = "获取角色按钮权限失败, Err: " + e.Error()
  545. return
  546. }
  547. buttonList := make([]*system.SysMenuButtonResp, 0)
  548. for _, v := range list {
  549. tmp := new(system.SysMenuButtonResp)
  550. tmp.MenuId = v.MenuId
  551. tmp.ParentId = v.ParentId
  552. tmp.MenuType = v.MenuType
  553. tmp.Name = v.Name
  554. tmp.ButtonCode = v.ButtonCode
  555. buttonList = append(buttonList, tmp)
  556. }
  557. br.Data = buttonList
  558. br.Ret = 200
  559. br.Success = true
  560. br.Msg = "获取成功"
  561. }
  562. // @router /config [get]
  563. func (this *SysRoleController) SystemConfig() {
  564. br := new(models.BaseResponse).Init()
  565. defer func() {
  566. if br.ErrMsg == "" {
  567. br.IsSendEmail = false
  568. }
  569. this.Data["json"] = br
  570. this.ServeJSON()
  571. }()
  572. sysUser := this.SysUser
  573. if sysUser == nil {
  574. br.Msg = "请登录"
  575. br.ErrMsg = "请登录,SysUser Is Empty"
  576. br.Ret = 408
  577. return
  578. }
  579. list := make([]system.BusinessConf, 0)
  580. conf, e := models.GetBusinessConf()
  581. if e != nil {
  582. br.Msg = "获取失败"
  583. br.ErrMsg = "获取基础配置失败, Err: " + e.Error()
  584. return
  585. }
  586. list = append(list, system.BusinessConf{
  587. ConfKey: "ReportViewUrl",
  588. ConfVal: conf["ReportViewUrl"],
  589. }, system.BusinessConf{
  590. ConfKey: "ChartViewUrl",
  591. ConfVal: conf["ChartViewUrl"],
  592. }, system.BusinessConf{
  593. ConfKey: "LoginUrl",
  594. ConfVal: conf["LoginUrl"],
  595. })
  596. osc := system.BusinessConf{
  597. ConfKey: "ObjectStorageClient",
  598. ConfVal: utils.ObjectStorageClient,
  599. }
  600. if osc.ConfVal == "" {
  601. osc.ConfVal = "oss"
  602. }
  603. pptUpload := system.BusinessConf{
  604. ConfKey: "PptUpdateApi",
  605. ConfVal: utils.PptUpdateApi,
  606. }
  607. list = append(list, osc, pptUpload)
  608. br.Data = list
  609. br.Ret = 200
  610. br.Success = true
  611. br.Msg = "获取成功"
  612. }