eta_business_menu.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638
  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. CreateTime: v.CreateTime.Format(utils.FormatDateTime),
  126. Children: make([]*eta_business.EtaBusinessMenuItem, 0),
  127. }
  128. items = append(items, t)
  129. }
  130. // 递归返回树形结构
  131. items = etaBusinessService.GetMenuTreeRecursive(items, 0)
  132. resp.List = items
  133. br.Data = resp
  134. br.Ret = 200
  135. br.Success = true
  136. br.Msg = "获取成功"
  137. }
  138. // SaveRelate
  139. // @Title 保存商家菜单关联
  140. // @Description 保存商家菜单关联
  141. // @Param request body eta_business.EtaBusinessAddReq true "type json string"
  142. // @Success 200 Ret=200 操作成功
  143. // @router /menu/relate/save [post]
  144. func (this *EtaBusinessMenuController) SaveRelate() {
  145. br := new(models.BaseResponse).Init()
  146. defer func() {
  147. if br.ErrMsg == "" {
  148. br.IsSendEmail = false
  149. }
  150. this.Data["json"] = br
  151. this.ServeJSON()
  152. }()
  153. sysUser := this.SysUser
  154. if sysUser == nil {
  155. br.Msg = "请登录"
  156. br.ErrMsg = "请登录,SysUser Is Empty"
  157. br.Ret = 408
  158. return
  159. }
  160. // 操作权限校验
  161. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  162. if e != nil {
  163. br.Msg = "操作失败"
  164. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  165. return
  166. }
  167. if !ok {
  168. br.Msg = "无权操作"
  169. return
  170. }
  171. // 参数校验
  172. var req eta_business.EtaBusinessMenuRelateSaveReq
  173. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  174. br.Msg = "参数解析异常!"
  175. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  176. return
  177. }
  178. if req.EtaBusinessId <= 0 {
  179. br.Msg = "参数有误"
  180. return
  181. }
  182. if len(req.MenuIds) == 0 {
  183. br.Msg = "请选择菜单"
  184. return
  185. }
  186. ob := new(eta_business.EtaBusinessMenuRelate)
  187. items := make([]*eta_business.EtaBusinessMenuRelate, 0)
  188. for _, v := range req.MenuIds {
  189. t := new(eta_business.EtaBusinessMenuRelate)
  190. t.MenuId = v
  191. t.EtaBusinessId = req.EtaBusinessId
  192. items = append(items, t)
  193. }
  194. for _, v := range req.HalfMenuIds {
  195. t := new(eta_business.EtaBusinessMenuRelate)
  196. t.MenuId = v
  197. t.Type = 1
  198. t.EtaBusinessId = req.EtaBusinessId
  199. items = append(items, t)
  200. }
  201. if e := ob.CreateMulti(req.EtaBusinessId, items); e != nil {
  202. br.Msg = "保存失败"
  203. br.ErrMsg = "保存商家菜单关联失败, Err: " + e.Error()
  204. return
  205. }
  206. br.Ret = 200
  207. br.Success = true
  208. br.Msg = "操作成功"
  209. }
  210. // Add
  211. // @Title 新增菜单
  212. // @Description 新增菜单
  213. // @Param request body eta_business.EtaBusinessMenuAddReq true "type json string"
  214. // @Success 200 Ret=200 操作成功
  215. // @router /menu/add [post]
  216. func (this *EtaBusinessMenuController) Add() {
  217. br := new(models.BaseResponse).Init()
  218. defer func() {
  219. if br.ErrMsg == "" {
  220. br.IsSendEmail = false
  221. }
  222. this.Data["json"] = br
  223. this.ServeJSON()
  224. }()
  225. sysUser := this.SysUser
  226. if sysUser == nil {
  227. br.Msg = "请登录"
  228. br.ErrMsg = "请登录,SysUser Is Empty"
  229. br.Ret = 408
  230. return
  231. }
  232. // 操作权限校验
  233. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  234. if e != nil {
  235. br.Msg = "操作失败"
  236. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  237. return
  238. }
  239. if !ok {
  240. br.Msg = "无权操作"
  241. return
  242. }
  243. // 参数校验
  244. var req eta_business.EtaBusinessMenuAddReq
  245. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  246. br.Msg = "参数解析异常!"
  247. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  248. return
  249. }
  250. req.Name = strings.TrimSpace(req.Name)
  251. if req.Name == "" {
  252. br.Msg = "请输入名称"
  253. return
  254. }
  255. if req.MenuType == 0 {
  256. req.Path = strings.TrimSpace(req.Path)
  257. if req.Path == "" {
  258. br.Msg = "请输入路由地址"
  259. return
  260. }
  261. req.Component = strings.TrimSpace(req.Component)
  262. if req.Component == "" {
  263. br.Msg = "请输入组件路径"
  264. return
  265. }
  266. } else {
  267. req.ButtonCode = strings.TrimSpace(req.ButtonCode)
  268. if req.ButtonCode == "" {
  269. br.Msg = "请输入按钮/字段ID"
  270. return
  271. }
  272. }
  273. // 重名校验
  274. {
  275. ob := new(eta_business.EtaBusinessMenu)
  276. cond := ` AND parent_id = ? AND name = ?`
  277. pars := make([]interface{}, 0)
  278. pars = append(pars, req.ParentId, req.Name)
  279. exist, e := ob.GetItemByCondition(cond, pars)
  280. if e != nil && e.Error() != utils.ErrNoRow() {
  281. br.Msg = "操作失败"
  282. br.ErrMsg = "获取同名菜单失败, Err: " + e.Error()
  283. return
  284. }
  285. if exist != nil {
  286. br.Msg = "名称已存在"
  287. return
  288. }
  289. }
  290. // 新增
  291. menuOb := new(eta_business.EtaBusinessMenu)
  292. menuOb.ParentId = req.ParentId
  293. menuOb.Name = req.Name
  294. menuOb.Sort = req.Sort
  295. menuOb.Path = req.Path
  296. menuOb.IconPath = req.IconPath
  297. menuOb.Component = req.Component
  298. menuOb.Hidden = req.Hidden
  299. menuOb.MenuType = req.MenuType
  300. menuOb.ButtonCode = req.ButtonCode
  301. menuOb.CreateTime = time.Now().Local()
  302. menuOb.ModifyTime = time.Now().Local()
  303. // TODO:多级菜单
  304. if menuOb.ParentId > 0 {
  305. menuOb.LevelPath = menuOb.Component
  306. }
  307. if e := menuOb.Create(); e != nil {
  308. br.Msg = "操作失败"
  309. br.ErrMsg = "新增菜单失败, Err: " + e.Error()
  310. return
  311. }
  312. br.Ret = 200
  313. br.Success = true
  314. br.Msg = "操作成功"
  315. }
  316. // Edit
  317. // @Title 编辑菜单
  318. // @Description 编辑菜单
  319. // @Param request body eta_business.EtaBusinessMenuEditReq true "type json string"
  320. // @Success 200 Ret=200 操作成功
  321. // @router /menu/edit [post]
  322. func (this *EtaBusinessMenuController) Edit() {
  323. br := new(models.BaseResponse).Init()
  324. defer func() {
  325. if br.ErrMsg == "" {
  326. br.IsSendEmail = false
  327. }
  328. this.Data["json"] = br
  329. this.ServeJSON()
  330. }()
  331. sysUser := this.SysUser
  332. if sysUser == nil {
  333. br.Msg = "请登录"
  334. br.ErrMsg = "请登录,SysUser Is Empty"
  335. br.Ret = 408
  336. return
  337. }
  338. // 操作权限校验
  339. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  340. if e != nil {
  341. br.Msg = "操作失败"
  342. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  343. return
  344. }
  345. if !ok {
  346. br.Msg = "无权操作"
  347. return
  348. }
  349. // 参数校验
  350. var req eta_business.EtaBusinessMenuEditReq
  351. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  352. br.Msg = "参数解析异常!"
  353. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  354. return
  355. }
  356. if req.MenuId <= 0 {
  357. br.Msg = "参数有误"
  358. br.ErrMsg = "参数有误, MenuId"
  359. return
  360. }
  361. req.Name = strings.TrimSpace(req.Name)
  362. if req.Name == "" {
  363. br.Msg = "请输入名称"
  364. return
  365. }
  366. if req.MenuType == 0 {
  367. req.Path = strings.TrimSpace(req.Path)
  368. if req.Path == "" {
  369. br.Msg = "请输入路由地址"
  370. return
  371. }
  372. req.Component = strings.TrimSpace(req.Component)
  373. if req.Component == "" {
  374. br.Msg = "请输入组件路径"
  375. return
  376. }
  377. } else {
  378. req.ButtonCode = strings.TrimSpace(req.ButtonCode)
  379. if req.ButtonCode == "" {
  380. br.Msg = "请输入按钮/字段ID"
  381. return
  382. }
  383. }
  384. menuOb := new(eta_business.EtaBusinessMenu)
  385. item, e := menuOb.GetItemById(req.MenuId)
  386. if e != nil {
  387. if e.Error() == utils.ErrNoRow() {
  388. br.Msg = "菜单不存在, 请刷新页面"
  389. return
  390. }
  391. br.Msg = "操作失败"
  392. br.ErrMsg = "获取菜单失败, Err: " + e.Error()
  393. return
  394. }
  395. // 重名校验
  396. {
  397. ob := new(eta_business.EtaBusinessMenu)
  398. cond := ` AND parent_id = ? AND name = ?`
  399. pars := make([]interface{}, 0)
  400. pars = append(pars, req.ParentId, req.Name)
  401. exist, e := ob.GetItemByCondition(cond, pars)
  402. if e != nil && e.Error() != utils.ErrNoRow() {
  403. br.Msg = "操作失败"
  404. br.ErrMsg = "获取同名菜单失败, Err: " + e.Error()
  405. return
  406. }
  407. if exist != nil && exist.MenuId != item.MenuId {
  408. br.Msg = "名称已存在"
  409. return
  410. }
  411. }
  412. // 更新
  413. item.Name = req.Name
  414. item.Sort = req.Sort
  415. item.Path = req.Path
  416. item.IconPath = req.IconPath
  417. item.Component = req.Component
  418. item.Hidden = req.Hidden
  419. item.ButtonCode = req.ButtonCode
  420. item.ModifyTime = time.Now().Local()
  421. // TODO:多级菜单
  422. cols := make([]string, 0)
  423. cols = append(cols, "Name", "Sort", "Path", "IconPath", "Component", "Hidden", "ButtonCode", "ModifyTime")
  424. if item.ParentId > 0 {
  425. item.LevelPath = item.Component
  426. cols = append(cols, "LevelPath")
  427. }
  428. if e := item.Update(cols); e != nil {
  429. br.Msg = "操作失败"
  430. br.ErrMsg = "更新菜单失败, Err: " + e.Error()
  431. return
  432. }
  433. br.Ret = 200
  434. br.Success = true
  435. br.Msg = "操作成功"
  436. }
  437. // Remove
  438. // @Title 删除菜单
  439. // @Description 删除菜单
  440. // @Param request body eta_business.EtaBusinessMenuRemoveReq true "type json string"
  441. // @Success 200 Ret=200 操作成功
  442. // @router /menu/remove [post]
  443. func (this *EtaBusinessMenuController) Remove() {
  444. br := new(models.BaseResponse).Init()
  445. defer func() {
  446. if br.ErrMsg == "" {
  447. br.IsSendEmail = false
  448. }
  449. this.Data["json"] = br
  450. this.ServeJSON()
  451. }()
  452. sysUser := this.SysUser
  453. if sysUser == nil {
  454. br.Msg = "请登录"
  455. br.ErrMsg = "请登录,SysUser Is Empty"
  456. br.Ret = 408
  457. return
  458. }
  459. // 操作权限校验
  460. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  461. if e != nil {
  462. br.Msg = "操作失败"
  463. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  464. return
  465. }
  466. if !ok {
  467. br.Msg = "无权操作"
  468. return
  469. }
  470. // 参数校验
  471. var req eta_business.EtaBusinessMenuRemoveReq
  472. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  473. br.Msg = "参数解析异常!"
  474. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  475. return
  476. }
  477. if req.MenuId <= 0 {
  478. br.Msg = "参数有误"
  479. br.ErrMsg = "参数有误, MenuId"
  480. return
  481. }
  482. menuOb := new(eta_business.EtaBusinessMenu)
  483. _, e = menuOb.GetItemById(req.MenuId)
  484. if e != nil {
  485. if e.Error() == utils.ErrNoRow() {
  486. br.Msg = "菜单不存在, 请刷新页面"
  487. return
  488. }
  489. br.Msg = "操作失败"
  490. br.ErrMsg = "获取菜单失败, Err: " + e.Error()
  491. return
  492. }
  493. // 获取所有菜单列表, 筛选出该菜单及子菜单
  494. menus, e := menuOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
  495. if e != nil {
  496. br.Msg = "操作失败"
  497. br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
  498. return
  499. }
  500. menuIds := etaBusinessService.GetMenuChildrenIdsRecursive(menus, req.MenuId)
  501. menuIds = append(menuIds, req.MenuId)
  502. // 删除菜单
  503. if e = menuOb.MultiDel(menuIds); e != nil {
  504. br.Msg = "操作失败"
  505. br.ErrMsg = "删除菜单及子菜单失败, Err: " + e.Error()
  506. return
  507. }
  508. br.Ret = 200
  509. br.Success = true
  510. br.Msg = "操作成功"
  511. }
  512. // IconList
  513. // @Title 图标列表
  514. // @Description 图标列表
  515. // @Success 200 Ret=200 操作成功
  516. // @router /menu/icon/list [get]
  517. func (this *EtaBusinessMenuController) IconList() {
  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. iconOb := new(eta_business.EtaBusinessMenuIcon)
  534. icons, e := iconOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
  535. if e != nil {
  536. br.Msg = "获取失败"
  537. br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
  538. return
  539. }
  540. list := make([]*eta_business.EtaBusinessMenuIconItem, 0)
  541. for _, v := range icons {
  542. list = append(list, &eta_business.EtaBusinessMenuIconItem{
  543. IconId: v.IconId,
  544. IconPath: v.IconPath,
  545. })
  546. }
  547. br.Data = list
  548. br.Ret = 200
  549. br.Success = true
  550. br.Msg = "获取成功"
  551. }
  552. // IconAdd
  553. // @Title 新增图标
  554. // @Description 新增图标
  555. // @Success 200 Ret=200 操作成功
  556. // @router /menu/icon/add [post]
  557. func (this *EtaBusinessMenuController) IconAdd() {
  558. br := new(models.BaseResponse).Init()
  559. defer func() {
  560. if br.ErrMsg == "" {
  561. br.IsSendEmail = false
  562. }
  563. this.Data["json"] = br
  564. this.ServeJSON()
  565. }()
  566. sysUser := this.SysUser
  567. if sysUser == nil {
  568. br.Msg = "请登录"
  569. br.ErrMsg = "请登录,SysUser Is Empty"
  570. br.Ret = 408
  571. return
  572. }
  573. var req eta_business.EtaBusinessMenuIconAddReq
  574. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  575. br.Msg = "参数解析异常!"
  576. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  577. return
  578. }
  579. req.IconPath = strings.TrimSpace(req.IconPath)
  580. if req.IconPath == "" {
  581. br.Msg = "请上传图片"
  582. return
  583. }
  584. iconOb := new(eta_business.EtaBusinessMenuIcon)
  585. iconOb.IconPath = req.IconPath
  586. iconOb.CreateTime = time.Now().Local()
  587. if e := iconOb.Create(); e != nil {
  588. br.Msg = "操作失败"
  589. br.ErrMsg = "新增菜单icon失败, Err: " + e.Error()
  590. return
  591. }
  592. br.Ret = 200
  593. br.Success = true
  594. br.Msg = "操作成功"
  595. }