正在显示
11 个修改的文件
包含
397 行增加
和
12 行删除
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +namespace App\Http\Controllers\Aside; | ||
| 4 | + | ||
| 5 | +use App\Helper\Arr; | ||
| 6 | +use App\Http\Logic\Aside\GroupLogic; | ||
| 7 | +use App\Rules\Ids; | ||
| 8 | +use Illuminate\Http\Request; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * 用户组 | ||
| 12 | + * Class Group | ||
| 13 | + * @package App\Http\Controllers\Aside | ||
| 14 | + * @author zbj | ||
| 15 | + * @date 2023/4/19 | ||
| 16 | + */ | ||
| 17 | +class GroupController extends BaseController | ||
| 18 | +{ | ||
| 19 | + | ||
| 20 | + public function list(Request $request, GroupLogic $logic) | ||
| 21 | + { | ||
| 22 | + $list = $logic->getList(); | ||
| 23 | + return view("admin.group", ["list" => $list]); | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + public function info(Request $request, GroupLogic $logic){ | ||
| 27 | + $request->validate([ | ||
| 28 | + 'id'=>'required' | ||
| 29 | + ],[ | ||
| 30 | + 'id.required' => 'ID不能为空' | ||
| 31 | + ]); | ||
| 32 | + $data = $logic->getInfo($this->param['id']); | ||
| 33 | + return $this->success($data); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + public function save(GroupLogic $request, GroupLogic $logic){ | ||
| 37 | + $data = $logic->save($this->param); | ||
| 38 | + return $this->success($data); | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + public function delete(Request $request, GroupLogic $logic){ | ||
| 42 | + $request->validate([ | ||
| 43 | + 'ids'=>['required', new Ids()] | ||
| 44 | + ],[ | ||
| 45 | + 'ids.required' => 'ID不能为空' | ||
| 46 | + ]); | ||
| 47 | + | ||
| 48 | + $data = $logic->delete($this->param['ids']); | ||
| 49 | + return $this->success($data); | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | +} |
| @@ -2,25 +2,53 @@ | @@ -2,25 +2,53 @@ | ||
| 2 | 2 | ||
| 3 | namespace App\Http\Controllers\Aside; | 3 | namespace App\Http\Controllers\Aside; |
| 4 | 4 | ||
| 5 | -use App\Http\Controllers\Controller; | 5 | +use App\Helper\Arr; |
| 6 | +use App\Http\Logic\Aside\MenuLogic; | ||
| 7 | +use App\Rules\Ids; | ||
| 6 | use Illuminate\Http\Request; | 8 | use Illuminate\Http\Request; |
| 7 | 9 | ||
| 8 | /** | 10 | /** |
| 9 | - * Class Menu | 11 | + * 后台菜单 |
| 12 | + * Class MenuController | ||
| 10 | * @package App\Http\Controllers\Aside | 13 | * @package App\Http\Controllers\Aside |
| 11 | * @author zbj | 14 | * @author zbj |
| 12 | * @date 2023/4/19 | 15 | * @date 2023/4/19 |
| 13 | */ | 16 | */ |
| 14 | -class MenuController extends Controller | 17 | +class MenuController extends BaseController |
| 15 | { | 18 | { |
| 16 | - /** | ||
| 17 | - * 菜单列表 | ||
| 18 | - * @param Request $request | ||
| 19 | - * @return \Illuminate\Http\JsonResponse | ||
| 20 | - */ | ||
| 21 | - public function index(Request $request) | 19 | + |
| 20 | + public function list(Request $request, MenuLogic $logic) | ||
| 22 | { | 21 | { |
| 23 | - echo 111; | 22 | + $map = []; |
| 23 | + $sort = ['id' => 'desc']; | ||
| 24 | + $list = $logic->getList($map, $sort, ['*'],0); | ||
| 25 | + return view("admin.menu", ["list" => Arr::listToTree($list)]); | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + public function info(Request $request, MenuLogic $logic){ | ||
| 29 | + $request->validate([ | ||
| 30 | + 'id'=>'required' | ||
| 31 | + ],[ | ||
| 32 | + 'id.required' => 'ID不能为空' | ||
| 33 | + ]); | ||
| 34 | + $data = $logic->getInfo($this->param['id']); | ||
| 35 | + return $this->success($data); | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + public function save(MenuLogic $request, MenuLogic $logic){ | ||
| 39 | + $data = $logic->save($this->param); | ||
| 40 | + return $this->success($data); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + public function delete(Request $request, MenuLogic $logic){ | ||
| 44 | + $request->validate([ | ||
| 45 | + 'ids'=>['required', new Ids()] | ||
| 46 | + ],[ | ||
| 47 | + 'ids.required' => 'ID不能为空' | ||
| 48 | + ]); | ||
| 49 | + | ||
| 50 | + $data = $logic->delete($this->param['ids']); | ||
| 51 | + return $this->success($data); | ||
| 24 | } | 52 | } |
| 25 | 53 | ||
| 26 | } | 54 | } |
| @@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
| 3 | namespace App\Http\Logic\Aside; | 3 | namespace App\Http\Logic\Aside; |
| 4 | 4 | ||
| 5 | 5 | ||
| 6 | +use App\Enums\Common\Common; | ||
| 6 | use App\Http\Logic\Logic; | 7 | use App\Http\Logic\Logic; |
| 7 | 8 | ||
| 8 | /** | 9 | /** |
| @@ -14,6 +15,8 @@ class BaseLogic extends Logic | @@ -14,6 +15,8 @@ class BaseLogic extends Logic | ||
| 14 | { | 15 | { |
| 15 | protected $requestAll; | 16 | protected $requestAll; |
| 16 | 17 | ||
| 18 | + protected $side = Common::A; | ||
| 19 | + | ||
| 17 | public function __construct() | 20 | public function __construct() |
| 18 | { | 21 | { |
| 19 | $this->requestAll = request()->all(); | 22 | $this->requestAll = request()->all(); |
app/Http/Logic/Aside/GroupLogic.php
0 → 100644
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +namespace App\Http\Logic\Aside; | ||
| 4 | + | ||
| 5 | + | ||
| 6 | +use App\Helper\Arr; | ||
| 7 | +use App\Models\Group; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * Class GroupLogic | ||
| 11 | + * @package App\Http\Logic\Aside | ||
| 12 | + * @author zbj | ||
| 13 | + * @date 2023/4/19 | ||
| 14 | + */ | ||
| 15 | +class GroupLogic extends BaseLogic | ||
| 16 | +{ | ||
| 17 | + public function __construct() | ||
| 18 | + { | ||
| 19 | + parent::__construct(); | ||
| 20 | + | ||
| 21 | + $this->model = new Group(); | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + public function save($param){ | ||
| 25 | + if(!empty($param['pid'])){ | ||
| 26 | + if(!empty($param['id']) && $param['pid'] == $param['id']){ | ||
| 27 | + $this->fail('上级菜单不能是本菜单'); | ||
| 28 | + } | ||
| 29 | + $p_Group = $this->getCacheInfo($param['pid']); | ||
| 30 | + if(!$p_Group){ | ||
| 31 | + $this->fail('上级菜单不存在'); | ||
| 32 | + } | ||
| 33 | + } | ||
| 34 | + return parent::save($param); | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + public function delete($ids, $map = []){ | ||
| 38 | + $ids= array_filter(Arr::splitFilterToArray($ids), 'intval'); | ||
| 39 | + foreach ($ids as $id){ | ||
| 40 | + $info = $this->getCacheInfo($id); | ||
| 41 | + if(!$info){ | ||
| 42 | + continue; | ||
| 43 | + } | ||
| 44 | + //是否有子菜单 | ||
| 45 | + if(Group::where('pid', $id)->count()){ | ||
| 46 | + $this->fail("菜单{$info['title']}存在子菜单,不能删除"); | ||
| 47 | + } | ||
| 48 | + } | ||
| 49 | + return parent::delete($ids); | ||
| 50 | + } | ||
| 51 | +} |
app/Http/Logic/Aside/MenuLogic.php
0 → 100644
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +namespace App\Http\Logic\Aside; | ||
| 4 | + | ||
| 5 | + | ||
| 6 | +use App\Helper\Arr; | ||
| 7 | +use App\Models\Menu; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * Class MenuLogic | ||
| 11 | + * @package App\Http\Logic\Aside | ||
| 12 | + * @author zbj | ||
| 13 | + * @date 2023/4/19 | ||
| 14 | + */ | ||
| 15 | +class MenuLogic extends BaseLogic | ||
| 16 | +{ | ||
| 17 | + public function __construct() | ||
| 18 | + { | ||
| 19 | + parent::__construct(); | ||
| 20 | + | ||
| 21 | + $this->model = new Menu(); | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + public function save($param){ | ||
| 25 | + if(!empty($param['pid'])){ | ||
| 26 | + if(!empty($param['id']) && $param['pid'] == $param['id']){ | ||
| 27 | + $this->fail('上级菜单不能是本菜单'); | ||
| 28 | + } | ||
| 29 | + $p_menu = $this->getCacheInfo($param['pid']); | ||
| 30 | + if(!$p_menu){ | ||
| 31 | + $this->fail('上级菜单不存在'); | ||
| 32 | + } | ||
| 33 | + } | ||
| 34 | + return parent::save($param); | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + public function delete($ids, $map = []){ | ||
| 38 | + $ids= array_filter(Arr::splitFilterToArray($ids), 'intval'); | ||
| 39 | + foreach ($ids as $id){ | ||
| 40 | + $info = $this->getCacheInfo($id); | ||
| 41 | + if(!$info){ | ||
| 42 | + continue; | ||
| 43 | + } | ||
| 44 | + //是否有子菜单 | ||
| 45 | + if(Menu::where('pid', $id)->count()){ | ||
| 46 | + $this->fail("菜单{$info['title']}存在子菜单,不能删除"); | ||
| 47 | + } | ||
| 48 | + } | ||
| 49 | + return parent::delete($ids); | ||
| 50 | + } | ||
| 51 | +} |
| @@ -16,6 +16,8 @@ class Logic | @@ -16,6 +16,8 @@ class Logic | ||
| 16 | { | 16 | { |
| 17 | protected $model; | 17 | protected $model; |
| 18 | 18 | ||
| 19 | + protected $side; | ||
| 20 | + | ||
| 19 | protected $is_cache = true; //是否缓存数据 | 21 | protected $is_cache = true; //是否缓存数据 |
| 20 | 22 | ||
| 21 | /** | 23 | /** |
| @@ -70,7 +72,9 @@ class Logic | @@ -70,7 +72,9 @@ class Logic | ||
| 70 | }else{ | 72 | }else{ |
| 71 | $result = $query->select($columns)->get(); | 73 | $result = $query->select($columns)->get(); |
| 72 | } | 74 | } |
| 73 | - | 75 | + if($this->side == Common::A){ |
| 76 | + return $this->success($result); | ||
| 77 | + } | ||
| 74 | return $this->success($result ? $result->toArray() : []); | 78 | return $this->success($result ? $result->toArray() : []); |
| 75 | } | 79 | } |
| 76 | 80 |
app/Http/Requests/Aside/GroupRequest.php
0 → 100644
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +namespace App\Http\Requests\Aside; | ||
| 4 | + | ||
| 5 | +use App\Models\Group; | ||
| 6 | +use Illuminate\Foundation\Http\FormRequest; | ||
| 7 | +use Illuminate\Validation\Rule; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * Class GroupRequest | ||
| 11 | + * @package App\Http\Requests\Bside\product | ||
| 12 | + * @author zbj | ||
| 13 | + * @date 2023/4/19 | ||
| 14 | + */ | ||
| 15 | +class GroupRequest extends FormRequest | ||
| 16 | +{ | ||
| 17 | + /** | ||
| 18 | + * Determine if the user is authorized to make this request. | ||
| 19 | + * | ||
| 20 | + * @return bool | ||
| 21 | + */ | ||
| 22 | + public function authorize() | ||
| 23 | + { | ||
| 24 | + return true; | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + /** | ||
| 28 | + * Get the validation rules that apply to the request. | ||
| 29 | + * | ||
| 30 | + * @return array | ||
| 31 | + */ | ||
| 32 | + public function rules() | ||
| 33 | + { | ||
| 34 | + return [ | ||
| 35 | + 'title' => ['required', 'max:32'], | ||
| 36 | + 'rights' => ['required', 'array'], | ||
| 37 | + 'status' => ['required', Rule::in(array_keys(Group::statusMap()))], | ||
| 38 | + ]; | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + public function messages() | ||
| 42 | + { | ||
| 43 | + return [ | ||
| 44 | + 'title.required' => '请输入权限组名称', | ||
| 45 | + 'title.max' => '权限组名称长度不超过32个字符', | ||
| 46 | + 'rights.required' => '请输入选择权限节点', | ||
| 47 | + 'rights.array' => '权限节点无效', | ||
| 48 | + 'status.required' => '请选择状态', | ||
| 49 | + 'status.in' => '状态值无效', | ||
| 50 | + ]; | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | +} |
app/Http/Requests/Aside/MenuRequest.php
0 → 100644
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +namespace App\Http\Requests\Aside; | ||
| 4 | + | ||
| 5 | +use App\Models\Menu; | ||
| 6 | +use Illuminate\Foundation\Http\FormRequest; | ||
| 7 | +use Illuminate\Validation\Rule; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * Class MenuRequest | ||
| 11 | + * @package App\Http\Requests\Bside\product | ||
| 12 | + * @author zbj | ||
| 13 | + * @date 2023/4/19 | ||
| 14 | + */ | ||
| 15 | +class MenuRequest extends FormRequest | ||
| 16 | +{ | ||
| 17 | + /** | ||
| 18 | + * Determine if the user is authorized to make this request. | ||
| 19 | + * | ||
| 20 | + * @return bool | ||
| 21 | + */ | ||
| 22 | + public function authorize() | ||
| 23 | + { | ||
| 24 | + return true; | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + /** | ||
| 28 | + * Get the validation rules that apply to the request. | ||
| 29 | + * | ||
| 30 | + * @return array | ||
| 31 | + */ | ||
| 32 | + public function rules() | ||
| 33 | + { | ||
| 34 | + return [ | ||
| 35 | + 'title' => ['required', 'max:32'], | ||
| 36 | + 'icon' => ['max:32'], | ||
| 37 | + 'route_name' => ['max:32'], | ||
| 38 | + 'type' => ['required', Rule::in(array_keys(Menu::typeMap()))], | ||
| 39 | + 'status' => ['required', Rule::in(array_keys(Menu::statusMap()))], | ||
| 40 | + ]; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + public function messages() | ||
| 44 | + { | ||
| 45 | + return [ | ||
| 46 | + 'title.required' => '请输入菜单名称', | ||
| 47 | + 'title.max' => '菜单名称长度不超过32个字符', | ||
| 48 | + 'pid.exists' => '父菜单不存在', | ||
| 49 | + 'icon.max' => '图标长度不超过32个字符', | ||
| 50 | + 'route_name.max' => '路由长度不超过32个字符', | ||
| 51 | + 'type.required' => '请选择类型', | ||
| 52 | + 'type.in' => '类型值无效', | ||
| 53 | + 'status.required' => '请选择状态', | ||
| 54 | + 'status.in' => '状态值无效', | ||
| 55 | + ]; | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | +} |
app/Models/Group.php
0 → 100644
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +namespace App\Models; | ||
| 4 | + | ||
| 5 | + | ||
| 6 | + | ||
| 7 | +use App\Helper\Arr; | ||
| 8 | + | ||
| 9 | +class Group extends Base | ||
| 10 | +{ | ||
| 11 | + protected $table = 'gl_group'; | ||
| 12 | + | ||
| 13 | + const STATUS_NORMAL = 0; | ||
| 14 | + const STATUS_ABNORMAL = 1; | ||
| 15 | + /** | ||
| 16 | + * 超级管理员ID, 当前ID拥有所有权限, 不能进行修改 | ||
| 17 | + */ | ||
| 18 | + const ADMINISTRATOR_ID = 1; | ||
| 19 | + | ||
| 20 | + /** | ||
| 21 | + * @return string[] | ||
| 22 | + */ | ||
| 23 | + public static function statusMap(){ | ||
| 24 | + return [ | ||
| 25 | + self::STATUS_NORMAL => '正常', | ||
| 26 | + self::STATUS_ABNORMAL => '禁用', | ||
| 27 | + ]; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + /** | ||
| 31 | + * 获取用户组路由权限 | ||
| 32 | + * @param $gid | ||
| 33 | + * @return array | ||
| 34 | + */ | ||
| 35 | + public static function getRouteByGroupId($gid) | ||
| 36 | + { | ||
| 37 | + try { | ||
| 38 | + $group = self::where(['id' => $gid, 'status' => self::STATUS_NORMAL])->first(); | ||
| 39 | + $group_route = Menu::where(['status' => Menu::STATUS_NORMAL])->whereIn('id', $group->rights)->pluck('route_name')->toArray(); | ||
| 40 | + return $group_route; | ||
| 41 | + } catch (\Exception $e) { | ||
| 42 | + return []; | ||
| 43 | + } | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + public function getRightsAttribute($value) | ||
| 47 | + { | ||
| 48 | + return Arr::s2a($value); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + public function setRightsAttribute($value) | ||
| 52 | + { | ||
| 53 | + $this->attributes['rights'] = Arr::a2s($value); | ||
| 54 | + } | ||
| 55 | +} |
| @@ -5,4 +5,34 @@ namespace App\Models; | @@ -5,4 +5,34 @@ namespace App\Models; | ||
| 5 | class Menu extends Base | 5 | class Menu extends Base |
| 6 | { | 6 | { |
| 7 | protected $table = 'gl_menu'; | 7 | protected $table = 'gl_menu'; |
| 8 | + | ||
| 9 | + const STATUS_NORMAL = 0; | ||
| 10 | + const STATUS_ABNORMAL = 1; | ||
| 11 | + | ||
| 12 | + const TYPE_SHOW = 'show'; | ||
| 13 | + const TYPE_SAVE = 'save'; | ||
| 14 | + const TYPE_DELETE = 'delete'; | ||
| 15 | + | ||
| 16 | + /** | ||
| 17 | + * @return string[] | ||
| 18 | + */ | ||
| 19 | + public static function statusMap(): array | ||
| 20 | + { | ||
| 21 | + return [ | ||
| 22 | + self::STATUS_NORMAL => '正常', | ||
| 23 | + self::STATUS_ABNORMAL => '禁用', | ||
| 24 | + ]; | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + /** | ||
| 28 | + * @return string[] | ||
| 29 | + */ | ||
| 30 | + public static function typeMap(): array | ||
| 31 | + { | ||
| 32 | + return [ | ||
| 33 | + self::TYPE_SHOW => '查看', | ||
| 34 | + self::TYPE_SAVE => '保存', | ||
| 35 | + self::TYPE_DELETE => '删除', | ||
| 36 | + ]; | ||
| 37 | + } | ||
| 8 | } | 38 | } |
| @@ -12,7 +12,7 @@ Route::middleware(['web'])->group(function (){ //admin用渲染默认要加上w | @@ -12,7 +12,7 @@ Route::middleware(['web'])->group(function (){ //admin用渲染默认要加上w | ||
| 12 | 12 | ||
| 13 | //菜单 | 13 | //菜单 |
| 14 | Route::prefix('menu')->group(function () { | 14 | Route::prefix('menu')->group(function () { |
| 15 | - Route::get('/', [Aside\MenuController::class, 'index'])->name('admin.menu'); | 15 | + Route::get('/', [Aside\MenuController::class, 'list'])->name('admin.menu'); |
| 16 | Route::get('/info', [Aside\MenuController::class, 'info'])->name('admin.menu_info'); | 16 | Route::get('/info', [Aside\MenuController::class, 'info'])->name('admin.menu_info'); |
| 17 | Route::post('/save', [Aside\MenuController::class, 'save'])->name('admin.menu_save'); | 17 | Route::post('/save', [Aside\MenuController::class, 'save'])->name('admin.menu_save'); |
| 18 | Route::any('/delete', [Aside\MenuController::class, 'delete'])->name('admin.menu_delete'); | 18 | Route::any('/delete', [Aside\MenuController::class, 'delete'])->name('admin.menu_delete'); |
-
请 注册 或 登录 后发表评论