From 9553c73c427de976192a5ec90041c721eeb642db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=B8=96=E7=95=8C?= <642747453@qq.com> Date: Thu, 4 Aug 2022 13:21:45 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20#20220804=207=E7=82=B9=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E7=9B=98=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/Inventory.php | 79 +++++++++++++++++++ .../Controllers/Goods/GoodsSkusController.php | 1 + app/Models/Log.php | 2 +- ...03559_create_daily_stock_records_table.php | 1 + .../2022_07_26_105818_create_logs_table.php | 1 + 5 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 app/Console/Commands/Inventory.php diff --git a/app/Console/Commands/Inventory.php b/app/Console/Commands/Inventory.php new file mode 100644 index 0000000..59ad9f9 --- /dev/null +++ b/app/Console/Commands/Inventory.php @@ -0,0 +1,79 @@ +get(['id', 'stock', 'two_days_ago_num', 'yesterday_num']); + $data = []; + $date = date('Y-m-d'); + foreach ($skus as $sku) { + $data[] = [ + 'sku_id' => $sku->id, + 'day' => $date, + ]; + GoodsSku::where('id', $sku->id)->update([ + 'stock' => $sku->stock + $sku->two_days_ago_num + $sku->yesterday_num, + 'yesterday_num' => $sku->stock, + 'two_days_ago_num' => $sku->two_days_ago_num + $sku->yesterday_num, + ]); + } + $log = new Log(); + $log->module = 'goods'; + $log->action = 'PATCH'; + $log->target_type = 'goods_sku'; + $log->target_id = 0; + $log->target_field = 'timingInventory'; + $log->user_id = 1; + $record = new DailyStockRecord(); + $record->batchInsert($data); + $log->message = '成功'; + DB::commit(); + } catch (\Exception $exception) { + $log->message = '失败'; + DB::rollBack(); + } + $log->save(); + $this->info($log->message); + } +} diff --git a/app/Http/Controllers/Goods/GoodsSkusController.php b/app/Http/Controllers/Goods/GoodsSkusController.php index d47c1cb..f72f1a7 100644 --- a/app/Http/Controllers/Goods/GoodsSkusController.php +++ b/app/Http/Controllers/Goods/GoodsSkusController.php @@ -36,6 +36,7 @@ class GoodsSkusController extends Controller $goods = Goods::query()->filter()->get()->toArray(); $goodsIds = array_column($goods, 'id'); // 状态变更时间查询,日志 + $day = FormatUtils::date(); $goodsSkus = GoodsSku::query() ->whereIn('goods_id', $goodsIds) diff --git a/app/Models/Log.php b/app/Models/Log.php index 2b09204..75c1cd7 100644 --- a/app/Models/Log.php +++ b/app/Models/Log.php @@ -87,7 +87,7 @@ class Log extends Model public function setUserIdAttribute($value) { - $this->attributes['user_id'] = Auth::id(); + $this->attributes['user_id'] = Auth::id() ?: $value; } public function add($targetId = 0, $targetField = '') diff --git a/database/migrations/2022_07_26_103559_create_daily_stock_records_table.php b/database/migrations/2022_07_26_103559_create_daily_stock_records_table.php index 1c4706d..7d97f34 100644 --- a/database/migrations/2022_07_26_103559_create_daily_stock_records_table.php +++ b/database/migrations/2022_07_26_103559_create_daily_stock_records_table.php @@ -20,6 +20,7 @@ class CreateDailyStockRecordsTable extends Migration $table->unsignedInteger('arrived_today_num')->default(0)->comment('今日到货'); $table->unsignedInteger('loss_num')->default(0)->comment('损耗'); $table->unsignedInteger('inventory')->default(0)->comment('库存盘点'); + $table->unique('sku_id', 'day'); $table->timestamps(); }); } diff --git a/database/migrations/2022_07_26_105818_create_logs_table.php b/database/migrations/2022_07_26_105818_create_logs_table.php index 1530d0c..2a30d1c 100644 --- a/database/migrations/2022_07_26_105818_create_logs_table.php +++ b/database/migrations/2022_07_26_105818_create_logs_table.php @@ -24,6 +24,7 @@ class CreateLogsTable extends Migration $table->text('after_update')->nullable()->comment('更新后数据'); $table->text('message')->nullable()->comment('备注信息'); $table->bigInteger('user_id')->comment('操作人id'); + $table->index('target_type', 'target_id', 'target_field'); $table->timestamps(); }); } From 088c41cee9cb2c5a5d7e0e2a2ba81947294e8976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=B8=96=E7=95=8C?= <642747453@qq.com> Date: Thu, 4 Aug 2022 13:55:28 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20#20220804=20=E5=95=86=E5=93=81?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E6=B5=8B=E8=AF=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Goods/GoodsSkusController.php | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Goods/GoodsSkusController.php b/app/Http/Controllers/Goods/GoodsSkusController.php index f72f1a7..044d95e 100644 --- a/app/Http/Controllers/Goods/GoodsSkusController.php +++ b/app/Http/Controllers/Goods/GoodsSkusController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use App\Http\Requests\GoodsRequest; use App\Http\Requests\GoodsSkuRequest; use App\Models\Goods; +use App\Models\Log; use App\Models\Log as LogModel; use App\Utils\FormatUtils; use Illuminate\Http\Request; @@ -36,10 +37,20 @@ class GoodsSkusController extends Controller $goods = Goods::query()->filter()->get()->toArray(); $goodsIds = array_column($goods, 'id'); // 状态变更时间查询,日志 - + $ids = []; + if ($request->get('keyword_type', '') && $request->get('keyword_value', '')) { + $ids = Log::query()->where('target_type', 'sku') + ->where('target_field', $request->keyword_type) + ->whereBetween('created_at', explode(' - ', $request->keyword_value)) + ->pluck('sku_id') + ->toArray(); + } $day = FormatUtils::date(); $goodsSkus = GoodsSku::query() ->whereIn('goods_id', $goodsIds) + ->when($ids, function ($query, $ids) { + return $query->whereIn('id', $ids); + }) ->filter() ->with(['goods' => function ($query) { $query->with(['type:id,name', 'brand:id,name']); @@ -133,11 +144,13 @@ class GoodsSkusController extends Controller 'user_id' => $request->user()->id ]; // 成本 - $goodsSku = GoodsSku::query()->where('id', $sku['id'])->first(['id', 'cost']); + $goodsSku = GoodsSku::query()->where('id', $sku['id'])->first(['id', 'cost', 'stock', 'num']); $costLog['target_field'] = 'cost'; $costLog['before_update'] = $goodsSku->cost; $goodsSku->cost = $sku['cost']; $goodsSku->reference_price = $sku['cost'] * 1.5; + $goodsSku->stock += $sku['arrived_today_num']; + $goodsSku->num += $sku['arrived_today_num']; $goodsSku->save(); $costLog['after_update'] = $goodsSku->cost; $logs[] = $costLog; @@ -145,7 +158,7 @@ class GoodsSkusController extends Controller $record = DailyStockRecord::query()->where('sku_id', $sku['id'])->where('day', FormatUtils::date())->first(['id', 'arrived_today_num']); $arrivedLog['target_field'] = 'arrived_today_num'; $arrivedLog['before_update'] = $record->arrived_today_num; - $record->arrived_today_num = $sku['arrived_today_num']; + $record->arrived_today_num += $sku['arrived_today_num']; $record->save(); $arrivedLog['after_update'] = $record->arrived_today_num; $logs[] = $arrivedLog; @@ -207,7 +220,7 @@ class GoodsSkusController extends Controller $update = reset($skus); DB::beginTransaction(); try { - $sku = GoodsSku::query()->where('id', $update['id'])->get(['id', 'two_days_ago_num', 'yesterday_num']); + $sku = GoodsSku::query()->where('id', $update['id'])->get(['id', 'two_days_ago_num', 'yesterday_num', 'num', 'stock']); $record = DailyStockRecord::query() ->where('sku_id', $sku->id) ->where('day', FormatUtils::date()) @@ -215,10 +228,12 @@ class GoodsSkusController extends Controller $this->setBeforeUpdate([ 'two_days_ago_num' => $sku->two_days_ago_num, 'yesterday_num' => $sku->yesterday_num, + 'num' => $sku->num, 'arrived_today_num' => $record->arrived_today_num, ]); $sku->two_days_ago_num = $update['two_days_ago_num']; - $sku->yesterday_num = $update['two_days_ago_num']; + $sku->yesterday_num = $update['yesterday_num']; + $sku->num = $update['two_days_ago_num'] + $update['yesterday_num'] + $sku->stock; $sku->save(); $record->arrived_today_num = $update['arrived_today_num']; $record->save(); @@ -284,12 +299,21 @@ class GoodsSkusController extends Controller ->where('sku_id', $id) ->where('day', FormatUtils::date()) ->first(['id', 'loss_num']); - $this->log->message = $request->input('reason', ''); + $this->log->message = $request->get('reason'); + $this->setBeforeUpdate($model->loss_num); + $model->loss_num += $request->loss_num; } else { $model = GoodsSku::query()->find($id); + $this->setBeforeUpdate($model->$updateField); + if ('reserve' === $updateField) { + $changeNum = $model->reserve - $request->reserve; + $model->stock += $changeNum; + $model->reserve = $request->reserve; + $model->num += $changeNum; + } else { + $model->$updateField = $request->$updateField; + } } - $this->setBeforeUpdate($model->$updateField); - $model->$updateField = $request->$updateField; $model->save(); $this->setAfterUpdate($model->$updateField); $this->addLog($id, $updateField); From 2dc13086751143861460f057189d8df7cd0a716b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=B8=96=E7=95=8C?= <642747453@qq.com> Date: Thu, 4 Aug 2022 14:25:12 +0800 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20#20220804=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Exports/GoodsSkusExport.php | 75 +++++++++++++++++++ .../Controllers/Goods/GoodsSkusController.php | 8 ++ routes/web.php | 4 + 3 files changed, 87 insertions(+) create mode 100644 app/Exports/GoodsSkusExport.php diff --git a/app/Exports/GoodsSkusExport.php b/app/Exports/GoodsSkusExport.php new file mode 100644 index 0000000..d9316a8 --- /dev/null +++ b/app/Exports/GoodsSkusExport.php @@ -0,0 +1,75 @@ +type = $type; + $this->data = $this->createData(); + } + + /** + * @return \Illuminate\Support\Collection + */ + public function collection() + { + return new Collection($this->data); + } + + private function createData() + { + $headTitle = [ + '商品编码', + '商品名称', + '商品种类', + '商品品牌', + '规格编码', + '规格名称', + '成本', + '库存', + ]; + $inventoryTime = strtotime(date('Y-m-d 07:00:00')); + $ids = Log::query()->where('target_type', 'sku') + ->where('target_field', $this->type) + ->where('created_at', '>', $inventoryTime) + ->pluck('sku_id') + ->toArray(); + $data = GoodsSku::query() + ->when($ids, function ($query, $ids) { + return $query->whereIn('id', $ids); + }) + ->with(['goods' => function ($query) { + $query->with(['type:id,name', 'brand:id,name']); + }]) + ->get() + ->toArray(); + if (empty($data)) { + return [$headTitle]; + } + $bodyData = []; + foreach ($data as $item) { + $arr[0] = $item['goods']['goods_code']; + $arr[1] = $item['goods']['title']; + $arr[2] = $item['goods']['type']['name']; + $arr[3] = $item['goods']['brand']['name']; + $arr[4] = $item['goods']['sku_code']; + $arr[5] = $item['goods']['title']; + $arr[6] = $item['goods']['cost']; + $arr[7] = $item['goods']['stock']; + $bodyData[] = $arr; + } + unset($arr); + return [$headTitle, $bodyData]; + } +} diff --git a/app/Http/Controllers/Goods/GoodsSkusController.php b/app/Http/Controllers/Goods/GoodsSkusController.php index 044d95e..97053f1 100644 --- a/app/Http/Controllers/Goods/GoodsSkusController.php +++ b/app/Http/Controllers/Goods/GoodsSkusController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Goods; +use App\Exports\GoodsSkusExport; use App\Http\Controllers\Controller; use App\Http\Requests\GoodsRequest; use App\Http\Requests\GoodsSkuRequest; @@ -340,4 +341,11 @@ class GoodsSkusController extends Controller return response($this->res, $this->res['httpCode']); } + + public function export(Request $request) + { + $type = $request->get('exportType'); + ob_end_clean(); + return Excel::download(new GoodsSkusExport($type), $type, '.xlsx'); + } } diff --git a/routes/web.php b/routes/web.php index 4f8529e..0af6dd8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,7 @@ name('register'); + +Route::get('goods_skus/export', [GoodsSkusController::class, 'export'])->name('goods_skus.export'); From 6520d8bd6f5485cdd85e7270af61541d1f392a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=B8=96=E7=95=8C?= <642747453@qq.com> Date: Thu, 4 Aug 2022 18:13:00 +0800 Subject: [PATCH 4/4] =?UTF-8?q?feat:=20#20220804=20=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=9D=83=E9=99=90=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Commands/UpdateSuperPermissions.php | 6 +- .../Controllers/Goods/GoodsSkusController.php | 1 - app/Http/Controllers/Menu/MenusController.php | 16 +- .../Permission/PermissionsController.php | 12 +- app/Http/Kernel.php | 1 + app/Http/Middleware/CheckPermissions.php | 38 +++ app/Models/User.php | 5 + config/filesystems.php | 4 + .../2022_07_26_105818_create_logs_table.php | 2 +- database/seeds/PermissionsTableSeeder.php | 18 +- resources/lang/zh-CN/permission.php | 234 ++++++++++++++++++ resources/templates/goods_skus_import.xlsx | Bin 0 -> 10134 bytes routes/api.php | 13 +- routes/web.php | 2 +- 14 files changed, 326 insertions(+), 26 deletions(-) create mode 100644 app/Http/Middleware/CheckPermissions.php create mode 100644 resources/lang/zh-CN/permission.php create mode 100644 resources/templates/goods_skus_import.xlsx diff --git a/app/Console/Commands/UpdateSuperPermissions.php b/app/Console/Commands/UpdateSuperPermissions.php index 637d6f8..c662b0b 100644 --- a/app/Console/Commands/UpdateSuperPermissions.php +++ b/app/Console/Commands/UpdateSuperPermissions.php @@ -2,6 +2,7 @@ namespace App\Console\Commands; +use App\Models\User; use Illuminate\Console\Command; use Spatie\Permission\Models\Permission; use Spatie\Permission\Models\Role; @@ -39,9 +40,12 @@ class UpdateSuperPermissions extends Command */ public function handle() { - $role = Role::query()->where('name', '超级管理员')->find(1); + $roleName = '超级管理员'; + $role = Role::query()->where('name', $roleName)->find(1); $permissions = Permission::query()->get(); $role->syncPermissions($permissions); + $user = User::query()->find(1); + $user->assignRole($role); $this->info('更新成功'); } } diff --git a/app/Http/Controllers/Goods/GoodsSkusController.php b/app/Http/Controllers/Goods/GoodsSkusController.php index 97053f1..e04ad52 100644 --- a/app/Http/Controllers/Goods/GoodsSkusController.php +++ b/app/Http/Controllers/Goods/GoodsSkusController.php @@ -25,7 +25,6 @@ class GoodsSkusController extends Controller { public function __construct(Request $request) { -// $this->middleware(['role:super-admin','permission:publish articles|edit articles']); $this->log = new LogModel([ 'module' => 'goods', 'action' => $request->getMethod(), diff --git a/app/Http/Controllers/Menu/MenusController.php b/app/Http/Controllers/Menu/MenusController.php index ee53406..dd50b68 100644 --- a/app/Http/Controllers/Menu/MenusController.php +++ b/app/Http/Controllers/Menu/MenusController.php @@ -6,6 +6,8 @@ use App\Http\Controllers\Controller; use App\Models\Log as LogModel; use App\Models\Menu; use App\Http\Resources\MenusResource; +use App\Models\User; +use App\Utils\ArrayUtils; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; @@ -22,10 +24,18 @@ class MenusController extends Controller ]); } - public function index() + public function index(Request $request) { - $menus = Menu::query()->get(); - $menus = FormatUtils::formatTreeData($menus, 0); + $permissions = $request->user()->getPermissionsViaRoles()->toArray(); + $permissions = array_column($permissions, 'name'); + $menus = Menu::query()->get()->toArray(); + $hasPermissionMenus = []; + foreach ($menus as $menu) { + if (in_array($menu['code'], $permissions, true)) { + $hasPermissionMenus[] = $menu; + } + } + $menus = FormatUtils::formatTreeData($hasPermissionMenus, 0); return MenusResource::collection($menus); } diff --git a/app/Http/Controllers/Permission/PermissionsController.php b/app/Http/Controllers/Permission/PermissionsController.php index 7507489..112f82b 100644 --- a/app/Http/Controllers/Permission/PermissionsController.php +++ b/app/Http/Controllers/Permission/PermissionsController.php @@ -4,6 +4,8 @@ namespace App\Http\Controllers\Permission; use App\Http\Controllers\Controller; use App\Models\Log as LogModel; +use App\Utils\ArrayUtils; +use App\Utils\FormatUtils; use Spatie\Permission\Models\Permission; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; @@ -23,9 +25,15 @@ class PermissionsController extends Controller public function index() { - $permissions = Permission::query()->get(); + $permissions = Permission::query()->get()->toArray(); + $permissions = ArrayUtils::index($permissions, 'name'); + $routes = include(resource_path('lang/zh-CN/permission.php')); + foreach ($routes as $key => &$route) { + $route['id'] = $permissions[$key]['id']; + } + $routes = FormatUtils::formatTreeData($routes, 0); - return PermissionsResource::collection($permissions); + return PermissionsResource::collection($routes); } public function store(Request $request) diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index b1c73d6..cf52c70 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -63,6 +63,7 @@ class Kernel extends HttpKernel 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class, 'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class, + 'check.permissions' => \App\Http\Middleware\CheckPermissions::class, ]; /** diff --git a/app/Http/Middleware/CheckPermissions.php b/app/Http/Middleware/CheckPermissions.php new file mode 100644 index 0000000..b8f8ae4 --- /dev/null +++ b/app/Http/Middleware/CheckPermissions.php @@ -0,0 +1,38 @@ +user()->getPermissionsViaRoles()->toArray(); + $permissions = array_column($permissions, 'name'); + if (in_array($currentRouteName, $permissions, true)) { + return $next($request); + } + } + + $res = [ + 'httpCode' => 403, + 'errorCode' => 403403, + 'errorMessage' => '您没有使用此功能的权限', + ]; + return response($res, 403); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index b6d8d5e..88194f2 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -43,4 +43,9 @@ class User extends Authenticatable { $this->attributes['password'] = Hash::make($value); } + + public function isRoot() + { + return $this->name === 'erpAdmin'; + } } diff --git a/config/filesystems.php b/config/filesystems.php index 9df9941..b2f1d2f 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -76,6 +76,10 @@ return [ 'isCName' => false, // 是否使用自定义域名,true: 则Storage.url()会使用自定义的cdn或域名生成文件url, false: 则使用外部节点生成url 'debug' => true ], + 'root' => [ + 'driver' => 'local', + 'root' => '/' + ] ], ]; diff --git a/database/migrations/2022_07_26_105818_create_logs_table.php b/database/migrations/2022_07_26_105818_create_logs_table.php index 2a30d1c..da9c3c2 100644 --- a/database/migrations/2022_07_26_105818_create_logs_table.php +++ b/database/migrations/2022_07_26_105818_create_logs_table.php @@ -24,7 +24,7 @@ class CreateLogsTable extends Migration $table->text('after_update')->nullable()->comment('更新后数据'); $table->text('message')->nullable()->comment('备注信息'); $table->bigInteger('user_id')->comment('操作人id'); - $table->index('target_type', 'target_id', 'target_field'); + $table->index(['target_type', 'target_id', 'target_field']); $table->timestamps(); }); } diff --git a/database/seeds/PermissionsTableSeeder.php b/database/seeds/PermissionsTableSeeder.php index 0df8a79..c0aa0f7 100644 --- a/database/seeds/PermissionsTableSeeder.php +++ b/database/seeds/PermissionsTableSeeder.php @@ -12,17 +12,11 @@ class PermissionsTableSeeder extends Seeder */ public function run() { - DB::table('permissions')->insert([ - ['name' => 'GOODS_MANAGE', 'guard_name' => 'api'], - ['name' => 'GOODS_LIST', 'guard_name' => 'api'], - ['name' => 'GOODS_TYPE', 'guard_name' => 'api'], - ['name' => 'GOODS_BRAND', 'guard_name' => 'api'], - ['name' => 'SHOP_MANAGE', 'guard_name' => 'api'], - ['name' => 'USER_MANAGE', 'guard_name' => 'api'], - ['name' => 'SYSTEM_MANAGE', 'guard_name' => 'api'], - ['name' => 'ROLE_MANAGE', 'guard_name' => 'api'], - ['name' => 'PERMISSION_MANAGE', 'guard_name' => 'api'], - ['name' => 'SYSTEM_LOG', 'guard_name' => 'api'], - ]); + $routes = include(resource_path('lang/zh-CN/permission.php')); + $data = []; + foreach ($routes as $key => $route) { + $data[] = ['name' => $key, 'guard_name' => 'api']; + } + DB::table('permissions')->insert($data); } } diff --git a/resources/lang/zh-CN/permission.php b/resources/lang/zh-CN/permission.php new file mode 100644 index 0000000..7493111 --- /dev/null +++ b/resources/lang/zh-CN/permission.php @@ -0,0 +1,234 @@ + [ + 'id' => 1, + 'name' => '商品管理', + 'parent_id' => 0, + ], + 'GOODS_LIST' => [ + 'id' => 2, + 'name' => '商品列表', + 'parent_id' => 1, + ], + 'goods.index' => [ + 'id' => 20, + 'name' => '商品列表', + 'parent_id' => 2, + ], + 'goods.store' => [ + 'id' => 21, + 'name' => '新增商品', + 'parent_id' => 2, + ], + 'goods_skus.index' => [ + 'id' => 22, + 'name' => '规格列表', + 'parent_id' => 2, + ], + 'goods_skus.store' => [ + 'id' => 23, + 'name' => '新增规格', + 'parent_id' => 2, + ], + 'goods_skus.show' => [ + 'id' => 24, + 'name' => '规格查看', + 'parent_id' => 2, + ], + 'goods_skus.udpate' => [ + 'id' => 25, + 'name' => '规格更新', + 'parent_id' => 2, + ], + 'goods_sku.batch_update' => [ + 'id' => 26, + 'name' => '上新/盘点', + 'parent_id' => 2, + ], + 'goods_sku.single_update' => [ + 'id' => 27, + 'name' => '字段更新', + 'parent_id' => 2, + ], + 'GOODS_TYPE' => [ + 'id' => 3, + 'name' => '商品种类', + 'parent_id' => 1, + ], + 'goods_types.index' => [ + 'id' => 30, + 'name' => '列表', + 'parent_id' => 3, + ], + 'goods_types.store' => [ + 'id' => 31, + 'name' => '新增', + 'parent_id' => 3, + ], + 'goods_types.show' => [ + 'id' => 32, + 'name' => '查看', + 'parent_id' => 3, + ], + 'goods_types.update' => [ + 'id' => 33, + 'name' => '更新', + 'parent_id' => 3, + ], + 'goods_types.destroy' => [ + 'id' => 34, + 'name' => '删除', + 'parent_id' => 3, + ], + 'GOODS_BRAND' => [ + 'id' => 4, + 'name' => '商品品牌', + 'parent_id' => 1, + ], + 'goods_brands.index' => [ + 'id' => 40, + 'name' => '列表', + 'parent_id' => 4, + ], + 'goods_brands.store' => [ + 'id' => 41, + 'name' => '新增', + 'parent_id' => 4, + ], + 'goods_brands.show' => [ + 'id' => 42, + 'name' => '查看', + 'parent_id' => 4, + ], + 'goods_brands.update' => [ + 'id' => 43, + 'name' => '更新', + 'parent_id' => 4, + ], + 'goods_brands.destroy' => [ + 'id' => 44, + 'name' => '删除', + 'parent_id' => 4, + ], + // 店铺管理 + 'SHOP_MANAGE' => [ + 'id' => 5, + 'name' => '店铺管理', + 'parent_id' => 0, + ], + 'shops.index' => [ + 'id' => 50, + 'name' => '列表', + 'parent_id' => 5, + ], + 'shops.store' => [ + 'id' => 51, + 'name' => '新增', + 'parent_id' => 5, + ], + 'shops.show' => [ + 'id' => 52, + 'name' => '查看', + 'parent_id' => 5, + ], + 'shops.update' => [ + 'id' => 53, + 'name' => '更新', + 'parent_id' => 5, + ], + 'shops.destroy' => [ + 'id' => 54, + 'name' => '删除', + 'parent_id' => 5, + ], + // 用户管理 + 'USER_MANAGE' => [ + 'id' => 6, + 'name' => '用户管理', + 'parent_id' => 0, + ], + 'user.index' => [ + 'id' => 60, + 'name' => '列表', + 'parent_id' => 6, + ], + 'user.store' => [ + 'id' => 61, + 'name' => '新增', + 'parent_id' => 6, + ], + 'user.show' => [ + 'id' => 62, + 'name' => '查看', + 'parent_id' => 6, + ], + 'user.update' => [ + 'id' => 63, + 'name' => '更新', + 'parent_id' => 6, + ], + 'user.destroy' => [ + 'id' => 64, + 'name' => '删除', + 'parent_id' => 6, + ], + // 系统管理 + 'SYSTEM_MANAGE' => [ + 'id' => 7, + 'name' => '系统管理', + 'parent_id' => 0, + ], + 'ROLE_MANAGE' => [ + 'id' => 8, + 'name' => '角色管理', + 'parent_id' => 7, + ], + 'role.index' => [ + 'id' => 80, + 'name' => '列表', + 'parent_id' => 8, + ], + 'role.store' => [ + 'id' => 81, + 'name' => '新增', + 'parent_id' => 8, + ], + 'role.show' => [ + 'id' => 82, + 'name' => '查看', + 'parent_id' => 8, + ], + 'role.update' => [ + 'id' => 83, + 'name' => '更新', + 'parent_id' => 8, + ], + 'role.permission' => [ + 'id' => 84, + 'name' => '设置权限', + 'parent_id' => 8, + ], + 'PERMISSION_MANAGE' => [ + 'id' => 9, + 'name' => '权限管理', + 'parent_id' => 7, + ], + 'permissions.index' => [ + 'id' => 90, + 'name' => '列表', + 'parent_id' => 9, + ], + // 系统日志 + 'SYSTEM_LOG' => [ + 'id' => 10, + 'name' => '系统日志', + 'parent_id' => 0, + ], + 'logs.index' => [ + 'id' => 100, + 'name' => '列表', + 'parent_id' => 10, + ], +]; diff --git a/resources/templates/goods_skus_import.xlsx b/resources/templates/goods_skus_import.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..16d6c963a0bdbbd2c24f7e0173f6c6857bfe9ae4 GIT binary patch literal 10134 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 literal 0 HcmV?d00001 diff --git a/routes/api.php b/routes/api.php index 5c5adc8..4a047f0 100644 --- a/routes/api.php +++ b/routes/api.php @@ -16,7 +16,7 @@ use App\Http\Controllers\Goods\GoodsSkusController; | is assigned the "api" middleware group. Enjoy building your API! | */ -Route::middleware('auth:api')->group(function () { +Route::middleware(['auth:api', 'check.permissions'])->group(function () { // 用户 Route::resource('users', 'User\UsersController', ['only' => ['index', 'store', 'show', 'update', 'destroy']]); // 商品种类 @@ -33,17 +33,20 @@ Route::middleware('auth:api')->group(function () { Route::patch('single/goods_skus/{id}', [GoodsSkusController::class, 'updateField'])->name('goods_sku.single_update'); // 店铺 Route::resource('shops', 'Shop\ShopsController', ['only' => ['index', 'store', 'show', 'update', 'destroy']]); - Route::get('shop_platforms', [ShopsController::class, 'getPlatList'])->name('plat.list'); // 角色 Route::resource('roles', 'Role\RolesController', ['only' => ['index', 'store', 'show', 'update']]); Route::post('roles/{id}/permissions', [RolesController::class, 'addPermissions'])->name('role.permission'); // 权限 - Route::resource('permissions', 'Permission\PermissionsController', ['only' => ['index', 'store', 'show', 'update', 'destroy']]); - // 菜单 - Route::resource('menus', 'Menu\MenusController', ['only' => ['index', + Route::resource('permissions', 'Permission\PermissionsController', ['only' => ['index', // 'store', 'show', 'update', 'destroy' ]]); Route::post('upload', [UploadController::class, 'store'])->name('upload.file'); }); Route::post('/auth/login', [LoginController::class, 'login'])->name('auth.login'); + +// 菜单 +Route::resource('menus', 'Menu\MenusController', ['only' => ['index', +// 'store', 'show', 'update', 'destroy' +]])->middleware('auth:api'); +Route::get('shop_platforms', [ShopsController::class, 'getPlatList'])->name('plat.list')->middleware('auth:api'); diff --git a/routes/web.php b/routes/web.php index 0af6dd8..b342af8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -29,4 +29,4 @@ Route::get('/register', function () { return view('welcome'); })->name('register'); -Route::get('goods_skus/export', [GoodsSkusController::class, 'export'])->name('goods_skus.export'); +Route::get('goods_skus/export', [GoodsSkusController::class, 'export'])->name('goods_skus.export')->middleware('check.permissions');