From 49a0ac698931a10d75f9218161a0076d0b0c984d Mon Sep 17 00:00:00 2001 From: Jing Li Date: Thu, 4 Apr 2024 14:40:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=A1=E6=89=B9=E6=93=8D?= =?UTF-8?q?=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StoreMasterCommissionController.php | 3 +- .../Controllers/System/WorkflowController.php | 40 ++++++++++++++++--- app/Admin/routes.php | 1 + app/Traits/HasCheckActions.php | 33 +++++++++++++-- 4 files changed, 67 insertions(+), 10 deletions(-) diff --git a/app/Admin/Controllers/Finance/StoreMasterCommissionController.php b/app/Admin/Controllers/Finance/StoreMasterCommissionController.php index b71e0e5..75e5b61 100644 --- a/app/Admin/Controllers/Finance/StoreMasterCommissionController.php +++ b/app/Admin/Controllers/Finance/StoreMasterCommissionController.php @@ -62,8 +62,7 @@ class StoreMasterCommissionController extends AdminController ->method('post') ->data(['id' => '${workflow.id}']) ), - $this->succesAction(), - $this->failAction(), + $this->approveAction(), $this->cancelAction(), $this->rowEditTypeButton('drawer', 'lg') ->visible(Admin::user()->can('admin.finance.store_master_commissions.update')) diff --git a/app/Admin/Controllers/System/WorkflowController.php b/app/Admin/Controllers/System/WorkflowController.php index 979c97b..889df34 100644 --- a/app/Admin/Controllers/System/WorkflowController.php +++ b/app/Admin/Controllers/System/WorkflowController.php @@ -5,14 +5,16 @@ namespace App\Admin\Controllers\System; use App\Admin\Controllers\AdminController; use App\Admin\Services\WorkFlowService; use App\Enums\CheckType; -use App\Models\{Employee, WorkflowLog, WorkflowCheck}; use App\Models\Keyword; +use App\Models\{Employee, WorkflowLog, WorkflowCheck}; +use Illuminate\Database\Eloquent\Relations\Relation; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Validator; +use Illuminate\Validation\Rule; +use Slowlyo\OwlAdmin\Admin; use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\Page; -use Illuminate\Http\Request; -use Slowlyo\OwlAdmin\Admin; -use Illuminate\Support\Facades\DB; -use Illuminate\Database\Eloquent\Relations\Relation; /** * 审核流程管理 @@ -121,6 +123,34 @@ class WorkflowController extends AdminController } } + /** + * 审批 + */ + public function approve(Request $request) + { + $validator = Validator::make( + data: $request->input(), + rules: [ + 'approval_results' => ['bail', 'required', Rule::in([1, 2])], + 'remarks' => ['bail', 'required_if:approval_results,2', 'string'], + ], + attributes: [ + 'approval_results' => '审核结果', + 'remarks' => '拒绝原因', + ], + ); + + if ($validator->fails()) { + admin_abort($validator->errors()->first()); + } + + if ($request->input('approval_results') == 1) { + return $this->success($request); + } + + return $this->fail($request); + } + public function cancel(Request $request) { $model = WorkflowCheck::findOrFail($request->input('id')); diff --git a/app/Admin/routes.php b/app/Admin/routes.php index e518e9c..2258fdc 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -193,6 +193,7 @@ Route::group([ $router->get('keywords/tree-list', [KeywordController::class, 'getTreeList'])->name('api.keywords.tree-list'); $router->post('workflow/apply', [WorkflowController::class, 'apply']); + $router->post('workflow/approve', [WorkflowController::class, 'approve']); $router->post('workflow/cancel', [WorkflowController::class, 'cancel']); $router->post('workflow/success', [WorkflowController::class, 'success']); $router->post('workflow/fail', [WorkflowController::class, 'fail']); diff --git a/app/Traits/HasCheckActions.php b/app/Traits/HasCheckActions.php index 2ef8a94..2cd0d94 100644 --- a/app/Traits/HasCheckActions.php +++ b/app/Traits/HasCheckActions.php @@ -2,7 +2,8 @@ namespace App\Traits; -use App\Enums\{CheckStatus}; +use App\Enums\CheckStatus; +use Slowlyo\OwlAdmin\Renderers\DrawerAction; trait HasCheckActions { @@ -20,6 +21,32 @@ trait HasCheckActions ->visibleOn('${OR(workflow.check_status == '.CheckStatus::None->value.', workflow.check_status == '.CheckStatus::Cancel->value.', workflow.check_status == '.CheckStatus::Fail->value.')}'); } + /** + * 审批操作 + */ + public function approveAction(): DrawerAction + { + return amis()->DrawerAction()->icon('fa fa-check-square')->label('审核')->level('link')->drawer( + amis()->Drawer()->title('审核')->body([ + amis()->Form()->title('') + ->api('post:'.admin_url('api/workflow/approve')) + ->body([ + amis()->HiddenControl()->name('id')->value('${workflow.id}'), + amis()->RadiosControl('approval_results', '审核结果') + ->options([ + ['label' => '通过', 'value' => 1], + ['label' => '拒绝', 'value' => 2], + ]) + ->selectFirst() + ->required(), + amis()->TextareaControl('remarks', '拒绝原因') + ->visibleOn('${approval_results == 2}') + ->required() + ->minRows(15), + ]), + ])->size('lg') + )->visibleOn('${workflow.check_status == '.CheckStatus::Processing->value.'}'); + } public function cancelAction() { @@ -40,7 +67,7 @@ trait HasCheckActions ->AjaxAction() ->label('审核通过') ->level('link') - ->api('post:' . admin_url('api/workflow/success?id=${id}')) + ->api('post:' . admin_url('api/workflow/success?id=${workflow.id}')) ->confirmText(__('admin.confirm')) ->visibleOn('${workflow.check_status == '.CheckStatus::Processing->value.'}'); } @@ -53,7 +80,7 @@ trait HasCheckActions ->level('link') ->dialog(amisMake()->Dialog()->title('审核不通过')->body( amisMake()->Form()->title('')->api('post:'.admin_url('api/workflow/fail'))->body([ - amisMake()->HiddenControl()->name('id')->value('${id}'), + amisMake()->HiddenControl()->name('id')->value('${workflow.id}'), amisMake()->TextControl()->name('remarks')->label(__('workflow_log.remarks'))->required(), ]) ))