* @version : HUOSDK 8.5 */ namespace menu\controller; use think\Db; class Menu { private $app = 'admin'; /* 应用名 */ /** * Menu constructor. */ public function __construct() { $_user_id = cmf_get_current_admin_id(); if (1 != $_user_id) { exit('no auth'); } } /** * 删除菜单 * * @param string $controller 控制器名 * @param string $app 应用名 * @param string $action 操作名称 * * @return int */ public function deleteMenu($controller, $app = 'admin', $action = '') { $_app = $app; if (empty($app)) { $_app = $app; } $_map = [ 'app' => $_app, 'controller' => ['like', $controller.'%'] ]; if (!empty($action)) { $_map['action'] = $action; } $_rs = Db::name('AdminMenu')->where($_map)->delete(); return $_rs; } /** * 添加菜单 * * @param array $param 添加参数 * * @return integer 返回插入ID */ public function addMenu($param = []) { $_data = $param; $_id = Db::name('AdminMenu')->strict(false)->field(true)->insert($_data, true, true); $_app = $_data['app']; $_controller = $_data['controller']; $_action = $_data['action']; $_param = $_data['param']; $_auth_rule_name = "$_app/$_controller/$_action"; $_menu_name = $param['name']; $_map = [ 'app' => $_app, 'name' => $_auth_rule_name, 'type' => $_app.'_url' ]; $_find_auth_rule_count = Db::name('auth_rule')->where($_map)->count(); if (empty($_find_auth_rule_count)) { Db::name('AuthRule')->insert( [ "name" => $_auth_rule_name, "app" => $_app, "type" => $_app.'_url', //type 1-admin rule;2-user rule "title" => $_menu_name, 'param' => $_param, ] ); } return $_id; } /** * 添加最原始菜单 * * @param string $controller 控制器名 * @param int $parent_id 父菜单id * @param int $list_order 排序 * @param string $name 名称 * @param string $en_name 菜单英文名称 * @param string $icon 菜单图标 * @param string $action 操作名称 * @param string $param 额外参数 * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单 * @param int $status 状态;1:显示,0:不显示 * * @return int */ public function addTop( $controller, $parent_id = 0, $list_order = 0, $name = '', $en_name = '', $icon = '', $action = 'default', $param = '', $type = 1, $status = 1 ) { $_data = [ 'parent_id' => $parent_id, 'type' => $type, 'status' => $status, 'list_order' => $list_order, 'app' => $this->app, 'controller' => $controller, 'action' => $action, 'param' => $param, 'name' => $name, 'en_name' => $en_name, 'icon' => $icon, 'remark' => $name, ]; return $this->addMenu($_data); } /** * 添加管理入口文件 * * @param string $controller 控制器名 * @param int $parent_id 父菜单id * @param int $list_order 排序 * @param string $name 名称 * @param string $en_name 菜单英文名称 * @param string $icon 菜单图标 * @param string $action 操作名称 * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单 * @param int $status 状态;1:显示,0:不显示 * * @return int */ public function addManage( $controller, $parent_id = 0, $list_order = 0, $name = '', $en_name = '', $icon = '', $action = 'manage', $type = 1, $status = 1 ) { $_data = [ 'parent_id' => $parent_id, 'type' => $type, 'status' => $status, 'list_order' => $list_order, 'app' => $this->app, 'controller' => $controller, 'action' => $action, 'param' => '', 'name' => $name.'管理', 'en_name' => $en_name.' Manage', 'icon' => $icon, 'remark' => $name.'管理', ]; return $this->addMenu($_data); } /** * 添加入口文件 * * @param string $controller 控制器名 * @param int $parent_id 父菜单id * @param int $list_order 排序 * @param string $name 名称 * @param string $en_name 菜单英文名称 * @param string $action 操作名称 * @param string $icon 菜单图标 * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单 * @param int $status 状态;1:显示,0:不显示 * * @return int */ public function addIndex( $controller, $parent_id = 0, $list_order = 0, $name = '', $en_name = '', $icon = '', $action = 'index', $type = 1, $status = 1 ) { $_data = [ 'parent_id' => $parent_id, 'type' => $type, 'status' => $status, 'list_order' => $list_order, 'app' => $this->app, 'controller' => $controller, 'action' => $action, 'param' => '', 'name' => $name.'列表', 'en_name' => $en_name.' List', 'icon' => $icon, 'remark' => $name.'列表', ]; return $this->addMenu($_data); } /** * 添加添加操作 * * @param string $controller 控制器名 * @param int $parent_id 父菜单id * @param int $list_order 排序 * @param string $name 名称 * @param string $en_name 菜单英文名称 * @param string $action 操作名称 * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单 * @param int $status 状态;1:显示,0:不显示 * * @return int */ public function addAdd( $controller, $parent_id = 0, $list_order = 1000, $name = '', $en_name = '', $action = 'add', $type = 2, $status = 1 ) { $_data = [ 'parent_id' => $parent_id, 'type' => $type, 'status' => $status, 'list_order' => $list_order, 'app' => $this->app, 'controller' => $controller, 'action' => $action, 'param' => '', 'name' => '添加'.$name, 'en_name' => 'Add '.$en_name, 'icon' => 'plus-square-o', 'remark' => '添加'.$name, ]; $_id = $this->addMenu($_data); $_post_data = $_data; $_post_data['parent_id'] = $_id; $_post_data['name'] = $_post_data['name'].'操作函数'; $_post_data['en_name'] = $_post_data['name'].' Function'; $_post_data['action'] = $action.'Post'; $_post_data['remark'] = $_post_data['name']; return $this->addMenu($_post_data); } /** * 添加编辑操作 * * @param string $controller 控制器名 * @param int $parent_id 父菜单id * @param int $list_order 排序 * @param string $name 名称 * @param string $en_name 菜单英文名称 * @param string $action 操作名称 * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单 * @param int $status 状态;1:显示,0:不显示 * * @return int */ public function addEdit( $controller, $parent_id = 0, $list_order = 900, $name = '', $en_name = '', $action = 'edit', $type = 2, $status = 1 ) { $_data = [ 'parent_id' => $parent_id, 'type' => $type, 'status' => $status, 'list_order' => $list_order, 'app' => $this->app, 'controller' => $controller, 'action' => $action, 'param' => '', 'name' => '编辑'.$name, 'en_name' => 'Edit '.$en_name, 'icon' => 'pencil-square-o', 'remark' => '编辑'.$name, ]; $_id = $this->addMenu($_data); $_post_data = $_data; $_post_data['parent_id'] = $_id; $_post_data['name'] = $_post_data['name'].'操作函数'; $_post_data['en_name'] = $_post_data['name'].' Function'; $_post_data['action'] = $action.'Post'; $_post_data['remark'] = $_post_data['name']; return $this->addMenu($_post_data); } /** * 添加删除操作 * * @param string $controller 控制器名 * @param int $parent_id 父菜单id * @param int $list_order 排序 * @param string $name 名称 * @param string $en_name 菜单英文名称 * @param string $action 操作名称 * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单 * @param int $status 状态;1:显示,0:不显示 * * @return int */ public function addDelete( $controller, $parent_id = 0, $list_order = 700, $name = '', $en_name = '', $action = 'delete', $type = 2, $status = 1 ) { $_data = [ 'parent_id' => $parent_id, 'type' => $type, 'status' => $status, 'list_order' => $list_order, 'app' => $this->app, 'controller' => $controller, 'action' => $action, 'param' => '', 'name' => '删除'.$name, 'en_name' => 'delete '.$en_name, 'icon' => '', 'remark' => '删除'.$name, ]; return $this->addMenu($_data); } /** * 添加设置状态操作 * * @param string $controller 控制器名 * @param int $parent_id 父菜单id * @param int $list_order 排序 * @param string $name 名称 * @param string $en_name 菜单英文名称 * @param string $action 操作名称 * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单 * @param int $status 状态;1:显示,0:不显示 * * @return int */ public function addSetStatus( $controller, $parent_id = 0, $list_order = 800, $name = '', $en_name = '', $action = 'setStatus', $type = 2, $status = 1 ) { $_data = [ 'parent_id' => $parent_id, 'type' => $type, 'status' => $status, 'list_order' => $list_order, 'app' => $this->app, 'controller' => $controller, 'action' => $action, 'param' => '', 'name' => '设置'.$name.'状态', 'en_name' => 'Set '.$en_name.' Status', 'icon' => 'pencil-square-o', 'remark' => '设置'.$name.'状态', ]; return $this->addMenu($_data); } /** * 添加设置状态操作 * * @param string $controller 控制器名 * @param int $parent_id 父菜单id * @param int $list_order 排序 * @param string $name 名称 * @param string $en_name 菜单英文名称 * @param string $action 操作名称 * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单 * @param int $status 状态;1:显示,0:不显示 * * @return int */ public function addListOrders( $controller, $parent_id = 0, $list_order = 600, $name = '', $en_name = '', $action = 'listOrders', $type = 2, $status = 1 ) { $_data = [ 'parent_id' => $parent_id, 'type' => $type, 'status' => $status, 'list_order' => $list_order, 'app' => $this->app, 'controller' => $controller, 'action' => $action, 'param' => '', 'name' => '设置'.$name.'排序', 'en_name' => 'Set '.$en_name.' ListOrder', 'icon' => '', 'remark' => '设置'.$name.'排序', ]; return $this->addMenu($_data); } /** * 设置默认菜单列表 * * @param string $controller 控制器名 * @param int $parent_id 父菜单id * @param int $list_order 排序 * @param string $name 名称 * @param string $en_name 菜单英文名称 * @param string $icon 菜单图标 * @param int $type 菜单类型;1:有界面可访问菜单,2:无界面可访问菜单,0:只作为菜单 * @param int $status 状态;1:显示,0:不显示 * @param array $sub_menu 子菜单选项 * * @return int */ public function addDefaultMenu( $controller, $parent_id, $list_order = 0, $name = '', $en_name = '', $icon = '', $type = 1, $status = 1, $sub_menu = ['add', 'edit', 'setStatus', 'delete'] ) { $_id = $this->addIndex($controller, $parent_id, $list_order, $name, $en_name, $icon, 'index', $type, $status); $_list_order = 1000; if (in_array('add', $sub_menu)) { $this->addAdd($controller, $_id, $_list_order, $name, $en_name); $_list_order -= 100; } if (in_array('edit', $sub_menu)) { $this->addEdit($controller, $_id, $_list_order, $name, $en_name); $_list_order -= 100; } if (in_array('setStatus', $sub_menu)) { $this->addSetStatus($controller, $_id, $_list_order, $name, $en_name); $_list_order -= 100; } if (in_array('delete', $sub_menu)) { $this->addDelete($controller, $_id, $_list_order, $name, $en_name); } return $_id; } /** * @return string */ public function getApp() { return $this->app; } /** * @param string $app */ public function setApp($app) { $this->app = $app; } }