sys_role.go 16 KB

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