diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php index 1578f9e..248c835 100644 --- a/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php @@ -191,4 +191,12 @@ public function SaveRules() $s = new CheckItemService; return $s->SaveRules($item_id, $rules); } + + public function GetItemRelatedResources() + { + $item_id = request('item_id'); + if (!$item_id) return \Yz::echoError1('item_id不能为空'); + $s = new CheckItemService; + return $s->GetItemRelatedResources($item_id); + } } diff --git a/Laravel/app/Services/Admin/YeWu/CheckItemService.php b/Laravel/app/Services/Admin/YeWu/CheckItemService.php index a09d6e0..5422bde 100644 --- a/Laravel/app/Services/Admin/YeWu/CheckItemService.php +++ b/Laravel/app/Services/Admin/YeWu/CheckItemService.php @@ -301,4 +301,26 @@ public function SaveRules($item_id, $rules) return \Yz::Return(false, '保存失败:' . $e->getMessage()); } } -} + + //获取检查项目关联的排班资源列表 + public function GetItemRelatedResources($item_id) + { + $resources = DB::table('s_check_item_device') + ->join('s_devices', 's_check_item_device.device_id', '=', 's_devices.id') + ->join('s_department_resources_device', 's_devices.id', '=', 's_department_resources_device.device_id') + ->join('s_department_resources', 's_department_resources_device.rsourece_id', '=', 's_department_resources.id') + ->leftJoin('s_department', 's_department_resources.department_id', '=', 's_department.id') + ->select( + 's_department_resources.id', + 's_department_resources.department_resources_name', + 's_department.department_name' + ) + ->where('s_check_item_device.item_id', $item_id) + ->where('s_department_resources.is_del', 0) + ->where('s_department_resources.department_resources_status', 1) + ->distinct() + ->get(); + + return \Yz::Return(true, '查询成功', $resources); + } +} \ No newline at end of file diff --git a/Laravel/app/Services/Admin/YeWu/PlanListService.php b/Laravel/app/Services/Admin/YeWu/PlanListService.php index a0bb3d3..aa1506f 100644 --- a/Laravel/app/Services/Admin/YeWu/PlanListService.php +++ b/Laravel/app/Services/Admin/YeWu/PlanListService.php @@ -960,27 +960,47 @@ public function YuYue($planid, $appointment_type, $mainlistids, $do_type,$is_eme if ($itemRules->isNotEmpty()) { $planWeekName = $planInfo->weekname; $planBeginTime = $planInfo->begin_time; - $rulePass = false; + $planResourcesId = $planInfo->resources_id; + + // 筛选出适用于当前排班资源的规则 + $applicableRules = []; foreach ($itemRules as $rule) { $rv = json_decode($rule->rule_value, true); - $days = $rv['days'] ?? []; - $startTime = $rv['start_time'] ?? null; - $endTime = $rv['end_time'] ?? null; + $resourcesId = $rv['resources_id'] ?? null; + if (empty($resourcesId)) { + // resources_id 为空,规则跳过 + continue; + } + if ($resourcesId != $planResourcesId) { + // 指定了其他排班资源,跳过 + continue; + } + $applicableRules[] = $rv; + } + + // 无适用规则 → 不受限 → 通过 + if (!empty($applicableRules)) { + $rulePass = false; + foreach ($applicableRules as $rv) { + $days = $rv['days'] ?? []; + $startTime = $rv['start_time'] ?? null; + $endTime = $rv['end_time'] ?? null; - if (!in_array($planWeekName, $days)) continue; + if (!in_array($planWeekName, $days)) continue; - if ($startTime && $endTime && $planBeginTime) { - if ($planBeginTime >= $startTime && $planBeginTime < $endTime) { + if ($startTime && $endTime && $planBeginTime) { + if ($planBeginTime >= $startTime && $planBeginTime < $endTime) { + $rulePass = true; + break; + } + } else { $rulePass = true; break; } - } else { - $rulePass = true; - break; } - } - if (!$rulePass) { - return \Yz::echoError1($item->item_name . ' 当前时段不在可预约时间范围内'); + if (!$rulePass) { + return \Yz::echoError1($item->item_name . ' 当前时段不在可预约时间范围内'); + } } } @@ -1706,10 +1726,32 @@ private function checkPlanAgainstRules($plan, $allItemRules) { $planWeekName = $plan->weekname; $planBeginTime = $plan->begin_time; + $planResourcesId = $plan->resources_id; foreach ($allItemRules as $itemId => $rules) { - $itemPass = false; + // 筛选出适用于当前号源排班资源的规则 + $applicableRules = []; foreach ($rules as $rule) { + $resourcesId = $rule['resources_id'] ?? null; + if (empty($resourcesId)) { + // resources_id 为空,规则跳过,不生效 + continue; + } + if ($resourcesId != $planResourcesId) { + // 指定了其他排班资源,跳过 + continue; + } + $applicableRules[] = $rule; + } + + // 无适用规则 → 该排班资源不受限 → 直接通过 + if (empty($applicableRules)) { + continue; + } + + // 有适用规则 → 按原逻辑匹配 + $itemPass = false; + foreach ($applicableRules as $rule) { $days = $rule['days'] ?? []; $startTime = $rule['start_time'] ?? null; $endTime = $rule['end_time'] ?? null; diff --git a/Laravel/routes/api.php b/Laravel/routes/api.php index 48e5627..0349b91 100644 --- a/Laravel/routes/api.php +++ b/Laravel/routes/api.php @@ -132,6 +132,7 @@ Route::post('admin/GetHuChiList','App\Http\Controllers\API\Admin\YeWu\CheckItemController@GetHuChiList');//获取某个项目已经设置的互斥列表 Route::post('admin/GetCheckItemRules','App\Http\Controllers\API\Admin\YeWu\CheckItemController@GetRules');//获取检查项目规则 Route::post('admin/SaveCheckItemRules','App\Http\Controllers\API\Admin\YeWu\CheckItemController@SaveRules');//保存检查项目规则 + Route::post('admin/GetItemRelatedResources','App\Http\Controllers\API\Admin\YeWu\CheckItemController@GetItemRelatedResources');//获取检查项目关联的排班资源 Route::post('admin/InpatientWardGetList','App\Http\Controllers\API\Admin\YeWu\InpatientWardController@GetList');//获取病区列表 Route::post('admin/InpatientWardSave','App\Http\Controllers\API\Admin\YeWu\InpatientWardController@Save');//保存病区 Route::post('admin/InpatientWardDel','App\Http\Controllers\API\Admin\YeWu\InpatientWardController@Del');//删除病区 diff --git a/YiJi-admin/src/api/api.js b/YiJi-admin/src/api/api.js index 3b386e0..84e4718 100644 --- a/YiJi-admin/src/api/api.js +++ b/YiJi-admin/src/api/api.js @@ -406,6 +406,9 @@ export const GetCheckItemRules = (data = {}) => { export const SaveCheckItemRules = (data = {}) => { return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveCheckItemRules', data: data }) } +export const GetItemRelatedResources = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetItemRelatedResources', data: data }) +} //重置密码 export const resetPwd = (data = {}) => { return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/resetPwd', data: data }) diff --git a/YiJi-admin/src/views/YeWu/CheckItemConfig.vue b/YiJi-admin/src/views/YeWu/CheckItemConfig.vue index 0377708..05611dc 100644 --- a/YiJi-admin/src/views/YeWu/CheckItemConfig.vue +++ b/YiJi-admin/src/views/YeWu/CheckItemConfig.vue @@ -269,6 +269,13 @@ +
+ 排班资源 + + + + 为空时规则跳过,不生效 +
允许时段 { RuleItemInfo.value = { id: row.id, item_name: row.item_name }; RuleDialogVisible.value = true; RuleLoading.value = true; + // 加载排班资源列表 + GetItemRelatedResources({ item_id: row.id }).then(res => { + if (res.status) { + relatedResources.value = res.data; + } + }); GetCheckItemRules({ item_id: row.id }).then(res => { RuleLoading.value = false; if (res.status) { RuleList.value = (res.data || []).map(r => ({ days: r.rule_value.days || [], start_time: r.rule_value.start_time || '', - end_time: r.rule_value.end_time || '' + end_time: r.rule_value.end_time || '', + resources_id: r.rule_value.resources_id || '' })); } else { ElMessage.error(res.msg); @@ -915,7 +931,7 @@ }; const AddRuleRow = () => { - RuleList.value.push({ days: [], start_time: '', end_time: '' }); + RuleList.value.push({ days: [], start_time: '', end_time: '', resources_id: '' }); }; const RemoveRuleRow = (index) => { @@ -939,7 +955,8 @@ rule_value: { days: rule.days, start_time: rule.start_time, - end_time: rule.end_time + end_time: rule.end_time, + resources_id: rule.resources_id || '' } })); RuleLoading.value = true; diff --git a/YiJi-admin/src/views/YeWu/DeptCheckItemConfig.vue b/YiJi-admin/src/views/YeWu/DeptCheckItemConfig.vue index ccf4298..8ccf53a 100644 --- a/YiJi-admin/src/views/YeWu/DeptCheckItemConfig.vue +++ b/YiJi-admin/src/views/YeWu/DeptCheckItemConfig.vue @@ -237,6 +237,13 @@
+
+ 排班资源 + + + + 为空时规则跳过,不生效 +
允许时段 { RuleItemInfo.value = { id: row.id, item_name: row.item_name }; RuleDialogVisible.value = true; RuleLoading.value = true; + // 加载排班资源列表 + GetItemRelatedResources({ item_id: row.id }).then(res => { + if (res.status) { + relatedResources.value = res.data; + } + }); GetCheckItemRules({ item_id: row.id }).then(res => { RuleLoading.value = false; if (res.status) { RuleList.value = (res.data || []).map(r => ({ days: r.rule_value.days || [], start_time: r.rule_value.start_time || '', - end_time: r.rule_value.end_time || '' + end_time: r.rule_value.end_time || '', + resources_id: r.rule_value.resources_id || '' })); } else { ElMessage.error(res.msg); @@ -804,7 +820,7 @@ }; const AddRuleRow = () => { - RuleList.value.push({ days: [], start_time: '', end_time: '' }); + RuleList.value.push({ days: [], start_time: '', end_time: '', resources_id: '' }); }; const RemoveRuleRow = (index) => { @@ -828,7 +844,8 @@ rule_value: { days: rule.days, start_time: rule.start_time, - end_time: rule.end_time + end_time: rule.end_time, + resources_id: rule.resources_id || '' } })); RuleLoading.value = true;