diff --git a/app/Admin/Controllers/AgreementController.php b/app/Admin/Controllers/AgreementController.php new file mode 100644 index 0000000..f547524 --- /dev/null +++ b/app/Admin/Controllers/AgreementController.php @@ -0,0 +1,98 @@ +baseCRUD() + ->tableLayout('fixed') + ->headerToolbar([ + $this->createTypeButton('drawer', 'xl')->visible($user->can('admin.agreement.create')), + ...$this->baseHeaderToolBar(), + ]) + ->bulkActions([]) + ->columns([ + amisMake()->TableColumn()->name('id')->label(__('agreement.id')), + amisMake()->TableColumn()->name('name')->label(__('agreement.name')), + amisMake()->TableColumn()->name('employee.name')->label(__('agreement.employee_id')), + amisMake()->TableColumn()->name('created_at')->label(__('agreement.created_at')), + amisMake()->Operation()->label(__('admin.actions'))->buttons([ + $this->rowShowTypeButton('drawer', 'xl')->visible($user->can('admin.agreement.view')), + $this->rowEditTypeButton('drawer', 'xl')->visible($user->can('admin.agreement.update')), + $this->rowDeleteButton()->visible($user->can('admin.agreement.delete')), + amisMake()->AjaxAction() + ->level('link') + ->label('打包下载') + ->api('post:'.admin_url('agreement/download?id=${id}')) + ->visible($user->can('admin.agreement.download')), + ]), + ]); + + return $this->baseList($crud); + } + + public function form(): Form + { + return $this->baseForm()->body([ + amisMake()->TextControl()->name('name')->label(__('agreement.name'))->required(), + amisMake()->SelectControl()->name('employee_id')->label(__('agreement.employee_id')) + ->source(admin_url('api/employees?_all=1&store_id_gt=0&employee_status='.EmployeeStatus::Online->value)) + ->labelField('name') + ->valueField('id') + ->searchable() + ->required(), + amisMake()->ImageControl()->name('images')->label(__('agreement.images')) + ->multiple() + ->draggable() + ->joinValues(false), + amisMake()->TextControl()->name('remarks')->label(__('agreement.remarks')), + ]); + } + + public function detail(): Form + { + return $this->baseDetail()->title('')->body(amisMake()->Property()->items([ + ['label' => __('agreement.name'), 'content' => '${name}'], + ['label' => __('agreement.employee_id'), 'content' => '${employee.name}'], + ['label' => __('agreement.created_at'), 'content' => '${created_at}'], + ['label' => __('agreement.remarks'), 'content' => '${remarks}', 'span' => 3], + ['label' => __('agreement.images'), 'content' => amisMake()->Images()->name('images')->enlargeAble(), 'span' => 3], + ])); + } + + public function download(Request $request) + { + $id = $request->input('id'); + $images = Agreement::whereIn('id', is_array($id) ? $id : explode(',', $id))->pluck('images'); + $list = Arr::flatten($images); + $baseUrl = Storage::url(''); + $zip = new \ZipArchive(); + $filename = time().'.zip'; + $zip->open($filename, \ZipArchive::CREATE | \ZipArchive::OVERWRITE); + foreach($list as $item) { + $path = str_replace($baseUrl, '', $item); + $info = pathinfo($path); + $zip->addFile(Storage::path($path), data_get($info, 'basename')); + } + $zip->close(); + return response()->download($filename)->deleteFileAfterSend(); + } +} diff --git a/app/Admin/Filters/AgreementFilter.php b/app/Admin/Filters/AgreementFilter.php new file mode 100644 index 0000000..fc97903 --- /dev/null +++ b/app/Admin/Filters/AgreementFilter.php @@ -0,0 +1,35 @@ + [ + 'employee_name' => 'name', + 'employee_search' => 'search', + ], + 'invitor' => [ + 'invitor_name' => 'name', + 'invitor_search' => 'search', + ], + ]; + + public function employeeId($key) + { + $this->where('employee_id', $key); + } + + public function dateRange($dates) + { + $dates = explode(',', $dates); + $start = Carbon::createFromTimestamp(data_get($dates, 0, time()))->startOfDay(); + $end = Carbon::createFromTimestamp(data_get($dates, 1, time()))->endOfDay(); + $this->whereBetween('created_at', [$start, $end]); + } +} diff --git a/app/Admin/Services/AgreementService.php b/app/Admin/Services/AgreementService.php new file mode 100644 index 0000000..4978bcc --- /dev/null +++ b/app/Admin/Services/AgreementService.php @@ -0,0 +1,46 @@ + ['required'], + 'name' => ['required'], + ]; + $updateRules = []; + $validator = Validator::make($data, $model ? $updateRules : $createRules); + if ($validator->fails()) { + return $validator->errors()->first(); + } + + return true; + } +} diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 3e75162..90577f8 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -27,6 +27,7 @@ use App\Admin\Controllers\System\AdminRoleController; use App\Admin\Controllers\System\AdminUserController; use App\Admin\Controllers\System\KeywordController; use App\Admin\Controllers\System\WorkflowController; +use App\Admin\Controllers\AgreementController; use Illuminate\Routing\Router; use Illuminate\Support\Facades\Route; @@ -180,6 +181,9 @@ Route::group([ $router->resource('ads', \App\Admin\Controllers\AdController::class); + $router->post('agreement/download', [AgreementController::class, 'download'])->name('agreement.download'); + $router->resource('agreement', AgreementController::class); + //修改上传 $router->post('upload_file', [\App\Admin\Controllers\IndexController::class, 'uploadFile']); $router->post('upload_image', [\App\Admin\Controllers\IndexController::class, 'uploadImage']); diff --git a/app/Models/Agreement.php b/app/Models/Agreement.php new file mode 100644 index 0000000..374cc50 --- /dev/null +++ b/app/Models/Agreement.php @@ -0,0 +1,32 @@ + 'json', + ]; + + public function modelFilter() + { + return \App\Admin\Filters\AgreementFilter::class; + } + + public function employee() + { + return $this->belongsTo(Employee::class, 'employee_id'); + } +} diff --git a/database/migrations/2024_04_07_143117_create_agreements_table.php b/database/migrations/2024_04_07_143117_create_agreements_table.php new file mode 100644 index 0000000..467eaaf --- /dev/null +++ b/database/migrations/2024_04_07_143117_create_agreements_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('name')->comment('名称'); + $table->foreignId('employee_id')->comment('上传人'); + $table->json('images')->nullable()->comment('图片列表'); + $table->string('remarks')->nullable()->comment('备注'); + $table->timestamps(); + + $table->comment('合同'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('agreements'); + } +}; diff --git a/database/seeders/AdminPermissionSeeder.php b/database/seeders/AdminPermissionSeeder.php index 465ac7b..da534d2 100644 --- a/database/seeders/AdminPermissionSeeder.php +++ b/database/seeders/AdminPermissionSeeder.php @@ -250,6 +250,16 @@ class AdminPermissionSeeder extends Seeder ], ], + 'agreement' => [ + 'name' => '合同管理', + 'icon' => '', + 'uri' => '/agreement', + 'resource' => true, + 'children' => [ + 'download' => '打包下载', + ] + ], + /* |-------------------------------------------------------------------------- | 系统管理 diff --git a/lang/zh_CN/agreement.php b/lang/zh_CN/agreement.php new file mode 100644 index 0000000..a794b67 --- /dev/null +++ b/lang/zh_CN/agreement.php @@ -0,0 +1,12 @@ + 'ID', + 'created_at' => '创建时间', + 'updated_at' => '更新时间', + + 'name' => '名称', + 'employee_id' => '上传人', + 'images' => '合同图片', + 'remarks' => '备注', +];