SystemMenus.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <?php
  2. namespace app\adminapi\controller\v1\setting;
  3. use app\adminapi\controller\AuthController;
  4. use crmeb\services\FormBuilder as Form;
  5. use crmeb\services\UtilService;
  6. use app\models\system\SystemMenus as SystemMenusAdmin;
  7. use crmeb\services\UtilService as Util;
  8. use think\facade\Route as Url;
  9. use think\Request;
  10. class SystemMenus extends AuthController
  11. {
  12. /**
  13. * 显示资源列表
  14. *
  15. * @return \think\Response
  16. */
  17. public function index()
  18. {
  19. $where = UtilService::getMore([
  20. ['is_show', ''],
  21. ['pid', ''],
  22. ['keyword', ''],
  23. ]);
  24. return $this->success(SystemMenusAdmin::getAuthList($where));
  25. }
  26. /**
  27. * 显示创建资源表单页.
  28. *
  29. * @return \think\Response
  30. */
  31. public function create()
  32. {
  33. $field[] = Form::input('menu_name', '按钮名称')->required('按钮名称必填');
  34. $field[] = Form::select('pid', '父级id')->setOptions(function () {
  35. $list = sort_list_tier(SystemMenusAdmin::getMenusArray(SystemMenusAdmin::all(function ($m) {
  36. $m->order('sort DESC,id ASC')->where('is_del', 0);
  37. })), '0', 'pid', 'id');
  38. $menus = [['value' => 0, 'label' => '顶级按钮']];
  39. foreach ($list as $menu) {
  40. $menus[] = ['value' => $menu['id'], 'label' => $menu['html'] . $menu['menu_name']];
  41. }
  42. return $menus;
  43. })->filterable(1);
  44. $field[] = Form::select('module', '模块名')->options([['label' => '总后台', 'value' => 'admin']]);
  45. $field[] = Form::input('controller', '控制器名');
  46. $field[] = Form::input('action', '方法名');
  47. $field[] = Form::input('menu_path', '路由名称')->placeholder('请输入前台跳转路由地址')->required('请填写前台路由地址');
  48. $field[] = Form::input('unique_auth', '权限标识')->placeholder('不填写则后台自动生成');
  49. $field[] = Form::input('params', '参数')->placeholder('举例:a/123/b/234');
  50. $field[] = Form::frameInputOne('icon', '图标', Url::buildUrl('admin/widget.widgets/icon', array('fodder' => 'icon')))->icon('md-add')->height('500px');
  51. $field[] = Form::number('sort', '排序', 0);
  52. $field[] = Form::radio('auth_type', '类型', 1)->options([['value' => 2, 'label' => '接口'], ['value' => 1, 'label' => '菜单(菜单只显示三级)']]);
  53. $field[] = Form::radio('is_header', '是否顶部菜单', 0)->options([['value' => 0, 'label' => '否'], ['value' => 1, 'label' => '是']]);
  54. $field[] = Form::radio('is_show', '状态', 0)->options([['value' => 0, 'label' => '关闭'], ['value' => 1, 'label' => '开启']]);
  55. $field[] = Form::radio('is_show_path', '是否为前端隐藏菜单', 0)->options([['value' => 1, 'label' => '是'], ['value' => 0, 'label' => '否']]);
  56. $field[] = Form::select('header', '顶部菜单')->setOptions(function () {
  57. $menulist = SystemMenusAdmin::all(function ($m) {
  58. $m->where(['is_header' => 1])->order('sort DESC,id ASC');
  59. })->toArray();
  60. $list = sort_list_tier($menulist, '顶级', 'pid', 'id');
  61. $menus = [['value' => '', 'label' => '请选择']];
  62. foreach ($list as $menu) {
  63. $menus[] = ['value' => $menu['header'], 'label' => $menu['menu_name']];
  64. }
  65. return $menus;
  66. })->filterable(1);
  67. return $this->makePostForm('添加权限', $field, Url::buildUrl('/setting/save')->suffix(false));
  68. }
  69. /**
  70. * 保存新建的资源
  71. *
  72. * @param \think\Request $request
  73. * @return \think\Response
  74. */
  75. public function save(Request $request)
  76. {
  77. $data = UtilService::getMore([
  78. ['menu_name', ''],
  79. ['controller', ''],
  80. ['module', 'admin'],
  81. ['action', ''],
  82. ['icon', ''],
  83. ['params', ''],
  84. ['menu_path', ''],
  85. ['api_url', ''],
  86. ['methods', ''],
  87. ['unique_auth', ''],
  88. ['header', ''],
  89. ['is_header', 0],
  90. ['pid', 0],
  91. ['sort', 0],
  92. ['auth_type', 0],
  93. ['access', 1],
  94. ['is_show', 0],
  95. ['is_show_path', 0],
  96. ], $request);
  97. if (!$data['menu_name'])
  98. return $this->fail('请填写按钮名称');
  99. if (SystemMenusAdmin::create($data))
  100. return $this->success('添加成功');
  101. else
  102. return $this->fail('添加失败');
  103. }
  104. /**
  105. * 显示指定的资源
  106. *
  107. * @param int $id
  108. * @return \think\Response
  109. */
  110. public function read($id)
  111. {
  112. if (!$id || !($menu = SystemMenusAdmin::get($id)))
  113. return $this->fail('数据不存在');
  114. $menu = $menu->getData();
  115. $menu['pid'] = (string)$menu['pid'];
  116. $menu['auth_type'] = (string)$menu['auth_type'];
  117. $menu['is_header'] = (string)$menu['is_header'];
  118. $menu['is_show'] = (string)$menu['is_show'];
  119. $menu['is_show_path'] = (string)$menu['is_show_path'];
  120. return $this->success($menu);
  121. }
  122. /**
  123. * 显示编辑资源表单页.
  124. *
  125. * @param int $id
  126. * @return \think\Response
  127. */
  128. public function edit($id)
  129. {
  130. if (!$id || !($menu = SystemMenusAdmin::get($id)))
  131. return $this->fail('数据不存在');
  132. $field[] = Form::input('menu_name', '按钮名称', $menu['menu_name']);
  133. $field[] = Form::select('pid', '父级id', (string)$menu->getData('pid'))->setOptions(function () use ($id) {
  134. $list = (Util::sortListTier(SystemMenusAdmin::all(function ($m) {
  135. $m->order('sort DESC,id ASC')->where('is_del', 0);
  136. })->toArray(), '顶级', 'pid', 'menu_name'));
  137. $menus = [['value' => 0, 'label' => '顶级按钮']];
  138. foreach ($list as $menu) {
  139. $menus[] = ['value' => (int)$menu['id'], 'label' => $menu['html'] . $menu['menu_name']];
  140. }
  141. return $menus;
  142. })->filterable(1);
  143. $field[] = Form::select('module', '模块名', $menu['module'])->options([['label' => '总后台', 'value' => 'admin']]);
  144. $field[] = Form::input('controller', '控制器名', $menu['controller']);
  145. if (!empty($menu['controller'])) {
  146. $controller = preg_replace_callback('/([.]+([a-z]{1}))/i', function ($matches) {
  147. return '\\' . strtoupper($matches[2]);
  148. }, $menu['controller']);
  149. if (class_exists('\app\adminapi\v1\controller\\' . $controller)) {
  150. $list = get_this_class_methods('\app\adminapi\v1\controller\\' . $controller);
  151. $field[] = Form::select('action', '方法名', (string)$menu->getData('action'))->setOptions(function () use ($list) {
  152. $menus = [['value' => 0, 'label' => '默认函数']];
  153. foreach ($list as $menu) {
  154. $menus[] = ['value' => $menu, 'label' => $menu];
  155. }
  156. return $menus;
  157. })->filterable(1);
  158. } else {
  159. $field[] = Form::input('action', '方法名', $menu['action']);
  160. }
  161. } else {
  162. $field[] = Form::input('action', '方法名');
  163. }
  164. $field[] = Form::input('params', '参数', SystemMenusAdmin::paramStr($menu['params']))->placeholder('举例:a/123/b/234');
  165. $field[] = Form::input('menu_path', '路由名称', $menu['menu_path'])->placeholder('请输入前台跳转路由地址')->required('请填写前台路由地址');
  166. $field[] = Form::input('unique_auth', '权限标识', $menu['unique_auth'])->placeholder('不填写则后台自动生成');
  167. $field[] = Form::frameInputOne('icon', '图标', Url::buildUrl('admin/widget.widgets/icon', array('fodder' => 'icon')), $menu['icon'])->icon('ionic')->height('500px');
  168. $field[] = Form::number('sort', '排序', $menu['sort']);
  169. $field[] = Form::radio('auth_type', '是否菜单', $menu['is_show'])->options([['value' => 0, 'label' => '隐藏'], ['value' => 1, 'label' => '显示(菜单只显示三级)']]);
  170. $field[] = Form::radio('is_header', '是否顶部菜单', $menu['is_header'])->options([['value' => 0, 'label' => '否'], ['value' => 1, 'label' => '是']]);
  171. $field[] = Form::radio('is_show_path', '是否为前端隐藏菜单', $menu['is_show_path'])->options([['value' => 0, 'label' => '否'], ['value' => 1, 'label' => '是']]);
  172. $field[] = Form::select('header', '顶部菜单', (string)$menu->getData('header'))->setOptions(function () use ($id) {
  173. $list = (Util::sortListTier(SystemMenusAdmin::all(function ($m) {
  174. $m->where(['is_header' => 1]);
  175. })->toArray(), '顶级', 'header', 'menu_name'));
  176. $list = SystemMenusAdmin::where(['is_header' => 1])->select()->toArray();
  177. dd($list);
  178. $menus = [['value' => 0, 'label' => '请选择']];
  179. foreach ($list as $menu) {
  180. $menus[] = ['value' => (int)$menu['header'], 'label' => $menu['html'] . $menu['menu_name']];
  181. }
  182. return $menus;
  183. })->filterable(1);
  184. return $this->makePostForm('修改权限', $field, Url::buildUrl('/setting/update/' . $id)->suffix(false));
  185. }
  186. /**
  187. * 保存更新的资源
  188. *
  189. * @param \think\Request $request
  190. * @param int $id
  191. * @return \think\Response
  192. */
  193. public function update(Request $request, $id)
  194. {
  195. if (!$id || !($menu = SystemMenusAdmin::get($id)))
  196. return $this->fail('数据不存在');
  197. $data = UtilService::postMore([
  198. 'menu_name',
  199. 'controller',
  200. ['module', 'admin'],
  201. 'action',
  202. 'params',
  203. ['icon', ''],
  204. ['menu_path', ''],
  205. ['api_url', ''],
  206. ['methods', ''],
  207. ['unique_auth', ''],
  208. ['sort', 0],
  209. ['pid', 0],
  210. ['is_header', 0],
  211. ['header', ''],
  212. ['auth_type', 0],
  213. ['access', 1],
  214. ['is_show', 0],
  215. ['is_show_path', 0],
  216. ], $request);
  217. if (!$data['menu_name'])
  218. return $this->fail('请输入按钮名称');
  219. if (SystemMenusAdmin::edit($data, $id))
  220. return $this->success('修改成功');
  221. else
  222. return $this->fail('修改失败');
  223. }
  224. /**
  225. * 删除指定资源
  226. *
  227. * @param int $id
  228. * @return \think\Response
  229. */
  230. public function delete($id)
  231. {
  232. if (!$id)
  233. return $this->fail('参数错误,请重新打开');
  234. $res = SystemMenusAdmin::delMenu($id);
  235. if (!$res)
  236. return $this->fail(SystemMenusAdmin::getErrorInfo('删除失败,请稍候再试!'));
  237. else
  238. return $this->success('删除成功!');
  239. }
  240. /**
  241. * 显示和隐藏
  242. * @param $id
  243. * @return mixed
  244. */
  245. public function show($id)
  246. {
  247. if (!$id)
  248. return $this->fail('参数错误,请重新打开');
  249. [$show] = UtilService::postMore([['is_show', 0]], $this->request, true);
  250. if (SystemMenusAdmin::edit(['is_show' => $show], $id))
  251. return $this->success('修改成功');
  252. else
  253. return $this->fail('修改失败');
  254. }
  255. }