From 9b9d3813f62fa88a75183025ccccc3361f4671ea Mon Sep 17 00:00:00 2001 From: Jing Li Date: Wed, 24 Apr 2024 20:39:56 +0800 Subject: [PATCH] Update --- app/Admin/Controllers/Plan/PlanController.php | 6 +-- .../Controllers/Api/WorkflowController.php | 53 +++++++++++++++---- 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/app/Admin/Controllers/Plan/PlanController.php b/app/Admin/Controllers/Plan/PlanController.php index e188a07..779ec20 100644 --- a/app/Admin/Controllers/Plan/PlanController.php +++ b/app/Admin/Controllers/Plan/PlanController.php @@ -209,7 +209,7 @@ class PlanController extends AdminController amis()->TableColumn('completed_at', __('plan.task.completed_at')), amis()->TableColumn('created_at', __('plan.task.created_at')), ]) - ->visibleOn('${plan_status == '.PlanStatus::Published->value.' and planable_type == "'.$planableTypeLedger.'"}'), + ->visibleOn('${plan_status == '.PlanStatus::Published->value.' && planable_type == "'.$planableTypeLedger.'"}'), // 业绩指标 amis()->CRUDTable() @@ -236,7 +236,7 @@ class PlanController extends AdminController ->visible(Admin::user()->can('admin.plan.plans.task_delete')), ]), ]) - ->visibleOn('${plan_status == '.PlanStatus::Published->value.' and planable_type == "'.$planableTypePerformance.'"}'), + ->visibleOn('${plan_status == '.PlanStatus::Published->value.' && planable_type == "'.$planableTypePerformance.'"}'), // 清洁卫生 amis()->CRUDTable() @@ -261,7 +261,7 @@ class PlanController extends AdminController ->visible(Admin::user()->can('admin.plan.plans.task_delete')), ]), ]) - ->visibleOn('${plan_status == '.PlanStatus::Published->value.' and planable_type == "'.$planableTypeHygiene.'"}'), + ->visibleOn('${plan_status == '.PlanStatus::Published->value.' && planable_type == "'.$planableTypeHygiene.'"}'), ]); } diff --git a/app/Http/Controllers/Api/WorkflowController.php b/app/Http/Controllers/Api/WorkflowController.php index 80a5ef0..92809ab 100644 --- a/app/Http/Controllers/Api/WorkflowController.php +++ b/app/Http/Controllers/Api/WorkflowController.php @@ -2,17 +2,21 @@ namespace App\Http\Controllers\Api; -use Illuminate\Http\{Request, Response}; -use Illuminate\Database\Eloquent\Relations\Relation; -use App\Http\Resources\WorkflowLogResource; -use App\Enums\CheckStatus; -use App\Models\WorkflowCheck; -use Illuminate\Support\Facades\DB; -use Illuminate\Validation\Rule; use App\Admin\Services\WorkFlowService; +use App\Enums\CheckStatus; use App\Exceptions\RuntimeException; use App\Http\Resources\TaskResource; +use App\Http\Resources\WorkflowLogResource; +use App\Models\Task; use App\Models\TaskHygiene; +use App\Models\TaskLedger; +use App\Models\WorkflowCheck; +use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Relations\MorphTo; +use Illuminate\Database\Eloquent\Relations\Relation; +use Illuminate\Http\{Request, Response}; +use Illuminate\Support\Facades\DB; +use Illuminate\Validation\Rule; class WorkflowController extends Controller { @@ -34,7 +38,7 @@ class WorkflowController extends Controller } $query = $model::query()->with($include) - ->whereHas('workflow', fn($q) => $q->where('check_status', CheckStatus::Processing)) + // ->whereHas('workflow', fn($q) => $q->where('check_status', CheckStatus::Processing)) ->whereHas('workflow.logs', fn($q) => $q->own($user)) ->orderBy('created_at', 'desc'); @@ -57,6 +61,9 @@ class WorkflowController extends Controller $request->validate([ 'subject_type' => 'required', ]); + + $user = $request->user(); + $subjectType = $request->input('subject_type'); $model = Relation::getMorphedModel($subjectType); $resource = $this->mapResource($model); @@ -66,11 +73,37 @@ class WorkflowController extends Controller $explodes = explode(',', $request->input('include')); $include = array_merge($include, $explodes); } - $info = $model::query()->with($include)->findOrFail($id); switch ($model) { case TaskHygiene::class: - $info = tap($info->task)->setRelation('taskable', $info->unsetRelation('task')); + $info = Task::with([ + 'taskable' => function (MorphTo $morphTo) { + $morphTo->morphWith([ + TaskHygiene::class => ['workflow', 'store'], + TaskLedger::class => ['store'], + ]); + }, + ])->whereHasMorph( + 'taskable', + [TaskHygiene::class, TaskLedger::class], + function (Builder $query, string $type) use ($user) { + switch ($type) { + case TaskLedger::class: + case TaskHygiene::class: + if ($user->isStoreMaster()) { + $query->where('store_id', $user->store_id); + } else { + $query->whereRaw('1!=1'); + } + break; + } + } + )->findOrFail($id); + $info->taskable->setRelation('task', $info->withoutRelations()); + break; + + default: + $info = $model::query()->with($include)->findOrFail($id); break; }