Menu.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. namespace app\admin\controller\base\menu;
  3. /**
  4. * @title: 菜单
  5. */
  6. use app\admin\controller\Base;
  7. use app\admin\validate\base\menu\Menu as MenuValidate;
  8. use app\common\model\base\menu\Menu as menuModel;
  9. use app\common\model\base\org\OrgType;
  10. use app\common\model\base\org\Org;
  11. use app\common\model\base\org\OrgRole;
  12. use app\common\model\base\menu\Menurequest;
  13. class Menu extends Base
  14. {
  15. protected $menuModel = null;
  16. public function initialize()
  17. {
  18. parent::initialize();
  19. $this->menuModel = new menuModel;
  20. }
  21. /**
  22. * @title: 获取菜单列表
  23. * @return array
  24. * @Author: wangkewei
  25. * @Date: 2021/5/18 9:26
  26. */
  27. public function getList()
  28. {
  29. $data = $this->request->param();
  30. $list = $this->menuModel->with(['menurequest'])->order('sort ASC')->select()->toArray();
  31. $list = FieldConverList($list);
  32. foreach($list as &$row){
  33. $row['is_root'] = $row['is_root'] ==1;
  34. $row['affix'] = $row['affix'] ==1;
  35. $row['hidden'] = $row['hidden'] ==1;
  36. $row['dot'] = $row['dot'] ==1;
  37. $row['noKeepAlive'] = $row['noKeepAlive'] ==1;
  38. $row['alwaysShow'] = $row['alwaysShow'] ==1;
  39. $row['isCustomSvgIcon'] = $row['isCustomSvgIcon'] ==1;
  40. $row['tabHidden'] = $row['tabHidden'] ==1;
  41. }
  42. $list = array2tree($list,'pid','menu_id');
  43. return res(1,"获取成功",$list);
  44. }
  45. /**
  46. * @title: 编辑菜单
  47. * @param array
  48. * @return array
  49. * @Author: wangkewei
  50. * @Date: 2021/5/18 9:27
  51. */
  52. public function doEdit()
  53. {
  54. $params = $this->request->param();
  55. $meta = !empty($params['meta'])?$params['meta']:[];
  56. unset($params['meta']);
  57. $params = array_merge($params,$meta);
  58. $check = $this->validate($params,MenuValidate::class);
  59. if(true!==$check){
  60. return Result(0,$check);
  61. }
  62. $pid = !empty($params['pid'])?$params['pid']:0;
  63. $data = [
  64. "name" => $params['name'],
  65. "title" => $params['title'],
  66. "path" => $params['path'],
  67. "component" => $params['component']??"",
  68. "is_root" => $params['name']=='Root'?1:2,//1是2不是
  69. "is_parent" => $pid==0?1:2,//1是2不是
  70. "pid" => $pid,
  71. "badge" => !empty($params['badge'])?$params['badge']:'',
  72. "icon" => !empty($params['icon'])?$params['icon']:"",
  73. "redirect" => !empty($params['redirect'])?$params['redirect']:"",
  74. "affix" => !empty($params['affix'])?1:2,//1是2不是
  75. "hidden" => !empty($params['hidden'])?1:2,//1是2不是
  76. "dot" => !empty($params['dot'])?1:2,//1是2不是
  77. "noKeepAlive" => !empty($params['noKeepAlive'])?1:2,//1是2不是
  78. "alwaysShow" => !empty($params['alwaysShow'])?1:2,//1是2不是
  79. "isCustomSvgIcon" => !empty($params['isCustomSvgIcon'])?1:2,//1是2不是
  80. "tabHidden" => !empty($params['tabHidden'])?1:2,//1是2不是
  81. "sort" => !empty($params['sort'])?$params['sort']:0,
  82. "cascade" => !empty($params['cascade'])?$params['cascade']:"",
  83. "status" => !empty($params['status'])?:1
  84. ];
  85. if(!empty($params['menu_id'])){
  86. $data['menu_id'] = $params['menu_id'];
  87. }
  88. $this->menuModel->replace()->save($data);
  89. $menu_id = $this->menuModel->menu_id;
  90. $parent_path = [];
  91. if(!empty($pid)){
  92. $pInfo = $this->menuModel->where("menu_id",$pid)->find();
  93. $parent_path = explode(',',$pInfo->parent_path);
  94. $this->menuModel->where('menu_id',$pid)->save(['is_parent'=>1]);
  95. }
  96. $parent_path[] = $menu_id;
  97. $this->menuModel->where("menu_id",$menu_id)->update(['parent_path'=>implode(',',$parent_path)]);
  98. slog(1,"编辑了菜单".$data['title']);
  99. return res(1,"保存成功",$menu_id);
  100. }
  101. /**
  102. * @title: 菜单删除
  103. * @param {int} {id} {必填} {菜单id}
  104. * @return array
  105. * @Author: wangkewei
  106. * @Date: 2021/5/18 9:27
  107. */
  108. public function doDelete(int $id)
  109. {
  110. $ids = menuModel::where('menu_id',$id)->whereOr('parent_path','find in set',$id)->column('menu_id');
  111. $where = [];
  112. if(!empty($ids)){
  113. $where[] = ['menu_id','IN',$ids];
  114. }
  115. // 所删除的菜单的请求
  116. $requestIds = Menurequest::where('menu_id','IN',$ids)->column('menu_request_id');
  117. try{
  118. if(!empty($where)){
  119. menuModel::startTrans();
  120. $whereOr = [];
  121. foreach($ids as $menu_id){
  122. $whereOr[] = ['menu_ids','FIND IN SET',$menu_id];
  123. }
  124. // 删除企业类型相关的菜单和请求
  125. $orgTypeList = OrgType::whereOr($whereOr)->select()->toArray();
  126. $orgTypeSaveData = [];
  127. foreach($orgTypeList as $orgTypeItem){
  128. $orgTypeItem['menu_ids'] = array_diff($orgTypeItem['menu_ids'],$ids);
  129. $orgTypeItem['request_ids'] = array_diff($orgTypeItem['request_ids'],$requestIds);
  130. $orgTypeSaveData[] = $orgTypeItem;
  131. }
  132. // 删除企业相关的菜单和请求
  133. $orgList = Org::whereOr($whereOr)->select()->toArray();
  134. $orgSaveData = [];
  135. foreach($orgList as $orgItem){
  136. $orgItem['menu_ids'] = array_diff($orgItem['menu_ids'],$ids);
  137. $orgItem['request_ids'] = array_diff($orgItem['request_ids'],$requestIds);
  138. $orgSaveData[] = $orgItem;
  139. }
  140. // 删除企业角色相关的菜单和请求
  141. $orgRoleList = OrgRole::whereOr($whereOr)->select()->toArray();
  142. $orgRoleSaveData = [];
  143. foreach($orgRoleList as $orgRoleItem){
  144. $orgRoleItem['menu_ids'] = array_diff($orgRoleItem['menu_ids'],$ids);
  145. $orgRoleItem['request_ids'] = array_diff($orgRoleItem['request_ids'],$requestIds);
  146. $orgRoleSaveData[] = $orgRoleItem;
  147. }
  148. // 保存修改
  149. (new OrgType)->replace()->saveAll($orgTypeSaveData);
  150. (new Org)->replace()->saveAll($orgSaveData);
  151. (new OrgRole)->replace()->saveAll($orgRoleSaveData);
  152. // 删除菜单
  153. menuModel::destroy(function($query)use($where){
  154. $query->where($where);
  155. });
  156. // 删除请求
  157. Menurequest::destroy(function($query)use($where){
  158. $query->where($where);
  159. });
  160. menuModel::commit();
  161. }
  162. }catch(\Exception $e){
  163. menuModel::rollback();
  164. return res(2,"删除失败",$e->getFile().'第'.$e->getLine().'行:'.$e->getMessage(),$e->getTrace());
  165. }
  166. slog(1,"删除了菜单");
  167. return res(1,"删除成功");
  168. }
  169. }