[ //合规模式需要隐藏的菜单 'mall/finance/commission-log', ] ]; /** * @param string $addons_name 插件名称 */ public function delByAddonsName($addons_name) { Menu::deleteAll(['addons_name' => $addons_name]); } /** * @param MenuCate $cate */ public function delByCate(MenuCate $cate) { Menu::deleteAll(['app_id' => $cate->app_id, 'addons_name' => $cate->addons_name]); } /** * @param array $menus * @param MenuCate $cate * @param int $pid * @param int $level * @param Menu $parent */ public function createByAddons(array $menus, MenuCate $cate, $pid = 0, $level = 1, $parent = '') { $cacheArr = []; // 重组数组 $menus = ArrayHelper::regroupMapToArr($menus); foreach ($menus as $menu) { $model = new Menu(); $model->attributes = $menu; // 增加父级 !empty($parent) && $model->setParent($parent); if ($model->params) { $params = []; foreach ($model->params as $key => $value) { $params[$key]= $value; } $model->params = $params; } $model->url = StringHelper::toUnderScore($cate->addons_name) . '/'. $menu['route']; $model->pid = $pid; $model->level = $level; $model->cate_id = $cate->id; $model->app_id = $cate->app_id; $model->addons_name = $cate->addons_name; $model->is_addon = $cate->is_addon; $res = $model->save(false); $cate->app_id == AppEnum::BACKEND && $pid > 0 && $cacheArr[] = $model->toArray();// 将对象转为数组 if (isset($menu['child']) && !empty($menu['child'])) { $this->createByAddons($menu['child'], $cate, $model->id, $model->level + 1, $model); } } // 生成目录保存至缓存中 if ($cacheArr) { $cache = Yii::$app->cache; $cache_key = RedisKeyEnum::suffix(RedisKeyEnum::BACKEND_MENU,$cate->addons_name,true); $cache->set($cache_key, $cacheArr); } } /** * 获取下拉 * * @param MenuCate $menuCate * @param string $id * @return array */ public function getDropDown(MenuCate $menuCate, $app_id, $id = '') { $list = Menu::find() ->where(['>=', 'status', StatusEnum::DISABLED]) ->andWhere(['app_id' => $app_id]) ->andWhere(['is_addon' => $menuCate->is_addon]) ->andFilterWhere(['addons_name' => $menuCate->addons_name]) ->andFilterWhere(['<>', 'id', $id]) ->select(['id', 'title', 'pid', 'level']) ->orderBy('cate_id asc, sort asc') ->asArray() ->all(); $models = ArrayHelper::itemsMerge($list); $data = ArrayHelper::map(ArrayHelper::itemsMergeDropDown($models), 'id', 'title'); return ArrayHelper::merge([0 => '顶级菜单'], $data); } /** * @return array */ public function getOnAuthList($catid, $addonsName = '', $mallId = 0) { $models = $this->findAll($catid, $addonsName); // 获取权限信息 foreach ($models as $key => &$model) { if (!empty($model['url'])) { $params = !is_array($model['params']) ? Json::decode($model['params'], true) : $model['params']; (empty($params) || !is_array($params)) && $params = []; $model['fullUrl'][] = $model['url']; foreach ($params as $param) { if (!empty($param['key'])) { $model['fullUrl'][$param['key']] = $param['value']; } } } else { $model['fullUrl'] = '#'; } // 系统菜单校验 添加overview验证 //if($model['url']!='mall/overview/index'){ if ($model['is_addon'] == WhetherEnum::DISABLED && Auth::verify($model['url']) === false) { unset($models[$key]); } //} // 插件菜单校验 if ($model['is_addon'] == WhetherEnum::ENABLED) { if (Auth::verify($model['url']) === false) { unset($models[$key]); } unset($tmpUrl); } } return $models; } /** * 过滤菜单显示 * $param $menu * $return array * */ public function filterMenu($menuList, $type = 1) { $newMenuList = []; $permissionsMenuList = self::$permissionsMenu[$type] ?? []; foreach ($menuList as $menu) { if (in_array($menu['url'], $permissionsMenuList)) { continue; } $childMenuList = []; if (isset($menu['children']) && $menu['children']) { foreach ($menu['children'] as $childMenu) { if (!in_array($childMenu['url'],$permissionsMenuList)) { $childMenuList[] = $childMenu; } } $menu['children'] = $childMenuList; } $newMenuList[] = $menu; } return $newMenuList; } /** * @return array|\yii\db\ActiveRecord[] */ public function findAll($catid, $addonsName = '') { $where['status'] = StatusEnum::ENABLED; $where['app_id'] = Yii::$app->id; if (!empty($addonsName)) { $where['addons_name'] = ['addons_name' => $addonsName]; } else { $where['cate_id'] = $catid; $where['is_addon'] = StatusEnum::DISABLED; } return $data = Menu::find()->where($where) ->orderBy('sort asc, id asc') ->asArray() ->all(); } /** * @param $tree * @param $id * @return array|\yii\db\ActiveRecord[] */ public function findChildByID($tree, $id) { return Menu::find() ->where(['like', 'tree', $tree . TreeHelper::prefixTreeKey($id) . '%', false]) ->select(['id', 'level', 'tree', 'pid']) ->asArray() ->all(); } }