value('store_id'); } if (isset($data['datetime_range'])) { $time = explode(',', $data['datetime_range']); $start = Carbon::createFromTimestamp(data_get($time, 0)); $end = Carbon::createFromTimestamp(data_get($time, 1)); $data['start_at'] = $start; $data['end_at'] = $end; $data['date'] = $start->format('Y-m-d'); } if (isset($data['start_at']) && isset($data['end_at'])) { $start = $data['start_at'] instanceof \DateTime ? $data['start_at'] : Carbon::parse($data['start_at']); $end = $data['end_at'] instanceof \DateTime ? $data['end_at'] : Carbon::parse($data['end_at']); $data['hours'] = $start->diffInHours($end); } return $data; } public function validate($data, $model = null) { // todo 验证申请时间是否重复 $createRules = [ 'employee_id' => ['required'], 'date' => ['required'], 'start_at' => ['required'], 'end_at' => ['required'], ]; $updateRules = []; $validator = Validator::make($data, $model ? $updateRules : $createRules, []); if ($validator->fails()) { return $validator->errors()->first(); } return true; } public function update($primaryKey, $data): bool { $model = $this->query()->whereKey($primaryKey)->firstOrFail(); if (!$model->canUpdate()) { return $this->setError('审核中, 无法修改'); } $data = $this->resloveData($data, $model); $validate = $this->validate($data, $model); if ($validate !== true) { $this->setError($validate); return false; } return $model->update($data); } public function delete(string $ids): mixed { $list = $this->query()->with(['workflow'])->whereIn('id', explode(',', $ids))->get(); foreach ($list as $item) { if (!$item->canUpdate()) { return $this->setError('审核中, 无法删除'); } $item->delete(); } return true; } }