作者 赵彬吉

update

  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();
  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 +}
  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
  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 +}
  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 +}
  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');