eta_business_menu.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637
  1. package eta_business
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hz_crm_api/controllers"
  6. "hongze/hz_crm_api/models"
  7. "hongze/hz_crm_api/models/eta_business"
  8. etaBusinessService "hongze/hz_crm_api/services/eta_business"
  9. "hongze/hz_crm_api/utils"
  10. "html/template"
  11. "strings"
  12. "time"
  13. )
  14. // EtaBusinessMenuController ETA商家菜单
  15. type EtaBusinessMenuController struct {
  16. controllers.BaseAuthController
  17. }
  18. // List
  19. // @Title 商家菜单列表
  20. // @Description 商家菜单列表
  21. // @Param BusinessId query int false "商家ID"
  22. // @Param Keyword query string false "关键词: 菜单名称"
  23. // @Success 200 Ret=200 获取成功
  24. // @router /menu/list [get]
  25. func (this *EtaBusinessMenuController) List() {
  26. br := new(models.BaseResponse).Init()
  27. defer func() {
  28. if br.ErrMsg == "" {
  29. br.IsSendEmail = false
  30. }
  31. this.Data["json"] = br
  32. this.ServeJSON()
  33. }()
  34. sysUser := this.SysUser
  35. if sysUser == nil {
  36. br.Msg = "请登录"
  37. br.ErrMsg = "请登录,SysUser Is Empty"
  38. br.Ret = 408
  39. return
  40. }
  41. resp := new(eta_business.EtaBusinessMenuListResp)
  42. resp.ChoiceList = make([]int, 0)
  43. resp.HalfChoiceList = make([]int, 0)
  44. resp.List = make([]*eta_business.EtaBusinessMenuItem, 0)
  45. // 权限校验
  46. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  47. if e != nil {
  48. br.Msg = "操作失败"
  49. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  50. return
  51. }
  52. if !ok {
  53. br.Data = resp
  54. br.Ret = 200
  55. br.Success = true
  56. br.Msg = "获取成功"
  57. return
  58. }
  59. menuCond := ``
  60. menuPars := make([]interface{}, 0)
  61. // 商家勾选的权限
  62. {
  63. businessId, _ := this.GetInt("EtaBusinessId", 0)
  64. if businessId > 0 {
  65. relateOb := new(eta_business.EtaBusinessMenuRelate)
  66. cond := ` AND eta_business_id = ?`
  67. pars := make([]interface{}, 0)
  68. pars = append(pars, businessId)
  69. relates, e := relateOb.GetItemsByCondition(cond, pars, []string{}, "")
  70. if e != nil {
  71. br.Msg = "获取失败"
  72. br.ErrMsg = "获取商家菜单关联列表失败, Err: " + e.Error()
  73. return
  74. }
  75. for _, r := range relates {
  76. if r.Type == 1 {
  77. resp.HalfChoiceList = append(resp.HalfChoiceList, r.MenuId)
  78. continue
  79. }
  80. resp.ChoiceList = append(resp.ChoiceList, r.MenuId)
  81. }
  82. menuCond += ` AND hidden = 0`
  83. }
  84. }
  85. list := make([]*eta_business.EtaBusinessMenu, 0)
  86. order := `sort ASC, create_time DESC, menu_id DESC`
  87. // 关键词
  88. keyword := this.GetString("Keyword")
  89. keyword = strings.TrimSpace(keyword)
  90. if keyword != "" {
  91. keyword = template.HTMLEscapeString(keyword)
  92. kw := fmt.Sprint("%", keyword, "%")
  93. menus, e := eta_business.GetMenuItemsByKeyword(kw, []string{}, order)
  94. if e != nil {
  95. br.Msg = "获取失败"
  96. br.ErrMsg = "获取商家菜单列表失败, Err: " + e.Error()
  97. return
  98. }
  99. list = menus
  100. }
  101. // 普通查询
  102. if keyword == "" {
  103. menuOb := new(eta_business.EtaBusinessMenu)
  104. menus, e := menuOb.GetItemsByCondition(menuCond, menuPars, []string{}, order)
  105. if e != nil {
  106. br.Msg = "获取失败"
  107. br.ErrMsg = "获取商家菜单列表失败, Err: " + e.Error()
  108. return
  109. }
  110. list = menus
  111. }
  112. items := make([]*eta_business.EtaBusinessMenuItem, 0)
  113. for _, v := range list {
  114. t := &eta_business.EtaBusinessMenuItem{
  115. MenuId: v.MenuId,
  116. ParentId: v.ParentId,
  117. Name: v.Name,
  118. Sort: v.Sort,
  119. Path: v.Path,
  120. IconPath: v.IconPath,
  121. Component: v.Component,
  122. Hidden: v.Hidden,
  123. MenuType: v.MenuType,
  124. ButtonCode: v.ButtonCode,
  125. Children: make([]*eta_business.EtaBusinessMenuItem, 0),
  126. }
  127. items = append(items, t)
  128. }
  129. // 递归返回树形结构
  130. items = etaBusinessService.GetMenuTreeRecursive(items, 0)
  131. resp.List = items
  132. br.Data = resp
  133. br.Ret = 200
  134. br.Success = true
  135. br.Msg = "获取成功"
  136. }
  137. // SaveRelate
  138. // @Title 保存商家菜单关联
  139. // @Description 保存商家菜单关联
  140. // @Param request body eta_business.EtaBusinessAddReq true "type json string"
  141. // @Success 200 Ret=200 操作成功
  142. // @router /menu/relate/save [post]
  143. func (this *EtaBusinessMenuController) SaveRelate() {
  144. br := new(models.BaseResponse).Init()
  145. defer func() {
  146. if br.ErrMsg == "" {
  147. br.IsSendEmail = false
  148. }
  149. this.Data["json"] = br
  150. this.ServeJSON()
  151. }()
  152. sysUser := this.SysUser
  153. if sysUser == nil {
  154. br.Msg = "请登录"
  155. br.ErrMsg = "请登录,SysUser Is Empty"
  156. br.Ret = 408
  157. return
  158. }
  159. // 操作权限校验
  160. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  161. if e != nil {
  162. br.Msg = "操作失败"
  163. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  164. return
  165. }
  166. if !ok {
  167. br.Msg = "无权操作"
  168. return
  169. }
  170. // 参数校验
  171. var req eta_business.EtaBusinessMenuRelateSaveReq
  172. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  173. br.Msg = "参数解析异常!"
  174. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  175. return
  176. }
  177. if req.EtaBusinessId <= 0 {
  178. br.Msg = "参数有误"
  179. return
  180. }
  181. if len(req.MenuIds) == 0 {
  182. br.Msg = "请选择菜单"
  183. return
  184. }
  185. ob := new(eta_business.EtaBusinessMenuRelate)
  186. items := make([]*eta_business.EtaBusinessMenuRelate, 0)
  187. for _, v := range req.MenuIds {
  188. t := new(eta_business.EtaBusinessMenuRelate)
  189. t.MenuId = v
  190. t.EtaBusinessId = req.EtaBusinessId
  191. items = append(items, t)
  192. }
  193. for _, v := range req.HalfMenuIds {
  194. t := new(eta_business.EtaBusinessMenuRelate)
  195. t.MenuId = v
  196. t.Type = 1
  197. t.EtaBusinessId = req.EtaBusinessId
  198. items = append(items, t)
  199. }
  200. if e := ob.CreateMulti(req.EtaBusinessId, items); e != nil {
  201. br.Msg = "保存失败"
  202. br.ErrMsg = "保存商家菜单关联失败, Err: " + e.Error()
  203. return
  204. }
  205. br.Ret = 200
  206. br.Success = true
  207. br.Msg = "操作成功"
  208. }
  209. // Add
  210. // @Title 新增菜单
  211. // @Description 新增菜单
  212. // @Param request body eta_business.EtaBusinessMenuAddReq true "type json string"
  213. // @Success 200 Ret=200 操作成功
  214. // @router /menu/add [post]
  215. func (this *EtaBusinessMenuController) Add() {
  216. br := new(models.BaseResponse).Init()
  217. defer func() {
  218. if br.ErrMsg == "" {
  219. br.IsSendEmail = false
  220. }
  221. this.Data["json"] = br
  222. this.ServeJSON()
  223. }()
  224. sysUser := this.SysUser
  225. if sysUser == nil {
  226. br.Msg = "请登录"
  227. br.ErrMsg = "请登录,SysUser Is Empty"
  228. br.Ret = 408
  229. return
  230. }
  231. // 操作权限校验
  232. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  233. if e != nil {
  234. br.Msg = "操作失败"
  235. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  236. return
  237. }
  238. if !ok {
  239. br.Msg = "无权操作"
  240. return
  241. }
  242. // 参数校验
  243. var req eta_business.EtaBusinessMenuAddReq
  244. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  245. br.Msg = "参数解析异常!"
  246. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  247. return
  248. }
  249. req.Name = strings.TrimSpace(req.Name)
  250. if req.Name == "" {
  251. br.Msg = "请输入名称"
  252. return
  253. }
  254. if req.MenuType == 0 {
  255. req.Path = strings.TrimSpace(req.Path)
  256. if req.Path == "" {
  257. br.Msg = "请输入路由地址"
  258. return
  259. }
  260. req.Component = strings.TrimSpace(req.Component)
  261. if req.Component == "" {
  262. br.Msg = "请输入组件路径"
  263. return
  264. }
  265. } else {
  266. req.ButtonCode = strings.TrimSpace(req.ButtonCode)
  267. if req.ButtonCode == "" {
  268. br.Msg = "请输入按钮/字段ID"
  269. return
  270. }
  271. }
  272. // 重名校验
  273. {
  274. ob := new(eta_business.EtaBusinessMenu)
  275. cond := ` AND parent_id = ? AND name = ?`
  276. pars := make([]interface{}, 0)
  277. pars = append(pars, req.ParentId, req.Name)
  278. exist, e := ob.GetItemByCondition(cond, pars)
  279. if e != nil && e.Error() != utils.ErrNoRow() {
  280. br.Msg = "操作失败"
  281. br.ErrMsg = "获取同名菜单失败, Err: " + e.Error()
  282. return
  283. }
  284. if exist != nil {
  285. br.Msg = "名称已存在"
  286. return
  287. }
  288. }
  289. // 新增
  290. menuOb := new(eta_business.EtaBusinessMenu)
  291. menuOb.ParentId = req.ParentId
  292. menuOb.Name = req.Name
  293. menuOb.Sort = req.Sort
  294. menuOb.Path = req.Path
  295. menuOb.IconPath = req.IconPath
  296. menuOb.Component = req.Component
  297. menuOb.Hidden = req.Hidden
  298. menuOb.MenuType = req.MenuType
  299. menuOb.ButtonCode = req.ButtonCode
  300. menuOb.CreateTime = time.Now().Local()
  301. menuOb.ModifyTime = time.Now().Local()
  302. // TODO:多级菜单
  303. if menuOb.ParentId > 0 {
  304. menuOb.LevelPath = menuOb.Component
  305. }
  306. if e := menuOb.Create(); e != nil {
  307. br.Msg = "操作失败"
  308. br.ErrMsg = "新增菜单失败, Err: " + e.Error()
  309. return
  310. }
  311. br.Ret = 200
  312. br.Success = true
  313. br.Msg = "操作成功"
  314. }
  315. // Edit
  316. // @Title 编辑菜单
  317. // @Description 编辑菜单
  318. // @Param request body eta_business.EtaBusinessMenuEditReq true "type json string"
  319. // @Success 200 Ret=200 操作成功
  320. // @router /menu/edit [post]
  321. func (this *EtaBusinessMenuController) Edit() {
  322. br := new(models.BaseResponse).Init()
  323. defer func() {
  324. if br.ErrMsg == "" {
  325. br.IsSendEmail = false
  326. }
  327. this.Data["json"] = br
  328. this.ServeJSON()
  329. }()
  330. sysUser := this.SysUser
  331. if sysUser == nil {
  332. br.Msg = "请登录"
  333. br.ErrMsg = "请登录,SysUser Is Empty"
  334. br.Ret = 408
  335. return
  336. }
  337. // 操作权限校验
  338. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  339. if e != nil {
  340. br.Msg = "操作失败"
  341. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  342. return
  343. }
  344. if !ok {
  345. br.Msg = "无权操作"
  346. return
  347. }
  348. // 参数校验
  349. var req eta_business.EtaBusinessMenuEditReq
  350. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  351. br.Msg = "参数解析异常!"
  352. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  353. return
  354. }
  355. if req.MenuId <= 0 {
  356. br.Msg = "参数有误"
  357. br.ErrMsg = "参数有误, MenuId"
  358. return
  359. }
  360. req.Name = strings.TrimSpace(req.Name)
  361. if req.Name == "" {
  362. br.Msg = "请输入名称"
  363. return
  364. }
  365. if req.MenuType == 0 {
  366. req.Path = strings.TrimSpace(req.Path)
  367. if req.Path == "" {
  368. br.Msg = "请输入路由地址"
  369. return
  370. }
  371. req.Component = strings.TrimSpace(req.Component)
  372. if req.Component == "" {
  373. br.Msg = "请输入组件路径"
  374. return
  375. }
  376. } else {
  377. req.ButtonCode = strings.TrimSpace(req.ButtonCode)
  378. if req.ButtonCode == "" {
  379. br.Msg = "请输入按钮/字段ID"
  380. return
  381. }
  382. }
  383. menuOb := new(eta_business.EtaBusinessMenu)
  384. item, e := menuOb.GetItemById(req.MenuId)
  385. if e != nil {
  386. if e.Error() == utils.ErrNoRow() {
  387. br.Msg = "菜单不存在, 请刷新页面"
  388. return
  389. }
  390. br.Msg = "操作失败"
  391. br.ErrMsg = "获取菜单失败, Err: " + e.Error()
  392. return
  393. }
  394. // 重名校验
  395. {
  396. ob := new(eta_business.EtaBusinessMenu)
  397. cond := ` AND parent_id = ? AND name = ?`
  398. pars := make([]interface{}, 0)
  399. pars = append(pars, req.ParentId, req.Name)
  400. exist, e := ob.GetItemByCondition(cond, pars)
  401. if e != nil && e.Error() != utils.ErrNoRow() {
  402. br.Msg = "操作失败"
  403. br.ErrMsg = "获取同名菜单失败, Err: " + e.Error()
  404. return
  405. }
  406. if exist != nil && exist.MenuId != item.MenuId {
  407. br.Msg = "名称已存在"
  408. return
  409. }
  410. }
  411. // 更新
  412. item.Name = req.Name
  413. item.Sort = req.Sort
  414. item.Path = req.Path
  415. item.IconPath = req.IconPath
  416. item.Component = req.Component
  417. item.Hidden = req.Hidden
  418. item.ButtonCode = req.ButtonCode
  419. item.ModifyTime = time.Now().Local()
  420. // TODO:多级菜单
  421. cols := make([]string, 0)
  422. cols = append(cols, "Name", "Sort", "Path", "IconPath", "Component", "Hidden", "ButtonCode", "ModifyTime")
  423. if item.ParentId > 0 {
  424. item.LevelPath = item.Component
  425. cols = append(cols, "LevelPath")
  426. }
  427. if e := item.Update(cols); e != nil {
  428. br.Msg = "操作失败"
  429. br.ErrMsg = "更新菜单失败, Err: " + e.Error()
  430. return
  431. }
  432. br.Ret = 200
  433. br.Success = true
  434. br.Msg = "操作成功"
  435. }
  436. // Remove
  437. // @Title 删除菜单
  438. // @Description 删除菜单
  439. // @Param request body eta_business.EtaBusinessMenuRemoveReq true "type json string"
  440. // @Success 200 Ret=200 操作成功
  441. // @router /menu/remove [post]
  442. func (this *EtaBusinessMenuController) Remove() {
  443. br := new(models.BaseResponse).Init()
  444. defer func() {
  445. if br.ErrMsg == "" {
  446. br.IsSendEmail = false
  447. }
  448. this.Data["json"] = br
  449. this.ServeJSON()
  450. }()
  451. sysUser := this.SysUser
  452. if sysUser == nil {
  453. br.Msg = "请登录"
  454. br.ErrMsg = "请登录,SysUser Is Empty"
  455. br.Ret = 408
  456. return
  457. }
  458. // 操作权限校验
  459. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  460. if e != nil {
  461. br.Msg = "操作失败"
  462. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  463. return
  464. }
  465. if !ok {
  466. br.Msg = "无权操作"
  467. return
  468. }
  469. // 参数校验
  470. var req eta_business.EtaBusinessMenuRemoveReq
  471. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  472. br.Msg = "参数解析异常!"
  473. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  474. return
  475. }
  476. if req.MenuId <= 0 {
  477. br.Msg = "参数有误"
  478. br.ErrMsg = "参数有误, MenuId"
  479. return
  480. }
  481. menuOb := new(eta_business.EtaBusinessMenu)
  482. _, e = menuOb.GetItemById(req.MenuId)
  483. if e != nil {
  484. if e.Error() == utils.ErrNoRow() {
  485. br.Msg = "菜单不存在, 请刷新页面"
  486. return
  487. }
  488. br.Msg = "操作失败"
  489. br.ErrMsg = "获取菜单失败, Err: " + e.Error()
  490. return
  491. }
  492. // 获取所有菜单列表, 筛选出该菜单及子菜单
  493. menus, e := menuOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
  494. if e != nil {
  495. br.Msg = "操作失败"
  496. br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
  497. return
  498. }
  499. menuIds := etaBusinessService.GetMenuChildrenIdsRecursive(menus, req.MenuId)
  500. menuIds = append(menuIds, req.MenuId)
  501. // 删除菜单
  502. if e = menuOb.MultiDel(menuIds); e != nil {
  503. br.Msg = "操作失败"
  504. br.ErrMsg = "删除菜单及子菜单失败, Err: " + e.Error()
  505. return
  506. }
  507. br.Ret = 200
  508. br.Success = true
  509. br.Msg = "操作成功"
  510. }
  511. // IconList
  512. // @Title 图标列表
  513. // @Description 图标列表
  514. // @Success 200 Ret=200 操作成功
  515. // @router /menu/icon/list [get]
  516. func (this *EtaBusinessMenuController) IconList() {
  517. br := new(models.BaseResponse).Init()
  518. defer func() {
  519. if br.ErrMsg == "" {
  520. br.IsSendEmail = false
  521. }
  522. this.Data["json"] = br
  523. this.ServeJSON()
  524. }()
  525. sysUser := this.SysUser
  526. if sysUser == nil {
  527. br.Msg = "请登录"
  528. br.ErrMsg = "请登录,SysUser Is Empty"
  529. br.Ret = 408
  530. return
  531. }
  532. iconOb := new(eta_business.EtaBusinessMenuIcon)
  533. icons, e := iconOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
  534. if e != nil {
  535. br.Msg = "获取失败"
  536. br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
  537. return
  538. }
  539. list := make([]*eta_business.EtaBusinessMenuIconItem, 0)
  540. for _, v := range icons {
  541. list = append(list, &eta_business.EtaBusinessMenuIconItem{
  542. IconId: v.IconId,
  543. IconPath: v.IconPath,
  544. })
  545. }
  546. br.Data = list
  547. br.Ret = 200
  548. br.Success = true
  549. br.Msg = "获取成功"
  550. }
  551. // IconAdd
  552. // @Title 新增图标
  553. // @Description 新增图标
  554. // @Success 200 Ret=200 操作成功
  555. // @router /menu/icon/add [post]
  556. func (this *EtaBusinessMenuController) IconAdd() {
  557. br := new(models.BaseResponse).Init()
  558. defer func() {
  559. if br.ErrMsg == "" {
  560. br.IsSendEmail = false
  561. }
  562. this.Data["json"] = br
  563. this.ServeJSON()
  564. }()
  565. sysUser := this.SysUser
  566. if sysUser == nil {
  567. br.Msg = "请登录"
  568. br.ErrMsg = "请登录,SysUser Is Empty"
  569. br.Ret = 408
  570. return
  571. }
  572. var req eta_business.EtaBusinessMenuIconAddReq
  573. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  574. br.Msg = "参数解析异常!"
  575. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  576. return
  577. }
  578. req.IconPath = strings.TrimSpace(req.IconPath)
  579. if req.IconPath == "" {
  580. br.Msg = "请上传图片"
  581. return
  582. }
  583. iconOb := new(eta_business.EtaBusinessMenuIcon)
  584. iconOb.IconPath = req.IconPath
  585. iconOb.CreateTime = time.Now().Local()
  586. if e := iconOb.Create(); e != nil {
  587. br.Msg = "操作失败"
  588. br.ErrMsg = "新增菜单icon失败, Err: " + e.Error()
  589. return
  590. }
  591. br.Ret = 200
  592. br.Success = true
  593. br.Msg = "操作成功"
  594. }