Menu.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: edison
  5. * Date: 2018/3/26
  6. * Time: 上午11:50
  7. */
  8. namespace app\admin\controller;
  9. use think\Config;
  10. use think\Db;
  11. use tree\Tree;
  12. class Menu extends Admin
  13. {
  14. protected $noCheckAuth = ['addPost','editPost'];
  15. public function _initialize() {
  16. parent::_initialize();
  17. $this->adminAuthRuleModel = $this->nwModel('admin_auth_rule');
  18. }
  19. public function index()
  20. {
  21. // 排序
  22. $this->listOrders($this->adminAuthRuleModel);
  23. $result = $this->adminAuthRuleModel->order(["list_order" => "ASC"])->select();
  24. $tree = new Tree();
  25. $tree->icon = ['&nbsp;&nbsp;&nbsp;│ ', '&nbsp;&nbsp;&nbsp;├─ ', '&nbsp;&nbsp;&nbsp;└─ '];
  26. $tree->nbsp = '&nbsp;&nbsp;&nbsp;';
  27. $newMenus = [];
  28. foreach ($result as $m) {
  29. $newMenus[$m['id']] = $m;
  30. }
  31. foreach ($result as $key => $value) {
  32. $result[$key]['parent_id_node'] = ($value['parent_id']) ? ' class="child-of-node-' . $value['parent_id'] . '"' : '';
  33. $result[$key]['style'] = empty($value['parent_id']) ? '' : 'display:none;';
  34. $str_manage = '';
  35. if (authUI('admin/menu/add')) {
  36. $str_manage .= '<a href="' . url("Menu/add", ["parent_id" => $value['id'], "menu_id" => $this->request->param("menu_id")])
  37. . '">添加子菜单</a> ';
  38. }
  39. if (authUI('admin/Menu/edit')) {
  40. $str_manage .= '<a href="' . url("Menu/edit", ["id" => $value['id'], "menu_id" => $this->request->param("menu_id")])
  41. . '">编辑</a> ';
  42. }
  43. if (authUI('admin/Menu/delete')) {
  44. $str_manage .= '<a href="javascript:;" onclick="del_info(this,\'' . url("Menu/delete", ["id" => $value['id'], "menu_id" => $this->request->param("menu_id")]) . '\')"> 删除 </a> ';
  45. }
  46. $result[$key]['status'] = $value['status'] ? '显示' : '隐藏';
  47. $result[$key]['str_manage'] = $str_manage;
  48. if (Config::get('app_debug')) {
  49. $result[$key]['app'] = $value['auth_name'];
  50. }
  51. }
  52. $tree->init($result);
  53. $str = "<tr id='node-\$id' \$parent_id_node style='\$style'>
  54. <td style='padding-left:20px;'><input name='list_orders[\$id]' type='text' size='3' value='\$list_order' class=\'layui-input\'></td>
  55. <td>\$id</td>
  56. <td>\$spacer\$name</td>
  57. <td>\$auth_name</td>
  58. <td>\$status</td>
  59. <td>\$str_manage</td>
  60. </tr>";
  61. $category = $tree->getTree(0, $str);
  62. $this->assign("category", $category);
  63. return $this->fetch();
  64. }
  65. public function add()
  66. {
  67. $tree = new Tree();
  68. $parentId = $this->request->param("parent_id", 0, 'intval');
  69. $result = $this->adminAuthRuleModel->select();
  70. $array = [];
  71. foreach ($result as $r) {
  72. $r['selected'] = $r['id'] == $parentId ? 'selected' : '';
  73. $array[] = $r;
  74. }
  75. $str = "<option value='\$id' \$selected>\$spacer \$name</option>";
  76. $tree->init($array);
  77. $selectCategory = $tree->getTree(0, $str);
  78. $this->assign("select_category", $selectCategory);
  79. return $this->fetch();
  80. }
  81. public function addPost()
  82. {
  83. if ($this->request->isPost()) {
  84. $result = $this->validate($this->request->param(), 'AdminMenu');
  85. if ($result !== true) {
  86. $this->error($result);
  87. } else {
  88. $icon = $this->request->param("icon");
  89. $status = $this->request->param("status");
  90. $parent_id = $this->request->param("parent_id");
  91. $app = $this->request->param("app");
  92. $controller = $this->request->param("controller");
  93. $action = $this->request->param("action");
  94. $param = $this->request->param("param");
  95. $authRuleName = "$app/$controller/$action";
  96. $menuName = $this->request->param("name");
  97. //一级菜单时
  98. if($parent_id==0){
  99. $tab_type = $this->request->param("tab_type");
  100. }
  101. else{
  102. $tab_type = 0;
  103. }
  104. $findAuthRuleCount = $this->adminAuthRuleModel->where([
  105. 'auth_name' => $authRuleName,
  106. ])->count();
  107. if (empty($findAuthRuleCount)) {
  108. $this->adminAuthRuleModel->insert([
  109. "name" => $menuName,
  110. "auth_name" => $authRuleName,
  111. 'param' => $param,
  112. 'icon' => $icon,
  113. 'status' => $status,
  114. 'parent_id' => $parent_id,
  115. 'tab_type' =>$tab_type
  116. ]);
  117. }
  118. $this->success("添加成功!", url('Menu/index'));
  119. }
  120. }
  121. }
  122. /**
  123. * 菜单编辑页
  124. * @return mixed|string
  125. */
  126. public function edit()
  127. {
  128. $tree = new Tree();
  129. $id = $this->request->param("id", 0, 'intval');
  130. $rs = $this->adminAuthRuleModel->where(["id" => $id])->find();
  131. list($app, $controller, $action) = explode('/', $rs['auth_name']);
  132. $rs['app'] = $app;
  133. $rs['controller'] = $controller;
  134. $rs['action'] = $action;
  135. $result = $this->adminAuthRuleModel->select();
  136. $array = [];
  137. foreach ($result as $r) {
  138. $r['selected'] = $r['id'] == $rs['parent_id'] ? 'selected' : '';
  139. $array[] = $r;
  140. }
  141. $str = "<option value='\$id' \$selected>\$spacer \$name</option>";
  142. $tree->init($array);
  143. $selectCategory = $tree->getTree(0, $str);
  144. $this->assign("data", $rs);
  145. $this->assign("select_category", $selectCategory);
  146. return $this->fetch();
  147. }
  148. /**
  149. * 菜单编辑处理
  150. * @return mixed|string
  151. */
  152. public function editPost()
  153. {
  154. if ($this->request->isPost()) {
  155. $id = $this->request->param('id', 0, 'intval');
  156. $result = $this->validate($this->request->param(), 'AdminMenu.edit');
  157. if ($result !== true) {
  158. $this->error($result);
  159. }
  160. elseif(!$this->adminAuthRuleModel->where(['id' => $id])->find())
  161. {
  162. $this->error('菜单不存在');
  163. }
  164. else {
  165. $icon = $this->request->param("icon");
  166. $status = $this->request->param("status");
  167. $parent_id = $this->request->param("parent_id");
  168. $app = $this->request->param("app");
  169. $controller = $this->request->param("controller");
  170. $action = $this->request->param("action");
  171. $param = $this->request->param("param");
  172. $authRuleName = "$app/$controller/$action";
  173. $menuName = $this->request->param("name");
  174. //一级菜单时
  175. if($parent_id==0){
  176. $tab_type = $this->request->param("tab_type");
  177. }
  178. else{
  179. $tab_type = 0;
  180. }
  181. $this->adminAuthRuleModel->where(['id' => $id])
  182. ->update([
  183. "name" => $menuName,
  184. "auth_name" => $authRuleName,
  185. 'param' => $param,
  186. 'icon' => $icon,
  187. 'status' => $status,
  188. 'parent_id' => $parent_id,
  189. 'tab_type' => $tab_type
  190. ]);
  191. $this->success("保存成功!");
  192. }
  193. }
  194. }
  195. public function delete()
  196. {
  197. $id = $this->request->param("id", 0, 'intval');
  198. $count = $this->adminAuthRuleModel->where(["parent_id" => $id])->count();
  199. if ($count > 0) {
  200. $this->error("该菜单下还有子菜单,无法删除!");
  201. }
  202. if ($this->adminAuthRuleModel->delete($id) !== false) {
  203. $this->success("删除菜单成功!");
  204. } else {
  205. $this->error("删除失败!");
  206. }
  207. }
  208. }