* This source file is subject to the license under the project that is bundled. */ namespace App\Logic\Admin; //use App\Constants\Status; use App\Exception\BusinessException; //use App\Kernel\Password\Password; //use App\Kernel\Jwt\Jwt; //use App\Logic\Company\CompanyLogic; use App\Model\Menu; use App\Repository\Admin\UserRepository; use App\Repository\Menu\MenuRepository; use App\Repository\RoleMenu\RoleMenuRepository; use Hyperf\Di\Annotation\Inject; //use Youyao\Framework\ErrCode; class AdminLogic { /** * @Inject * @var UserRepository */ private $user; /** * @Inject * @var MenuRepository */ private $menu; /** * @Inject * @var RoleMenuRepository */ private $roleMenu; // /** // * @Inject // * @var Jwt // */ // private $jwt; // /** // * @Inject // * @var Password // */ // private $password; public function getUserInfo($id) { return [ 'username' => '测试账户', 'name' => '测试账户', 'avatar' => 'avatar', 'introduction' => 'introduction', 'company_name' => 'company_name' ]; // return $this->user->getUserByIDS(); } # 还差数据表 + 安装jwt // public function login($username, $password): ?string // { // $user = $this->user->getByUsername($username); // // if (empty($user) || ! $this->password->verify($password, $user->password)) { // throw new BusinessException('用户名或密码错误', ErrCode::Unauthorized); // } // if ($user->status !== Status::REGULAR) { // throw new BusinessException('用户已被禁用,请联系管理员', ErrCode::Unauthorized); // } // if (!CompanyLogic::validateUserCompany($user)) { // throw new BusinessException('公司帐户已被禁用或不在服务期限内,请联系平台', ErrCode::Unauthorized); // } // // $token = $this->jwt->generate($user); // if (! $token) { // throw new BusinessException('登录失败,请稍后重试', ErrCode::Unauthorized); // } // // return $token; // } // public function getUserMenuTree(User $user): array public function getUserMenuTree(): array { // $menus = $this->getUserMenus($user); $menus = $this->getUserMenus(); $vueMenus = $actions = []; foreach ($menus as $menu) { if ($menu['type'] === 3) { # 按钮 $actions[] = $menu['action']; } else { $vueMenus[] = $menu; } } return [ 'menus' => $this->getMenuTree($vueMenus), 'actions' => $actions, ]; } // protected function getUserMenus(User $user) protected function getUserMenus() { // $roles = $this->user->getUserValidRoles($user); $roles = $this->user->getUserValidRoles(); $roleIds = $roles->pluck('id')->unique()->all(); $menuIds = $this->roleMenu->getMenuIdsByRoleIds($roleIds); return $this->menu->getByIds($menuIds); } # ------------------------------------------- /** * 构建菜单 * @param array $menus * @return array */ public function getMenuTree(array $menus) { $data = []; foreach ($menus as $menu) { if ($menu['pid'] === 0) { $data[] = $this->getChildren($menus, $menu); } } return $data; } /** * 构建子菜单 * @param $menus * @param $menu * @return mixed */ public function getChildren($menus, $menu) { $c = []; foreach ($menus as $children) { if ($menu['id'] === $children['pid']) { $c[] = $this->getChildren($menus, $children); } } $menu['children'] = $c; $menu['api'] = $this->formatApi($menu['api']); return $menu; } /** * 构建菜单中api * @param $api * @return array|false|string[] */ public function formatApi($api) { if ($api) { return explode(';', $api); } return []; } }