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\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\Models\{WorkflowLog, WorkflowCheck};
use App\Models\WorkflowCheck;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
use App\Admin\Services\WorkFlowService;
use App\Exceptions\RuntimeException;
use App\Http\Resources\TaskResource;
use App\Models\TaskHygiene;
class WorkflowController extends Controller
{
@ -21,7 +23,7 @@ class WorkflowController extends Controller
]);
$subjectType = $request->input('subject_type');
$model = Relation::getMorphedModel($subjectType);
$resource = $this->mapResource($subjectType);
$resource = $this->mapResource($model);
$user = $request->user();
@ -38,6 +40,15 @@ class WorkflowController extends Controller
$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);
}
@ -48,7 +59,7 @@ class WorkflowController extends Controller
]);
$subjectType = $request->input('subject_type');
$model = Relation::getMorphedModel($subjectType);
$resource = $this->mapResource($subjectType);
$resource = $this->mapResource($model);
$include = ['workflow'];
if ($request->input('include')) {
@ -120,21 +131,17 @@ class WorkflowController extends Controller
}
}
protected function mapResource($key)
protected function mapResource(string $model)
{
$map = [
'reimbursements' => ReimbursementResource::class,
'employee_sign_repairs' => EmployeeSignRepairResource::class,
'holiday_applies' => HolidayApplyResource::class,
'overtime_applies' => OvertimeApplyResource::class,
'agreements' => AgreementResource::class,
'offical_business' => OfficalBusinessResource::class,
'employee_promotions' => EmployeePromotionResource::class,
];
$resource = data_get($map, $key);
if (!$resource) {
throw new RuntimeException('未知的 subject_type resource: ' . $key);
$class = match ($model) {
TaskHygiene::class => TaskResource::class,
default => 'App\\Http\\Resources\\'.class_basename($model).'Resource',
};
if (! class_exists($class)) {
throw new RuntimeException('未知的 subject_type');
}
return $resource;
return $class;
}
}