| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- <?php
- namespace services\common;
- use addons\ReservationService\common\services\BackendService;
- use common\enums\AddonsEnum;
- use common\enums\AppEnum;
- use common\enums\RedisKeyEnum;
- use Yii;
- use yii\helpers\Json;
- use common\helpers\ArrayHelper;
- use common\components\Service;
- use common\enums\StatusEnum;
- use common\enums\WhetherEnum;
- use common\helpers\StringHelper;
- use common\helpers\Auth;
- use common\helpers\TreeHelper;
- use common\models\backend\Menu;
- use common\models\backend\MenuCate;
- /**
- * Class MenuService
- * @package services\sys
- * @author qimall
- */
- class MenuService extends Service
- {
- public static $permissionsMenu = [
- 1 => [ //合规模式需要隐藏的菜单
- '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();
- }
- }
|