MenuApi.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. <?php
  2. namespace app\common\api;
  3. use app\admin\model\Role;
  4. use app\admin\model\SysRelation;
  5. use app\admin\model\Menu;
  6. use app\common\state\CommonConst;
  7. /**
  8. * Description of MenuApi
  9. *
  10. * @author sgq
  11. */
  12. class MenuApi {
  13. public static function getOne($id) {
  14. $where = [];
  15. $where[] = ["t1.id", "=", $id];
  16. $where[] = ["t1.delete", "=", 0];
  17. $menu = Menu::alias("t1")->leftJoin("sys_menu t2", "t1.pcode=t2.code")->field("t1.*,if(t2.code is null,'顶级',t2.name) as pcodeName,t2.id as pid")->where($where)->findOrEmpty();
  18. return $menu;
  19. }
  20. public static function getOneByCode($code) {
  21. $where = [];
  22. $where[] = ["code", "=", $code];
  23. $where[] = ["delete", "=", 0];
  24. $menu = Menu::where($where)->findOrEmpty();
  25. return $menu;
  26. }
  27. public static function getList($params = []) {
  28. $where = [];
  29. $where[] = ["delete", "=", 0];
  30. if ($params["menuName"]) {
  31. $where[] = ["name", "like", "%" . $params["menuName"] . "%"];
  32. }
  33. if ($params["level"]) {
  34. $where[] = ["levels", "=", $params["level"]];
  35. }
  36. $list = Menu::where($where)->order("num asc")->select()->toArray();
  37. return $list;
  38. }
  39. public static function getMenuIdsByNewUrls(array $urls) {
  40. $where = [];
  41. $where[] = ["new_url", "in", $urls];
  42. $where[] = ["status", "=", 1];
  43. $where[] = ["delete", "=", 0];
  44. return Menu::where($where)->column("id");
  45. }
  46. public static function getMenuIdsByCodes(array $codes) {
  47. $where = [];
  48. $where[] = ["code", "in", $codes];
  49. $where[] = ["status", "=", 1];
  50. $where[] = ["delete", "=", 0];
  51. return Menu::where($where)->column("id");
  52. }
  53. public static function save($params) {
  54. $data["name"] = $params["name"];
  55. $data["new_url"] = $params["url"];
  56. $data["code"] = $params["code"];
  57. $data["num"] = $params["num"];
  58. $data["icon"] = $params["icon"];
  59. $data["ismenu"] = $params["ismenu"];
  60. $data["status"] = $params["status"] ?: 1;
  61. $tmp = [];
  62. $parent = self::getOne($params["pcode"]);
  63. $data["pcode"] = $parent["code"] ?: 0;
  64. $_pcodes = array_filter(explode(",", $parent["pcodes"]));
  65. $_pcodes[] = "[" . $data["pcode"] . "]";
  66. $data["pcodes"] = implode(",", $_pcodes);
  67. $data["levels"] = count($_pcodes);
  68. if ($params["id"]) {
  69. $data["id"] = $params["id"];
  70. return Menu::update($data);
  71. }
  72. return Menu::insert($data);
  73. }
  74. public static function delete($id) {
  75. $data["id"] = $id;
  76. $data["delete"] = 1;
  77. return Menu::update($data);
  78. }
  79. public static function getAllMenus($fields = "*") {
  80. $where[] = ["status", "=", 1];
  81. $where[] = ["delete", "=", 0];
  82. $menus = Menu::where($where)->field($fields)->order("levels asc,num asc")->select()->toArray();
  83. $menus = self::buildMenu($menus);
  84. return $menus;
  85. }
  86. public static function getMenuListByRoleid($roleid) {
  87. $roleids = explode(",", $roleid);
  88. $tmpArray = [];
  89. foreach ($roleids as $roleid) {
  90. $role = Role::find($roleid);
  91. $menu_ids = $role->sysRelation->column("menuid");
  92. $tmpArray = array_merge((array) $tmpArray, (array) $menu_ids);
  93. }
  94. $tmp = [];
  95. if ($tmpArray) {
  96. $where[] = ["status", "=", 1];
  97. $where[] = ["delete", "=", 0];
  98. $where[] = ["ismenu", "=", 1];
  99. $where[] = ["new_url", "<>", ""];
  100. $where[] = ["id", "in", $tmpArray];
  101. $whr[] = ["levels", "=", 1];
  102. $menus = Menu::whereOr([$where, $whr])->order("levels asc,num asc")->select()->toArray();
  103. $menus = self::buildMenu($menus);
  104. for ($i = 0; $i < count($menus); $i++) {
  105. $menu_items_count = count($menus[$i]["children"]);
  106. $empty_url_count = 0;
  107. for ($n = 0; $n < $menu_items_count; $n++) {
  108. if ($menus[$i]["children"][$n]["new_url"] == null)
  109. $empty_url_count++;
  110. }
  111. if ($empty_url_count != $menu_items_count)
  112. $tmp[] = $menus[$i];
  113. }
  114. }
  115. return $tmp;
  116. }
  117. public static function getCodesByRoleId($roleid) {
  118. $roleids = explode(",", $roleid);
  119. $tmpArray = [];
  120. foreach ($roleids as $roleid) {
  121. $role = Role::find($roleid);
  122. $menu_ids = $role->sysRelation->column("menuid");
  123. $tmpArray = array_merge((array) $tmpArray, (array) $menu_ids);
  124. }
  125. $codes = [];
  126. if ($tmpArray) {
  127. $where[] = ["status", "=", 1];
  128. $where[] = ["delete", "=", 0];
  129. $where[] = ["id", "in", array_unique($tmpArray)];
  130. $codes = Menu::where($where)->column("code");
  131. }
  132. return $codes;
  133. }
  134. public static function getPrivilagesByRoleid($roleid) {
  135. $role = Role::find($roleid);
  136. $menu_ids = $role->sysRelation->column("menuid");
  137. $where[] = ["status", '=', 1];
  138. $where[] = ["delete", '=', 0];
  139. $menus = Menu::where($where)->order("levels asc,num asc")->select()->toArray();
  140. $codeToPid = [];
  141. foreach ($menus as &$menu) {
  142. $codeToPid[$menu["code"]] = $menu["id"];
  143. $menu["checked"] = in_array($menu["id"], $menu_ids) ? true : false;
  144. $menu["pid"] = isset($codeToPid[$menu["pcode"]]) ? $codeToPid[$menu["pcode"]] : 0;
  145. }unset($menu);
  146. return $menus;
  147. }
  148. /**
  149. * 递归获取多级菜单集合
  150. * @param type $menus
  151. * @param type $pcode
  152. * @return type
  153. */
  154. private static function buildMenu($menus, $pcode = "0") {
  155. $result = [];
  156. foreach ($menus as $key => $menu) {
  157. if ($pcode == $menu["pcode"]) {
  158. unset($menus[$key]);
  159. $menu["children"] = self::buildMenu($menus, $menu["code"]);
  160. if ($menu["pcode"] == 0) {
  161. $result[] = $menu;
  162. }
  163. }
  164. }
  165. return $result;
  166. }
  167. /**
  168. * 权限检查
  169. * @param type $url 新权限url
  170. * @param type $old_url 旧系统权限url
  171. * @return boolean
  172. */
  173. public static function chkPermission($url, $old_url) {
  174. $url = strtolower($url);
  175. $old_url = strtolower($old_url);
  176. $menu = Menu::whereRaw("`status`=1 and (new_url=:new_url or `url`=:url)", ["new_url" => $url, "url" => $old_url])->findOrEmpty()->toArray();
  177. if (!$menu)
  178. return true;
  179. $menuid = $menu["id"];
  180. $roleids = explode(",", session("user")["roleid"]);
  181. $tmpArray = [];
  182. foreach ($roleids as $roleid) {
  183. $role = Role::find($roleid);
  184. $menu_ids = $role->sysRelation->column("menuid");
  185. $tmpArray = array_merge((array) $tmpArray, (array) $menu_ids);
  186. }
  187. return in_array($menuid, $tmpArray);
  188. }
  189. public static function getEnterpriseMenuByType($ep) {
  190. $menus = [];
  191. $typeName = "";
  192. if ($ep["type"] != CommonConst::ENTERPRISE_WJ || $ep["type"] != CommonConst::ENTERPRISE_GJ) {
  193. $typeName = "机构";
  194. }
  195. $menus[] = ["type" => [1, 2, 3, 5, 6], "code" => "qyzx", "pcode" => "0", "name" => $typeName . "用户中心", "url" => "/enterprise/index/centerPage", "icon" => "fa-user", "status" => 1];
  196. if ($ep["type"] == \app\common\state\CommonConst::ENTERPRISE_WJ && $ep["isGeneral"] == 1) {
  197. //总院增加菜单,审核分院
  198. $menus[] = ["type" => [5], "code" => "yyss", "pcode" => "0", "name" => "医院审核", "url" => "#", "icon" => "fa-pencil-square-o", "status" => 1];
  199. $menus[] = ["type" => [5], "code" => "yyyhss", "pcode" => "yyss", "name" => "注册审核", "url" => "/enterprise/hospital/list", "icon" => "fa-pencil-square-o", "status" => 1];
  200. }
  201. $menus[] = ["type" => [1, 2, 5, 6], "code" => "yhfk", "pcode" => "0", "name" => "用户反馈", "url" => "", "icon" => "fa-bug", "status" => 1];
  202. $menus[] = ["type" => [1, 2, 5, 6], "code" => "rcrd", "pcode" => "0", "name" => "人才认定", "url" => "#", "icon" => "fa-pencil-square-o", "status" => 1];
  203. //$menus[] = ["type" => [1, 2], "code" => "jctjsb", "pcode" => "rcrd", "name" => "基础条件申报", "url" => "/enterprise/base", "icon" => "fa-thumbs-o-up", "status" => 1];
  204. //$menus[] = ["type" => [1, 2], "code" => "rcrdsb", "pcode" => "rcrd", "name" => "人才认定申报", "url" => "/enterprise/talent", "icon" => "fa-thumbs-up", "status" => 1];
  205. $menus[] = ["type" => [1, 2, 5, 6], "code" => "rcrdsbnew", "pcode" => "rcrd", "name" => "人才认定申报(新)", "url" => "/enterprise/talent/index/isMix/1", "icon" => "fa-thumbs-up", "status" => 1];
  206. //$menus[] = ["type" => [1, 2], "code" => "rczrzlbc", "pcode" => "rcrd", "name" => "人才直认资料补充", "url" => "/enterprise/talent/zrIndex", "icon" => "fa-thumbs-up", "status" => 1];
  207. $menus[] = ["type" => [1, 2, 5, 6], "code" => "yxrck", "pcode" => "rcrd", "name" => "优秀人才库", "url" => "/enterprise/talent_library/index", "icon" => "fa-thumbs-up", "status" => 1];
  208. $menus[] = ["type" => [2], "code" => "jfsb", "pcode" => "rcrd", "name" => "积分申报", "url" => "/enterprise/integral/index", "icon" => "fa-credit-card", "status" => 1];
  209. $menus[] = ["type" => [1, 2, 5, 6], "code" => "yxrck", "pcode" => "rcrd", "name" => "优秀人才库", "url" => "", "icon" => "fa-thumbs-up", "status" => 1];
  210. $menus[] = ["type" => [1, 2, 5, 6], "code" => "lzsb", "pcode" => "rcrd", "name" => "离职申报", "url" => "", "icon" => "fa-thumbs-up", "status" => 1];
  211. $menus[] = ["type" => [1, 2, 5, 6], "code" => "gzdwbg", "pcode" => "rcrd", "name" => "工作单位变更", "url" => "", "icon" => "fa-thumbs-up", "status" => 1];
  212. $menus[] = ["type" => [1, 2, 5, 6], "code" => "yhzhbg", "pcode" => "rcrd", "name" => "银行账号变更", "url" => "", "icon" => "fa-thumbs-up", "status" => 1];
  213. $menus[] = ["type" => [1, 2, 5, 6], "code" => "rcccbg", "pcode" => "rcrd", "name" => "人才层次变更", "url" => "", "icon" => "fa-thumbs-up", "status" => 1];
  214. $menus[] = ["type" => [1, 2, 5, 6], "code" => "jcxxbg", "pcode" => "rcrd", "name" => "基础信息变更", "url" => "", "icon" => "fa-thumbs-up", "status" => 1];
  215. $menus[] = ["type" => [1, 2, 5, 6], "code" => "jbtmanage", "pcode" => "0", "name" => "津补贴申报", "url" => "", "icon" => "fa-money", "status" => 0];
  216. $menus[] = ["type" => [1, 2, 5, 6], "code" => "jbtsb", "pcode" => "jbtmanage", "name" => "津补贴申报", "url" => "", "icon" => "fa-thumbs-up", "status" => 1];
  217. $menus[] = ["type" => [1, 2, 5, 6], "code" => "gfbt", "pcode" => "0", "name" => "购房补贴", "url" => "", "icon" => "fa-university", "status" => 0];
  218. $menus[] = ["type" => [1, 2, 5, 6], "code" => "gfbtsb", "pcode" => "gfbt", "name" => "购房补贴申报", "url" => "", "icon" => "fa-thumbs-up", "status" => 1];
  219. $menus[] = ["type" => [2], "code" => "pxbtmanage", "pcode" => "0", "name" => "培训补贴", "url" => "", "icon" => "fa-building", "status" => 1];
  220. $menus[] = ["type" => [2], "code" => "pxbt", "pcode" => "pxbtmanage", "name" => "培训补贴", "url" => "", "icon" => "fa-thumbs-up", "status" => 1];
  221. $menus[] = ["type" => [2], "code" => "zdzxmanage", "pcode" => "0", "name" => "重大专项", "url" => "", "icon" => "fa-life-ring", "status" => 1];
  222. $menus[] = ["type" => [2], "code" => "zdzx", "pcode" => "zdzxmanage", "name" => "重大专项", "url" => "", "icon" => "fa-thumbs-up", "status" => 1];
  223. $menus[] = ["type" => [2], "code" => "znjy", "pcode" => "0", "name" => "子女教育", "url" => "", "icon" => "fa-graduation-cap", "status" => 1];
  224. $menus[] = ["type" => [2], "code" => "xzfbz", "pcode" => "znjy", "name" => "学杂费补助", "url" => "", "icon" => "fa-thumbs-up", "status" => 1];
  225. $menus[] = ["type" => [2], "code" => "ylbzmanage", "pcode" => "0", "name" => "医疗补助", "url" => "", "icon" => "fa-hospital-o", "status" => 1];
  226. $menus[] = ["type" => [2], "code" => "ylbz", "pcode" => "ylbzmanage", "name" => "医疗补助", "url" => "", "icon" => "fa-thumbs-up", "status" => 1];
  227. $menus[] = ["type" => [2], "code" => "zfbz", "pcode" => "0", "name" => "住房保障", "url" => "", "icon" => "fa-home", "status" => 1];
  228. $menus[] = ["type" => [2], "code" => "zfsq", "pcode" => "zfbz", "name" => "租房申请", "url" => "", "icon" => "fa-home", "status" => 1];
  229. $menus[] = ["type" => [2], "code" => "fzbz", "pcode" => "zfbz", "name" => "房租补助", "url" => "", "icon" => "fa-money", "status" => 1];
  230. $menus[] = ["type" => [2], "code" => "gfsq", "pcode" => "zfbz", "name" => "购房申请", "url" => "", "icon" => "fa-envira", "status" => 1];
  231. $menus[] = ["type" => [2], "code" => "gfbz", "pcode" => "zfbz", "name" => "购房补助", "url" => "", "icon" => "fa-envira", "status" => 1];
  232. $menus[] = ["type" => [1], "code" => "sbrc", "pcode" => "0", "name" => "硕博人才", "url" => "", "icon" => "fa-graduation-cap", "status" => 1];
  233. $menus[] = ["type" => [1], "code" => "shbt", "pcode" => "sbrc", "name" => "生活补贴", "url" => "/enterprise/living_allowance", "icon" => "fa-graduation-cap", "status" => 1];
  234. $menus[] = ["type" => [3], "code" => "hxjh", "pcode" => "0", "name" => "海峡计划", "url" => "", "icon" => "fa-plane", "status" => 1];
  235. $menus[] = ["type" => [3], "code" => "hxjhsb", "pcode" => "hxjh", "name" => "海峡计划申报", "url" => "", "icon" => "fa-pencil", "status" => 1];
  236. foreach ($menus as $key => $menu) {
  237. if (!in_array($ep["type"], $menu["type"]) || (($menu["pcode"]) != "0" && $menu["url"] == "") || $menu["status"] == 0)
  238. unset($menus[$key]);
  239. }
  240. $menus = self::buildMenu($menus);
  241. for ($i = 0; $i < count($menus); $i++) {
  242. $menu_items_count = count($menus[$i]["children"]);
  243. if ($menu_items_count > 0 || ($menu_items_count == 0 && $menus[$i]["url"] != ""))
  244. $tmp[] = $menus[$i];
  245. }
  246. return $tmp;
  247. }
  248. public static function getPersonMenuList($type) {
  249. $menus = [];
  250. $menus[] = ["type" => [1], "code" => "grzx", "pcode" => "0", "name" => "个人中心", "url" => "/person/index/center_page", "icon" => "fa-user", "status" => 1];
  251. $menus[] = ["type" => [1], "code" => "znjx", "pcode" => "0", "name" => "子女就学", "url" => "#", "icon" => "fa-graduation-cap", "status" => 1];
  252. $menus[] = ["type" => [1], "code" => "znzx", "pcode" => "znjx", "name" => "子女择校", "url" => "/person/education/index", "icon" => "fa-thumbs-up", "status" => 1];
  253. foreach ($menus as $key => $menu) {
  254. if (!in_array($type, $menu["type"]) || ($menu["pcode"]) != "0" && $menu["url"] == "" || $menu["status"] == 0)
  255. unset($menus[$key]);
  256. }
  257. $menus = self::buildMenu($menus);
  258. for ($i = 0; $i < count($menus); $i++) {
  259. $menu_items_count = count($menus[$i]["children"]);
  260. if ($menu_items_count > 0 || ($menu_items_count == 0 && $menus[$i]["url"] != ""))
  261. $tmp[] = $menus[$i];
  262. }
  263. return $tmp;
  264. }
  265. }