Menu.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456
  1. <?php
  2. /**
  3. * Menu.php UTF-8
  4. * 菜单控制
  5. *
  6. * @date : 2019/5/17 21:18
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.5
  11. */
  12. namespace menu\controller;
  13. use think\Db;
  14. class Menu {
  15. private $app = 'admin'; /* 应用名 */
  16. /**
  17. * Menu constructor.
  18. */
  19. public function __construct() {
  20. $_user_id = cmf_get_current_admin_id();
  21. if (1 != $_user_id) {
  22. exit('no auth');
  23. }
  24. }
  25. /**
  26. * 删除菜单
  27. *
  28. * @param string $controller 控制器名
  29. * @param string $app 应用名
  30. * @param string $action 操作名称
  31. *
  32. * @return int
  33. */
  34. public function deleteMenu($controller, $app = 'admin', $action = '') {
  35. $_app = $app;
  36. if (empty($app)) {
  37. $_app = $app;
  38. }
  39. $_map = [
  40. 'app' => $_app,
  41. 'controller' => ['like', $controller.'%']
  42. ];
  43. if (!empty($action)) {
  44. $_map['action'] = $action;
  45. }
  46. $_rs = Db::name('AdminMenu')->where($_map)->delete();
  47. return $_rs;
  48. }
  49. /**
  50. * 添加菜单
  51. *
  52. * @param array $param 添加参数
  53. *
  54. * @return integer 返回插入ID
  55. */
  56. public function addMenu($param = []) {
  57. $_data = $param;
  58. $_id = Db::name('AdminMenu')->strict(false)->field(true)->insert($_data, true, true);
  59. $_app = $_data['app'];
  60. $_controller = $_data['controller'];
  61. $_action = $_data['action'];
  62. $_param = $_data['param'];
  63. $_auth_rule_name = "$_app/$_controller/$_action";
  64. $_menu_name = $param['name'];
  65. $_map = [
  66. 'app' => $_app,
  67. 'name' => $_auth_rule_name,
  68. 'type' => $_app.'_url'
  69. ];
  70. $_find_auth_rule_count = Db::name('auth_rule')->where($_map)->count();
  71. if (empty($_find_auth_rule_count)) {
  72. Db::name('AuthRule')->insert(
  73. [
  74. "name" => $_auth_rule_name,
  75. "app" => $_app,
  76. "type" => $_app.'_url', //type 1-admin rule;2-user rule
  77. "title" => $_menu_name,
  78. 'param' => $_param,
  79. ]
  80. );
  81. }
  82. return $_id;
  83. }
  84. /**
  85. * 添加最原始菜单
  86. *
  87. * @param string $controller 控制器名
  88. * @param int $parent_id 父菜单id
  89. * @param int $list_order 排序
  90. * @param string $name 名称
  91. * @param string $en_name 菜单英文名称
  92. * @param string $icon 菜单图标
  93. * @param string $action 操作名称
  94. * @param string $param 额外参数
  95. * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单
  96. * @param int $status 状态;1:显示,0:不显示
  97. *
  98. * @return int
  99. */
  100. public function addTop(
  101. $controller, $parent_id = 0, $list_order = 0, $name = '', $en_name = '', $icon = '', $action = 'default',
  102. $param = '',
  103. $type = 1,
  104. $status = 1
  105. ) {
  106. $_data = [
  107. 'parent_id' => $parent_id,
  108. 'type' => $type,
  109. 'status' => $status,
  110. 'list_order' => $list_order,
  111. 'app' => $this->app,
  112. 'controller' => $controller,
  113. 'action' => $action,
  114. 'param' => $param,
  115. 'name' => $name,
  116. 'en_name' => $en_name,
  117. 'icon' => $icon,
  118. 'remark' => $name,
  119. ];
  120. return $this->addMenu($_data);
  121. }
  122. /**
  123. * 添加管理入口文件
  124. *
  125. * @param string $controller 控制器名
  126. * @param int $parent_id 父菜单id
  127. * @param int $list_order 排序
  128. * @param string $name 名称
  129. * @param string $en_name 菜单英文名称
  130. * @param string $icon 菜单图标
  131. * @param string $action 操作名称
  132. * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单
  133. * @param int $status 状态;1:显示,0:不显示
  134. *
  135. * @return int
  136. */
  137. public function addManage(
  138. $controller, $parent_id = 0, $list_order = 0, $name = '', $en_name = '', $icon = '', $action = 'manage',
  139. $type = 1,
  140. $status = 1
  141. ) {
  142. $_data = [
  143. 'parent_id' => $parent_id,
  144. 'type' => $type,
  145. 'status' => $status,
  146. 'list_order' => $list_order,
  147. 'app' => $this->app,
  148. 'controller' => $controller,
  149. 'action' => $action,
  150. 'param' => '',
  151. 'name' => $name.'管理',
  152. 'en_name' => $en_name.' Manage',
  153. 'icon' => $icon,
  154. 'remark' => $name.'管理',
  155. ];
  156. return $this->addMenu($_data);
  157. }
  158. /**
  159. * 添加入口文件
  160. *
  161. * @param string $controller 控制器名
  162. * @param int $parent_id 父菜单id
  163. * @param int $list_order 排序
  164. * @param string $name 名称
  165. * @param string $en_name 菜单英文名称
  166. * @param string $action 操作名称
  167. * @param string $icon 菜单图标
  168. * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单
  169. * @param int $status 状态;1:显示,0:不显示
  170. *
  171. * @return int
  172. */
  173. public function addIndex(
  174. $controller, $parent_id = 0, $list_order = 0, $name = '', $en_name = '', $icon = '', $action = 'index',
  175. $type = 1,
  176. $status = 1
  177. ) {
  178. $_data = [
  179. 'parent_id' => $parent_id,
  180. 'type' => $type,
  181. 'status' => $status,
  182. 'list_order' => $list_order,
  183. 'app' => $this->app,
  184. 'controller' => $controller,
  185. 'action' => $action,
  186. 'param' => '',
  187. 'name' => $name.'列表',
  188. 'en_name' => $en_name.' List',
  189. 'icon' => $icon,
  190. 'remark' => $name.'列表',
  191. ];
  192. return $this->addMenu($_data);
  193. }
  194. /**
  195. * 添加添加操作
  196. *
  197. * @param string $controller 控制器名
  198. * @param int $parent_id 父菜单id
  199. * @param int $list_order 排序
  200. * @param string $name 名称
  201. * @param string $en_name 菜单英文名称
  202. * @param string $action 操作名称
  203. * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单
  204. * @param int $status 状态;1:显示,0:不显示
  205. *
  206. * @return int
  207. */
  208. public function addAdd(
  209. $controller, $parent_id = 0, $list_order = 1000, $name = '', $en_name = '', $action = 'add', $type = 2,
  210. $status = 1
  211. ) {
  212. $_data = [
  213. 'parent_id' => $parent_id,
  214. 'type' => $type,
  215. 'status' => $status,
  216. 'list_order' => $list_order,
  217. 'app' => $this->app,
  218. 'controller' => $controller,
  219. 'action' => $action,
  220. 'param' => '',
  221. 'name' => '添加'.$name,
  222. 'en_name' => 'Add '.$en_name,
  223. 'icon' => 'plus-square-o',
  224. 'remark' => '添加'.$name,
  225. ];
  226. $_id = $this->addMenu($_data);
  227. $_post_data = $_data;
  228. $_post_data['parent_id'] = $_id;
  229. $_post_data['name'] = $_post_data['name'].'操作函数';
  230. $_post_data['en_name'] = $_post_data['name'].' Function';
  231. $_post_data['action'] = $action.'Post';
  232. $_post_data['remark'] = $_post_data['name'];
  233. return $this->addMenu($_post_data);
  234. }
  235. /**
  236. * 添加编辑操作
  237. *
  238. * @param string $controller 控制器名
  239. * @param int $parent_id 父菜单id
  240. * @param int $list_order 排序
  241. * @param string $name 名称
  242. * @param string $en_name 菜单英文名称
  243. * @param string $action 操作名称
  244. * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单
  245. * @param int $status 状态;1:显示,0:不显示
  246. *
  247. * @return int
  248. */
  249. public function addEdit(
  250. $controller, $parent_id = 0, $list_order = 900, $name = '', $en_name = '', $action = 'edit', $type = 2,
  251. $status = 1
  252. ) {
  253. $_data = [
  254. 'parent_id' => $parent_id,
  255. 'type' => $type,
  256. 'status' => $status,
  257. 'list_order' => $list_order,
  258. 'app' => $this->app,
  259. 'controller' => $controller,
  260. 'action' => $action,
  261. 'param' => '',
  262. 'name' => '编辑'.$name,
  263. 'en_name' => 'Edit '.$en_name,
  264. 'icon' => 'pencil-square-o',
  265. 'remark' => '编辑'.$name,
  266. ];
  267. $_id = $this->addMenu($_data);
  268. $_post_data = $_data;
  269. $_post_data['parent_id'] = $_id;
  270. $_post_data['name'] = $_post_data['name'].'操作函数';
  271. $_post_data['en_name'] = $_post_data['name'].' Function';
  272. $_post_data['action'] = $action.'Post';
  273. $_post_data['remark'] = $_post_data['name'];
  274. return $this->addMenu($_post_data);
  275. }
  276. /**
  277. * 添加删除操作
  278. *
  279. * @param string $controller 控制器名
  280. * @param int $parent_id 父菜单id
  281. * @param int $list_order 排序
  282. * @param string $name 名称
  283. * @param string $en_name 菜单英文名称
  284. * @param string $action 操作名称
  285. * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单
  286. * @param int $status 状态;1:显示,0:不显示
  287. *
  288. * @return int
  289. */
  290. public function addDelete(
  291. $controller, $parent_id = 0, $list_order = 700, $name = '', $en_name = '', $action = 'delete', $type = 2,
  292. $status = 1
  293. ) {
  294. $_data = [
  295. 'parent_id' => $parent_id,
  296. 'type' => $type,
  297. 'status' => $status,
  298. 'list_order' => $list_order,
  299. 'app' => $this->app,
  300. 'controller' => $controller,
  301. 'action' => $action,
  302. 'param' => '',
  303. 'name' => '删除'.$name,
  304. 'en_name' => 'delete '.$en_name,
  305. 'icon' => '',
  306. 'remark' => '删除'.$name,
  307. ];
  308. return $this->addMenu($_data);
  309. }
  310. /**
  311. * 添加设置状态操作
  312. *
  313. * @param string $controller 控制器名
  314. * @param int $parent_id 父菜单id
  315. * @param int $list_order 排序
  316. * @param string $name 名称
  317. * @param string $en_name 菜单英文名称
  318. * @param string $action 操作名称
  319. * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单
  320. * @param int $status 状态;1:显示,0:不显示
  321. *
  322. * @return int
  323. */
  324. public function addSetStatus(
  325. $controller, $parent_id = 0, $list_order = 800, $name = '', $en_name = '', $action = 'setStatus', $type = 2,
  326. $status = 1
  327. ) {
  328. $_data = [
  329. 'parent_id' => $parent_id,
  330. 'type' => $type,
  331. 'status' => $status,
  332. 'list_order' => $list_order,
  333. 'app' => $this->app,
  334. 'controller' => $controller,
  335. 'action' => $action,
  336. 'param' => '',
  337. 'name' => '设置'.$name.'状态',
  338. 'en_name' => 'Set '.$en_name.' Status',
  339. 'icon' => 'pencil-square-o',
  340. 'remark' => '设置'.$name.'状态',
  341. ];
  342. return $this->addMenu($_data);
  343. }
  344. /**
  345. * 添加设置状态操作
  346. *
  347. * @param string $controller 控制器名
  348. * @param int $parent_id 父菜单id
  349. * @param int $list_order 排序
  350. * @param string $name 名称
  351. * @param string $en_name 菜单英文名称
  352. * @param string $action 操作名称
  353. * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单
  354. * @param int $status 状态;1:显示,0:不显示
  355. *
  356. * @return int
  357. */
  358. public function addListOrders(
  359. $controller, $parent_id = 0, $list_order = 600, $name = '', $en_name = '', $action = 'listOrders', $type = 2,
  360. $status = 1
  361. ) {
  362. $_data = [
  363. 'parent_id' => $parent_id,
  364. 'type' => $type,
  365. 'status' => $status,
  366. 'list_order' => $list_order,
  367. 'app' => $this->app,
  368. 'controller' => $controller,
  369. 'action' => $action,
  370. 'param' => '',
  371. 'name' => '设置'.$name.'排序',
  372. 'en_name' => 'Set '.$en_name.' ListOrder',
  373. 'icon' => '',
  374. 'remark' => '设置'.$name.'排序',
  375. ];
  376. return $this->addMenu($_data);
  377. }
  378. /**
  379. * 设置默认菜单列表
  380. *
  381. * @param string $controller 控制器名
  382. * @param int $parent_id 父菜单id
  383. * @param int $list_order 排序
  384. * @param string $name 名称
  385. * @param string $en_name 菜单英文名称
  386. * @param string $icon 菜单图标
  387. * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单
  388. * @param int $status 状态;1:显示,0:不显示
  389. * @param array $sub_menu 子菜单选项
  390. *
  391. * @return int
  392. */
  393. public function addDefaultMenu(
  394. $controller, $parent_id, $list_order = 0, $name = '', $en_name = '', $icon = '',
  395. $type = 1,
  396. $status = 1, $sub_menu = ['add', 'edit', 'setStatus', 'delete']
  397. ) {
  398. $_id = $this->addIndex($controller, $parent_id, $list_order, $name, $en_name, $icon, 'index', $type, $status);
  399. $_list_order = 1000;
  400. if (in_array('add', $sub_menu)) {
  401. $this->addAdd($controller, $_id, $_list_order, $name, $en_name);
  402. $_list_order -= 100;
  403. }
  404. if (in_array('edit', $sub_menu)) {
  405. $this->addEdit($controller, $_id, $_list_order, $name, $en_name);
  406. $_list_order -= 100;
  407. }
  408. if (in_array('setStatus', $sub_menu)) {
  409. $this->addSetStatus($controller, $_id, $_list_order, $name, $en_name);
  410. $_list_order -= 100;
  411. }
  412. if (in_array('delete', $sub_menu)) {
  413. $this->addDelete($controller, $_id, $_list_order, $name, $en_name);
  414. }
  415. return $_id;
  416. }
  417. /**
  418. * @return string
  419. */
  420. public function getApp() {
  421. return $this->app;
  422. }
  423. /**
  424. * @param string $app
  425. */
  426. public function setApp($app) {
  427. $this->app = $app;
  428. }
  429. }