diff --git a/app/Exports/AdminVipListExport.php b/app/Exports/AdminVipListExport.php index 6892cc5..3d3e981 100644 --- a/app/Exports/AdminVipListExport.php +++ b/app/Exports/AdminVipListExport.php @@ -2,17 +2,35 @@ namespace App\Exports; +use App\Models\AdminUsers; use App\Models\AdminVipList; use Illuminate\Database\Eloquent\Collection; use Maatwebsite\Excel\Concerns\FromCollection; +use Maatwebsite\Excel\Concerns\WithHeadings; -class AdminVipListExport implements FromCollection +class AdminVipListExport implements FromCollection, WithHeadings { /** * @return Collection */ public function collection(): Collection { - return AdminVipList::all(); + return AdminVipList::all()->each(function ($item) { + $item['user_id'] = AdminUsers::getUsername( + $item['user_id'] + ); + }); + } + + /** + * @return array + */ + public function headings(): array + { + return [ + __('exports.global.index'), + __('exports.vip_list.license'), + __('exports.global.admin') + ]; } } diff --git a/app/Exports/AdminVipListImportTemplateExport.php b/app/Exports/AdminVipListImportTemplateExport.php index 1d9491b..f85f220 100644 --- a/app/Exports/AdminVipListImportTemplateExport.php +++ b/app/Exports/AdminVipListImportTemplateExport.php @@ -2,19 +2,16 @@ namespace App\Exports; -use Maatwebsite\Excel\Concerns\FromCollection; +use Maatwebsite\Excel\Concerns\FromArray; -class AdminVipListImportTemplateExport implements FromCollection +class AdminVipListImportTemplateExport implements FromArray { - /** - * @return array - */ - public function collection(): array + public function array(): array { return [ [__('exports.vip_list.license')], - ['粤B88888'] + ['测A88888'] ]; } } diff --git a/app/Http/Controllers/Admin/VipListController.php b/app/Http/Controllers/Admin/VipListController.php index 3da2bd2..35830be 100644 --- a/app/Http/Controllers/Admin/VipListController.php +++ b/app/Http/Controllers/Admin/VipListController.php @@ -17,15 +17,11 @@ use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\ValidationException; use Maatwebsite\Excel\Facades\Excel; +use Psr\SimpleCache\InvalidArgumentException; use Symfony\Component\HttpFoundation\BinaryFileResponse; class VipListController extends BaseController { - /** - * @var ApiResponseService - */ - protected ApiResponseService $responseService; - /** * @var AdminVipListService */ @@ -39,7 +35,7 @@ class VipListController extends BaseController ApiResponseService $responseService, AdminVipListService $vipListService ) { - $this->responseService = $responseService; + parent::__construct($responseService); $this->vipListService = $vipListService; } @@ -66,6 +62,7 @@ class VipListController extends BaseController $item['username'] = AdminUsers::getUsername( $item['user_id'] ); + unset($item['user_id']); return $item; } ); @@ -161,6 +158,23 @@ class VipListController extends BaseController } } + /** + * @return JsonResponse + * @throws InvalidArgumentException + */ + public function rule(): JsonResponse + { + try { + return $this->responseService->success( + $this->methodShow('list_vip') + ); + } catch (Exception $e) { + return $this->responseService->systemError( + __('exception.get_data_failed') . ':' . $e->getMessage() + ); + } + } + /** * @param Request $request * @return JsonResponse @@ -173,7 +187,7 @@ class VipListController extends BaseController $request->validate([ 'file' => 'required|mimes:xlsx,xls,csv|max:2048' // 限制文件类型和大小 ]); - $validator = Validator::make($request->file('file'), [ + $validator = Validator::make($request->all(), [ 'file' => 'required|mimes:xlsx,xls,csv|max:2048' ], [ 'file.required' => __('validation.admin_list_vip.file_empty'), @@ -201,7 +215,7 @@ class VipListController extends BaseController // 5. (可选)导入完成后删除临时文件 Storage::delete($path); - return $this->responseService->systemError( + return $this->responseService->success( __('controller.import.success') ); } catch (ValidationException $e) { @@ -247,7 +261,7 @@ class VipListController extends BaseController { return Excel::download( new AdminVipListImportTemplateExport(), - __('exports.vip_list.import_template') . '.xlsx' + __('exports.vip_list.import_template') . time() .'.xlsx' ); } @@ -258,7 +272,7 @@ class VipListController extends BaseController { return Excel::download( new AdminVipListExport(), - __('exports.vip_list.list') . '.xlsx' + __('exports.vip_list.list') . time() . '.xlsx' ); } } diff --git a/app/Imports/AdminVipListImport.php b/app/Imports/AdminVipListImport.php index bb02dc6..edb8786 100644 --- a/app/Imports/AdminVipListImport.php +++ b/app/Imports/AdminVipListImport.php @@ -15,10 +15,18 @@ class AdminVipListImport implements ToModel, WithHeadingRow */ public function model(array $row): AdminVipList { - return new AdminVipList([ - 'license' => $row['license'], - 'user_id' => Auth::guard('sanctum')->user()['id'], - 'created_at' => get_datetime() - ]); + foreach ($row as $license) { + if (!AdminVipList::query()->where('license', $license) + ->exists() + ) { + return new AdminVipList([ + 'license' => $license, + 'user_id' => Auth::guard('sanctum')->user()['id'], + 'created_at' => get_datetime() + ]); + } + break; + } + return new AdminVipList(); } } diff --git a/resources/lang/zh-CN/exports.php b/resources/lang/zh-CN/exports.php index b48acb6..2e64228 100644 --- a/resources/lang/zh-CN/exports.php +++ b/resources/lang/zh-CN/exports.php @@ -4,5 +4,9 @@ return [ 'license' => '车牌号码', 'import_template' => 'VIP名单导入模板', 'list' => 'VIP名单' + ], + 'global' => [ + 'index' => '序号', + 'admin' => '操作员' ] ]; diff --git a/routes/admin/api.php b/routes/admin/api.php index 2517f47..de26e8b 100644 --- a/routes/admin/api.php +++ b/routes/admin/api.php @@ -41,11 +41,9 @@ Route::group(['prefix' => 'admin'], function () { Route::get('/space_attr/rule', [ParkingSpaceAttributesController::class, 'rule']); // VIP名单 - Route::apiResource('listVip', VipListController::class); - Route::post('list_vip/rule', [VipListController::class, 'rule']); - Route::post('list_vip/import', [VipListController::class, 'import']); - Route::get('list_vip/import_template', [VipListController::class, 'importTemplate']); - Route::get('list_vip/export', [VipListController::class, 'export']); + Route::apiResource('vipList', VipListController::class); + Route::get('vip_list/rule', [VipListController::class, 'rule']); + Route::post('vip_list/import', [VipListController::class, 'import']); // 系统日志 Route::get('/operationLog/index', [OperationLogController::class, 'index']); @@ -72,4 +70,7 @@ Route::group(['prefix' => 'admin'], function () { Route::get('/users/edit/{id}', [UserController::class, 'edit']); Route::get('/user/rule', [UserController::class, 'rule']); }); + // 导出 + Route::get('vip_list/import_template', [VipListController::class, 'importTemplate']); + Route::get('vip_list/export', [VipListController::class, 'export']); });