main
Jing Li 2024-04-22 10:17:54 +08:00
parent 5cb9045cf1
commit 0c9f3057d4
1 changed files with 25 additions and 18 deletions

View File

@ -4,13 +4,15 @@ namespace App\Http\Controllers\Api;
use Illuminate\Http\{Request, Response}; use Illuminate\Http\{Request, Response};
use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Eloquent\Relations\Relation;
use App\Http\Resources\{ReimbursementResource, WorkflowLogResource, OfficalBusinessResource, EmployeeSignRepairResource, HolidayApplyResource, OvertimeApplyResource, AgreementResource, EmployeePromotionResource}; use App\Http\Resources\WorkflowLogResource;
use App\Enums\CheckStatus; use App\Enums\CheckStatus;
use App\Models\{WorkflowLog, WorkflowCheck}; use App\Models\WorkflowCheck;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use App\Admin\Services\WorkFlowService; use App\Admin\Services\WorkFlowService;
use App\Exceptions\RuntimeException; use App\Exceptions\RuntimeException;
use App\Http\Resources\TaskResource;
use App\Models\TaskHygiene;
class WorkflowController extends Controller class WorkflowController extends Controller
{ {
@ -21,7 +23,7 @@ class WorkflowController extends Controller
]); ]);
$subjectType = $request->input('subject_type'); $subjectType = $request->input('subject_type');
$model = Relation::getMorphedModel($subjectType); $model = Relation::getMorphedModel($subjectType);
$resource = $this->mapResource($subjectType); $resource = $this->mapResource($model);
$user = $request->user(); $user = $request->user();
@ -38,6 +40,15 @@ class WorkflowController extends Controller
$list = $query->paginate($request->input('per_page')); $list = $query->paginate($request->input('per_page'));
switch ($model) {
case TaskHygiene::class:
$list->loadMissing(['task', 'store']);
$list->through(function (TaskHygiene $item) {
return tap($item->task)->setRelation('taskable', $item->unsetRelation('task'));
});
break;
}
return $resource::collection($list); return $resource::collection($list);
} }
@ -48,7 +59,7 @@ class WorkflowController extends Controller
]); ]);
$subjectType = $request->input('subject_type'); $subjectType = $request->input('subject_type');
$model = Relation::getMorphedModel($subjectType); $model = Relation::getMorphedModel($subjectType);
$resource = $this->mapResource($subjectType); $resource = $this->mapResource($model);
$include = ['workflow']; $include = ['workflow'];
if ($request->input('include')) { if ($request->input('include')) {
@ -120,21 +131,17 @@ class WorkflowController extends Controller
} }
} }
protected function mapResource($key) protected function mapResource(string $model)
{ {
$map = [ $class = match ($model) {
'reimbursements' => ReimbursementResource::class, TaskHygiene::class => TaskResource::class,
'employee_sign_repairs' => EmployeeSignRepairResource::class, default => 'App\\Http\\Resources\\'.class_basename($model).'Resource',
'holiday_applies' => HolidayApplyResource::class, };
'overtime_applies' => OvertimeApplyResource::class,
'agreements' => AgreementResource::class, if (! class_exists($class)) {
'offical_business' => OfficalBusinessResource::class, throw new RuntimeException('未知的 subject_type');
'employee_promotions' => EmployeePromotionResource::class,
];
$resource = data_get($map, $key);
if (!$resource) {
throw new RuntimeException('未知的 subject_type resource: ' . $key);
} }
return $resource;
return $class;
} }
} }