MenuService.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Laravel框架 [ Laravel ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2017~2021 Laravel研发中心
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://www.laravel.cn
  8. // +----------------------------------------------------------------------
  9. // | Author: wesmiler <12345678@qq.com>
  10. // +----------------------------------------------------------------------
  11. namespace App\Services;
  12. use App\Models\MenuModel;
  13. /**
  14. * 菜单管理-服务类
  15. * @author wesmiler
  16. * @since 2020/11/10
  17. * Class MenuService
  18. * @package App\Services
  19. */
  20. class MenuService extends BaseService
  21. {
  22. /**
  23. * 构造函数
  24. * @author wesmiler
  25. * @since 2020/11/11
  26. * MenuService constructor.
  27. */
  28. public function __construct()
  29. {
  30. $this->model = new MenuModel();
  31. }
  32. /**
  33. * 获取数据列表
  34. * @return array
  35. * @since 2020/11/11
  36. * @author wesmiler
  37. */
  38. public function getList()
  39. {
  40. $param = request()->all();
  41. // 查询条件
  42. $map = [];
  43. // 上级ID
  44. $pid = intval(getter($param, 'pid', 0));
  45. if (!$pid) {
  46. $map[] = ['pid', '=', 0];
  47. } else {
  48. $map[] = ['pid', '=', $pid];
  49. }
  50. // 菜单标题
  51. $title = getter($param, "title");
  52. if ($title) {
  53. $map[] = ['title', 'like', "%{$title}%"];
  54. }
  55. $list = $this->model->getList($map, [['sort', 'asc']]);
  56. if (!empty($list)) {
  57. foreach ($list as &$val) {
  58. if ($val['type'] == 0) {
  59. $val['hasChildren'] = true;
  60. }
  61. }
  62. }
  63. return message("操作成功", true, $list);
  64. }
  65. /**
  66. * 获取菜单详情
  67. * @return array
  68. * @since 2021/4/10
  69. * @author wesmiler
  70. */
  71. public function info()
  72. {
  73. // 记录ID
  74. $id = request()->input("id", 0);
  75. $info = [];
  76. if ($id) {
  77. $info = $this->model->getInfo($id);
  78. }
  79. // 获取权限节点
  80. $checkedList = array();
  81. if ($info['type'] == 0) {
  82. $permissionList = $this->model
  83. ->select(["sort"])
  84. ->where("pid", "=", $info['id'])
  85. ->where("mark", "=", 1)
  86. ->get()
  87. ->toArray();
  88. if (is_array($permissionList)) {
  89. $checkedList = array_key_value($permissionList, "sort");
  90. }
  91. $info['checkedList'] = $checkedList;
  92. }
  93. return message(MESSAGE_OK, true, $info);
  94. }
  95. /**
  96. * 添加或编辑
  97. * @return array
  98. * @since 2021/4/10
  99. * @author wesmiler
  100. */
  101. public function edit()
  102. {
  103. // 参数
  104. $param = request()->all();
  105. // 权限节点
  106. $checkedList = isset($param['checkedList']) ? $param['checkedList'] : array();
  107. unset($param['checkedList']);
  108. // 保存数据
  109. $result = $this->model->edit($param);
  110. if (!$result) {
  111. return message("操作失败", false);
  112. }
  113. // 设置权限节点
  114. if ($param['type'] == 0 && !empty($param['path']) && !empty($checkedList)) {
  115. $item = explode("/", $param['path']);
  116. // 模块名称
  117. $moduleName = $item[count($item) - 1];
  118. // 模块标题
  119. $moduleTitle = str_replace("管理", "", $param['title']);
  120. // 遍历权限节点
  121. foreach ($checkedList as $val) {
  122. $data = [];
  123. $data['pid'] = $result;
  124. $data['type'] = 1;
  125. $data['status'] = 1;
  126. $data['sort'] = intval($val);
  127. $data['target'] = $param['target'];
  128. // 判断当前节点是否已存在
  129. $permissionInfo = $this->model
  130. ->where("pid", "=", $result)
  131. ->where("type", "=", 1)
  132. ->where("sort", "=", $val)
  133. ->where("mark", "=", 1)
  134. ->first();
  135. if ($permissionInfo) {
  136. $data['id'] = $permissionInfo['id'];
  137. }
  138. if ($val == 1) {
  139. // 查询
  140. $data['title'] = "查询" . $moduleTitle;
  141. $data['permission'] = "sys:{$moduleName}:index";
  142. } else if ($val == 5) {
  143. // 添加
  144. $data['title'] = "添加" . $moduleTitle;
  145. $data['permission'] = "sys:{$moduleName}:add";
  146. } else if ($val == 10) {
  147. // 修改
  148. $data['title'] = "修改" . $moduleTitle;
  149. $data['permission'] = "sys:{$moduleName}:edit";
  150. } else if ($val == 15) {
  151. // 删除
  152. $data['title'] = "删除" . $moduleTitle;
  153. $data['permission'] = "sys:{$moduleName}:delete";
  154. } else if ($val == 20) {
  155. // 状态
  156. $data['title'] = "设置状态";
  157. $data['permission'] = "sys:{$moduleName}:status";
  158. } else if ($val == 25) {
  159. // 批量删除
  160. $data['title'] = "批量删除";
  161. $data['permission'] = "sys:{$moduleName}:dall";
  162. } else if ($val == 30) {
  163. // 全部展开
  164. $data['title'] = "全部展开";
  165. $data['permission'] = "sys:{$moduleName}:expand";
  166. } else if ($val == 35) {
  167. // 全部折叠
  168. $data['title'] = "全部折叠";
  169. $data['permission'] = "sys:{$moduleName}:collapse";
  170. } else if ($val == 40) {
  171. // 添加子级
  172. $data['title'] = "添加子级";
  173. $data['permission'] = "sys:{$moduleName}:addz";
  174. } else if ($val == 45) {
  175. // 导出数据
  176. $data['title'] = "导出数据";
  177. $data['permission'] = "sys:{$moduleName}:export";
  178. } else if ($val == 50) {
  179. // 导入数据
  180. $data['title'] = "导入数据";
  181. $data['permission'] = "sys:{$moduleName}:import";
  182. } else if ($val == 55) {
  183. // 分配权限
  184. $data['title'] = "分配权限";
  185. $data['permission'] = "sys:{$moduleName}:permission";
  186. }
  187. if (empty($data['title'])) {
  188. continue;
  189. }
  190. $menuModel = new MenuModel();
  191. $menuModel->edit($data);
  192. }
  193. }
  194. return message();
  195. }
  196. /**
  197. * 获取权限菜单列表
  198. * @param $userId
  199. * @return array
  200. * @author wesmiler
  201. * @since 2020/11/11
  202. */
  203. public function getPermissionList($userId)
  204. {
  205. $list = [];
  206. if ($userId == 1) {
  207. // 管理员拥有全部权限
  208. $list = $this->model->getChilds(0);
  209. } else {
  210. // 其他角色
  211. $list = $this->getPermissionMenu($userId, 0);
  212. }
  213. return message("操作成功", true, $list);
  214. }
  215. /**
  216. * 获取菜单权限列表
  217. * @param $userId 用户ID
  218. * @param $pid 上级ID
  219. * @return mixed
  220. * @since 2020/11/14
  221. * @author wesmiler
  222. */
  223. public function getPermissionMenu($userId, $pid = 0)
  224. {
  225. $menuModel = new MenuModel();
  226. $menuList = $menuModel::from("menu as m")
  227. ->select('m.*')
  228. ->join('role_menu as rm', 'rm.menu_id', '=', 'm.id')
  229. ->join('user_role as ur', 'ur.role_id', '=', 'rm.role_id')
  230. ->distinct(true)
  231. ->where('ur.user_id', '=', $userId)
  232. ->where('m.type', '=', 0)
  233. ->where('m.pid', '=', $pid)
  234. ->where('m.status', '=', 1)
  235. ->where('m.mark', '=', 1)
  236. ->orderBy('m.pid')
  237. ->orderBy('m.sort')
  238. ->get()->toArray();
  239. if (!empty($menuList)) {
  240. foreach ($menuList as &$val) {
  241. $childList = $this->getPermissionMenu($userId, $val['id']);
  242. if (is_array($childList) && !empty($childList)) {
  243. $val['children'] = $childList;
  244. }
  245. }
  246. }
  247. return $menuList;
  248. }
  249. /**
  250. * 获取权限节点
  251. * @param $userId 用户ID
  252. * @return array
  253. * @author wesmiler
  254. * @since 2021/4/9
  255. */
  256. public function getPermissionsList($userId)
  257. {
  258. $list = [];
  259. if ($userId == 1) {
  260. // 管理员拥有全部权限
  261. $permissionList = $this->model
  262. ->select("permission")
  263. ->where("type", "=", 1)
  264. ->where("mark", "=", 1)
  265. ->get()
  266. ->toArray();
  267. $list = empty($permissionList) ? array() : array_key_value($permissionList, 'permission');
  268. } else {
  269. // 其他角色
  270. $menuModel = new MenuModel();
  271. $permissionList = $menuModel::from("menu as m")
  272. ->select('m.permission')
  273. ->join('role_menu as rm', 'rm.menu_id', '=', 'm.id')
  274. ->join('user_role as ur', 'ur.role_id', '=', 'rm.role_id')
  275. ->distinct(true)
  276. ->where('ur.user_id', '=', $userId)
  277. ->where('m.type', '=', 1)
  278. ->where('m.status', '=', 1)
  279. ->where('m.mark', '=', 1)
  280. ->orderBy('m.pid')
  281. ->orderBy('m.sort')
  282. ->get()
  283. ->toArray();
  284. $list = empty($permissionList) ? array() : array_key_value($permissionList, 'permission');
  285. }
  286. return $list;
  287. }
  288. }