laravel8.5与layuiadmin整合(14)

66.设计左侧栏目,以便用权限控制显示与操作
修改/app/Providers/AppServiceProvider.php
如下

class AppServiceProvider extends ServiceProvider
{
    // 

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
        view()->composer(['admin.layout'], \App\Http\ViewComposers\SiderbarComposer::class);
    }
}

67.建立上面的共享视图
/app/Http/ViewComposers/SiderbarComposer.php

namespace  App\Http\ViewComposers;

use Illuminate\Support\Facades\DB;
use Illuminate\View\View;

class SiderbarComposer {
    public function compose(View $view) {
        // 返回的导航数组
        $sidebar = [];
        $topMenus = DB::table('permissions')->where(['parent_id'=>0])->select()->get()->toArray();
        if($topMenus) {
            $top_ids = [];
            foreach ($topMenus as $row) {
                array_push($top_ids,$row->id);
                $sidebar[$row->id] = $row;
            }
            $secMenus = DB::table('permissions')
                ->whereIn('parent_id', $top_ids)
                ->get();

            if($secMenus){
                foreach ($secMenus as $sec_row) {
                    $sidebar[$sec_row->parent_id]->children[] = $sec_row;
                }
            }
        }
        $view->with('sidebar',$sidebar);
    }
}

68.在模板中添加权限和显示
/resources/views/admin/layout.blade.php

                    @foreach($sidebar as $menu)
                    @can($menu->name)
                    <li data-name="user" class="layui-nav-item">
                        <a href="javascript:;" lay-tips="{{$menu->display_name}}" lay-direction="2">
                            <i class="layui-icon layui-icon-user"></i>
                            <cite>{{$menu->display_name}}</cite>
                        </a>
                        <dl class="layui-nav-child">
                            @isset($menu->children)
                            @if($menu->children)
                            @foreach($menu->children as $subMenu)
                            @can($subMenu->name)
                            <dd data-name="{{$subMenu->name}}">
                                <a lay-href="{{route($subMenu->name)}}">{{$subMenu->display_name}}</a>
                            </dd>
                            @endcan
                            @endforeach
                            @endif
                            @endisset
                        </dl>
                    </li>
                    @endcan
                    @endforeach

69.为了方便测试权限,先在路由中添加一些模板
/routes/web.php

// 产品管理
Route::group(['prefix' => 'admin','middleware'=>'auth'],function() {
    // 产品列表管理
    Route::get('products/index',[App\Http\Controllers\Admin\ProductsController::class,'index'])
        ->name('admin.products');

});


// 仓库管理
Route::group(['prefix' => 'admin','middleware'=>'auth'],function() {
    // 仓库列表管理
    Route::get('warehouse/index',[App\Http\Controllers\Admin\WarehouseController::class,'index'])
        ->name('admin.warehouse');
    // 仓库库存管理
    Route::get('warehouse/stock',[App\Http\Controllers\Admin\warehouseController::class,'stock'])
        ->name('admin.warehouse.stock');
});

// 订单管理
Route::group(['prefix' => 'admin','middleware'=>'auth'],function() {
    // 订单列表管理
    Route::get('orders/index',[App\Http\Controllers\Admin\OrdersController::class,'index'])
        ->name('admin.orders');
    // 订单物流管理
    Route::get('logistic/index',[App\Http\Controllers\Admin\LogisticController::class,'index'])
        ->name('admin.logistic');
});

// 采购管理
Route::group(['prefix' => 'admin','middleware'=>'auth'],function() {
    // 采购列表管理
    Route::get('purchase/index',[App\Http\Controllers\Admin\PurchaseController::class,'index'])
        ->name('admin.purchase');
    // 供应商管理
    Route::get('purchase/suppliers',[App\Http\Controllers\Admin\PurchaseController::class,'suppliers'])
        ->name('admin.purchase.suppliers');
});

70.根据上面的路由,分别建立对应的控器和模板即可

71.方便模板显示登陆用户名,修改
/app/Http/Controllers/Admin/IndexController.php

    public function layout() {
        $userInfo = Auth::user();
        $user['id'] = $userInfo->id;
        $user['name'] = $userInfo->name;
         return view('admin.layout',compact('user'));

72.修改显示名称
/resources/views/admin/layout.blade.php
//
<cite>贤心-{{$user['name']?? ''}}</cite>

73.分别添加路由对应的权限

74.再在相关路由加上权限即可
/routes/web.php
修改如下

// 系统管理
Route::group(['prefix' => 'admin','middleware' => ['auth','permission:system.manage']],function() {

    Route::group(['middleware' => ['permission:admin.user']], function() {
        // 系统用户列表
        Route::get('/user',[App\Http\Controllers\Admin\UserController::class, 'index'])
            ->name('admin.user');
        //添加系统用户
        Route::get('/create',[App\Http\Controllers\Admin\UserController::class, 'create'])
            ->name('admin.user.create')->middleware('permission:admin.user.create');
        // 获取系统用户列表
        Route::get('/data',[App\Http\Controllers\Admin\UserController::class, 'data'])
            ->name('admin.data');
        //删除系统用户
        Route::delete('user/destroy',[App\Http\Controllers\Admin\UserController::class, 'destroy'])
            ->name('admin.user.destroy')->middleware('permission:admin.user.destroy');
        //保存用户
        Route::post('/store',[App\Http\Controllers\Admin\UserController::class, 'store'])
            ->name('admin.user.store')->middleware('permission:admin.user.create');
        //编辑用户
        Route::get('user/{id}/edit',[App\Http\Controllers\Admin\UserController::class, 'edit'])
            ->name('admin.user.edit')->middleware('permission:admin.user.edit');
        // 保存编辑用户
        Route::put('user/{id}/update',[App\Http\Controllers\Admin\UserController::class, 'update'])
            ->name('admin.user.update')->middleware('permission:admin.user.edit');
        // 给人员分配角色
        Route::get('user/{id}/role',[App\Http\Controllers\Admin\UserController::class, 'role'])
            ->name('admin.user.role')->middleware('permission:admin.user.assignRole');
        Route::put('user/{id}/assignRole',[App\Http\Controllers\Admin\UserController::class, 'assignRole'])
            ->name('admin.user.assignRole')->middleware('permission:admin.user.assignRole');
        // 给人员分配权限
        Route::get('user/{id}/permission',[App\Http\Controllers\Admin\UserController::class, 'permission'])
            ->name('admin.user.permission')->middleware('permission:admin.user.assignPermission');
        Route::put('user/{id}/assignPermission',[App\Http\Controllers\Admin\UserController::class, 'assignPermission'])
            ->name('admin.user.assignPermission')->middleware('permission:admin.user.assignPermission');
    });


});

// 角色管理
Route::group(['prefix' => 'admin','middleware'=>['auth','permission:system.manage']],function() {

    Route::group(['middleware' => ['permission:admin.role']],function() {
        // 展示角色列表
        Route::get('role',[App\Http\Controllers\Admin\RoleController::class,'index'])
            ->name('admin.role');
        // 获取角色数据
        Route::get('role/data',[App\Http\Controllers\Admin\RoleController::class,'data'])
            ->name('admin.role.data');
        // 添加角色
        Route::get('role/create',[App\Http\Controllers\Admin\RoleController::class,'create'])
            ->name('admin.role.create')->middleware('permission:admin.role.create');
        // 保存添加的角色
        Route::post('role/store',[App\Http\Controllers\Admin\RoleController::class,'store'])
            ->name('admin.role.store')->middleware('permission:admin.role.create');
        //编辑角色
        Route::get('role/{id}/edit',[App\Http\Controllers\Admin\RoleController::class,'edit'])
            ->name('admin.role.edit')->middleware('permission:admin.role.edit');
        // 保存编辑
        Route::put('role/{id}/update',[App\Http\Controllers\Admin\RoleController::class,'update'])
            ->name('admin.role.update')->middleware('permission:admin.role.edit');
        //删除角色
        Route::delete('role/destroy',[App\Http\Controllers\Admin\RoleController::class, 'destroy'])
            ->name('admin.role.destroy')->middleware('permission:admin.role.destroy');

        //修改角色的拥有的权限
        Route::get('role/{id}/permission',[App\Http\Controllers\Admin\RoleController::class,'permission'])
            ->name('admin.role.permission')->middleware('permission:admin.role.assignPermission');
        // 保存角色修改的权限
        Route::put('role/{id}/assignPermission',[App\Http\Controllers\Admin\RoleController::class,'assignPermission'])
            ->name('admin.role.assignPermission')->middleware('permission:admin.role.assignPermission');
    });

});

// 权限管理
Route::group(['prefix' => 'admin','middleware'=>['auth','permission:system.manage']],function() {
    Route::group(['middleware' => ['permission:admin.permission']],function() {
        // 权限展示
        Route::get('permission', [App\Http\Controllers\Admin\PermissionController::class, 'index'])
            ->name('admin.permission');
        // 获取权限数据
        Route::get('permission/data', [App\Http\Controllers\Admin\PermissionController::class, 'data'])
            ->name('admin.permission.data');
        //创建权限
        Route::get('permission/create', [App\Http\Controllers\Admin\PermissionController::class, 'create'])
            ->name('admin.permission.create')->middleware('permission:admin.permission.create');
        // 保存新创建的权限
        Route::post('permission/store', [App\Http\Controllers\Admin\PermissionController::class, 'store'])
            ->name('admin.permission.store')->middleware('permission:admin.permission.create');
        //编辑权限
        Route::get('permission/{id}/edit', [App\Http\Controllers\Admin\PermissionController::class, 'edit'])
            ->name('admin.permission.edit')->middleware('permission:admin.permission.edit');
        // 保存编辑的权限
        Route::put('permission/{id}/update', [App\Http\Controllers\Admin\PermissionController::class, 'update'])
            ->name('admin.permission.update')->middleware('permission:admin.permission.edit');
        // 删除权限
        Route::delete('permission/destroy', [App\Http\Controllers\Admin\PermissionController::class, 'destroy'])
            ->name('admin.permission.destroy')->middleware('permission:admin.permission.destroy');
    });
});

到目前为止,系统管理的功能基本使用,为了隐藏一些没有权限的操作展示,
分别对 blade模板文件加上权限判断
比如系统用户模板
/resources/views/admin/user/index.blade.php
分别在增加,删除,修改处加上判断

    @can('admin.user.destroy')
    <button class="layui-btn layui-btn-sm layui-btn-danger" id="listDelete">删 除</button>
    @endcan
    @can('admin.user.create')
    <a class="layui-btn layui-btn-sm" href="{{ route('admin.user.create') }}">添 加</a>
    @endcan

至此已经完成
以下添加一些功能测试
添加路由
/routes/web.php

// 产品管理
Route::group(['prefix' => 'admin','middleware'=>['auth','permission:products.manage']],function() {
    // 产品列表管理
    Route::get('products/index',[App\Http\Controllers\Admin\ProductsController::class,'index'])
        ->name('admin.products')->middleware('permission:admin.products');
    // 获取产品列表数据
    Route::get('products/data', [App\Http\Controllers\Admin\ProductsController::class, 'data'])
        ->name('admin.products.data')->middleware('permission:admin.products');
    // 产品新增
    Route::get('products/create',[App\Http\Controllers\Admin\ProductsController::class,'create'])
        ->name('admin.products.create')->middleware('permission:admin.products.create');

    // 新增保存
    Route::post('products/store',[App\Http\Controllers\Admin\ProductsController::class,'store'])
        ->name('admin.products.store')->middleware('permission:admin.products.create');
    // 产品编辑
    Route::get('products/{id}/edit',[App\Http\Controllers\Admin\ProductsController::class,'edit'])
        ->name('admin.products.edit')->middleware('permission:admin.products.edit');
    // 产品编辑保存
    Route::put('products/{id}/update',[App\Http\Controllers\Admin\ProductsController::class,'update'])
        ->name('admin.products.update')->middleware('permission:admin.products.edit');
    // 产品删除
    Route::delete('products/destroy',[App\Http\Controllers\Admin\ProductsController::class,'destroy'])
        ->name('admin.products.destroy')->middleware('permission:admin.products.destroy');
    // 编辑产品状态
    Route::put('products/changeStatus',[App\Http\Controllers\Admin\ProductsController::class,'changeStatus'])
        ->name('admin.products.changeStatus')->middleware('permission:admin.products.edit');

    // 分类管理
    // 分类列表
    Route::get('category/index',[App\Http\Controllers\Admin\CategoryController::class,'index'])
        ->name('admin.category')->middleware('permission:admin.category');

    // 获取分类数据
    Route::get('category/data', [App\Http\Controllers\Admin\CategoryController::class, 'data'])
        ->name('admin.category.data')->middleware('permission:admin.category');
    // 分类新增
    Route::get('category/create',[App\Http\Controllers\Admin\CategoryController::class,'create'])
        ->name('admin.category.create')->middleware('permission:admin.category.create');
    // 新增分类保存
    Route::post('category/store',[App\Http\Controllers\Admin\CategoryController::class,'store'])
        ->name('admin.category.store')->middleware('permission:admin.category.create');
    // 分类编辑
    Route::get('category/{id}/edit',[App\Http\Controllers\Admin\CategoryController::class,'edit'])
        ->name('admin.category.edit')->middleware('permission:admin.category.edit');
    // 分类编辑保存
    Route::put('category/{id}/update',[App\Http\Controllers\Admin\CategoryController::class,'update'])
        ->name('admin.category.update')->middleware('permission:admin.category.edit');
    // 分类删除
    Route::delete('category/destroy',[App\Http\Controllers\Admin\CategoryController::class,'destroy'])
        ->name('admin.category.destroy')->middleware('permission:admin.category.destroy');
});


// 仓库管理
Route::group(['prefix' => 'admin','middleware'=>['auth','permission:warehouse.manage']],function() {
    // 仓库列表管理
    Route::get('warehouse/index',[App\Http\Controllers\Admin\WarehouseController::class,'index'])
        ->name('admin.warehouse')->middleware('permission:admin.warehouse');
    // 仓库库存管理
    Route::get('warehouse/stock',[App\Http\Controllers\Admin\warehouseController::class,'stock'])
        ->name('admin.warehouse.stock')->middleware('permission:admin.warehouse.stock');
});

// 订单管理
Route::group(['prefix' => 'admin','middleware'=>['auth','permission:orders.manage']],function() {
    // 订单列表管理
    Route::get('orders/index',[App\Http\Controllers\Admin\OrdersController::class,'index'])
        ->name('admin.orders')->middleware('permission:admin.orders');
    // 订单物流管理
    Route::get('logistic/index',[App\Http\Controllers\Admin\LogisticController::class,'index'])
        ->name('admin.logistic')->middleware('permission:admin.logistic');
});

// 采购管理
Route::group(['prefix' => 'admin','middleware'=>['auth','permission:purchase.manage']],function() {
    // 采购列表管理
    Route::get('purchase/index',[App\Http\Controllers\Admin\PurchaseController::class,'index'])
        ->name('admin.purchase')->middleware('permission:admin.purchase');
    // 供应商管理
    Route::get('purchase/suppliers',[App\Http\Controllers\Admin\PurchaseController::class,'suppliers'])
        ->name('admin.purchase.suppliers')->middleware('permission:admin.purchase.suppliers');
});
//文件上传接口
Route::post('uploadImg', [App\Http\Controllers\PublicController::class,'uploadImg'])->name('uploadImg');

同于上传到 storage/app/public 目录的文件可以被外部访问,还要执行以下命令

php artisan storage:link

 

该命令会在项目根目录下的 public 中创建一个软链 storage
指向 storage/app/public,这样,后者下面的文件才可以真正通过 Web 路径访问。

 

76.分别添加产品表products和产品分类表category

CREATE TABLE `products` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `keywords` varchar(255) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  `category_id` int(11) DEFAULT NULL COMMENT '分类ID',
  `content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci,
  `flag` tinyint(1) DEFAULT '1' COMMENT '1-启用,0-关闭',
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `author` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `title` (`title`),
  KEY `category_id` (`category_id`),
  KEY `flag` (`flag`),
  KEY `author` (`author`),
  KEY `created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品表';

CREATE TABLE `category` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `name_cn` varchar(255) DEFAULT NULL COMMENT '英文名称',
  `parent_id` int(11) DEFAULT '0' COMMENT '父类ID',
  `author` varchar(50) DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `parent_id` (`parent_id`),
  KEY `created_at` (`created_at`),
  KEY `author` (`author`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品分类';

根据对应的layuiadmin修改对应的模板即可
最后,依次加上对应的权限
至次,整合完成

安装 ueditor
https://github.com/overtrue/laravel-ueditor

以下说明route/api.php

77. 在route/api.php 添加

// 测试API功能
Route::group(['prefix' => 'test'], function() {
    Route::get('index',[App\Http\Controllers\Api\TestController::class,'index']);
});

78.新增 /app/Http/Controllers/Api/TestController.php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;

class TestController extends Controller {
    public function index() {
        echo __CLASS__ . '  -> ' .  __METHOD__;
    }
}

直接访问

域名/api/test/index

即可

79.命令行执行laravel程序
比如获取最新10个产品
执行以下命令

php artisan make:command products/getProductsList 10 0

此时会生成文件 /app/Console/Commands/products/getProductsList.php

80.在文件中

/app/Console/Kernel.php
添加如下

class Kernel extends ConsoleKernel
{
    //  
    protected $commands = [
        \App\Console\Commands\products\command:products_getProductsList
    ];

   //
}

 

81.打开文件
/app/Console/Commands/products/getProductsList.php
修改如下方法

// 
class getProductsList extends Command
{
// 两个参数
protected $signature = 'command:products_getProductsList {num} {start}'; protected $description = '获取最新10个产品'; /** * Execute the console command. * * @return int */ public function handle() {

        $num = $this->argument('num');
        $start = $this->argument('start');

$products = DB::table('products')->take($num)->get();
                foreach ($products as $product) {
                echo $product->id . ':' . $product->title . "\n";
            }
        }
        //     
}

 

执行以下脚本即可

php ./artisan command:products_getProductsList 10 0

82.生在迁移数据表文件
参考如下
https://github.com/oscarafdev/migrations-generator

php artisan migrations:generate

php artisan migrate:generate table1,table2,table3,table4,table5

posted @ 2022-01-14 18:27  好记性还真不如烂笔头  阅读(222)  评论(0编辑  收藏  举报