From 16848262345870612af1328d3cf4ce0b5ebfc9b5 Mon Sep 17 00:00:00 2001 From: yanzai Date: Mon, 7 Jul 2025 07:45:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=B7=E6=BA=90=E6=94=B9=E7=89=88=EF=BC=8C?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E7=A7=91=E5=AE=A4=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../API/Admin/BaseInfoController.php | 20 + .../API/Admin/YeWu/PlanListController.php | 16 +- .../API/Admin/YeWu/PlanModelController.php | 8 +- .../Controllers/API/Third/PacsController.php | 2 +- Laravel/app/Services/Admin/UserService.php | 23 +- Laravel/routes/api.php | 1 + YiJi-admin/src/api/api.js | 12 + .../src/components/Yewu/PrintShenQingDan.vue | 4 +- .../src/components/Yewu/YuYue202506.vue | 12 +- .../views/AppointmentMngr/PlanList - 旧.vue | 514 +++++++++++ .../src/views/AppointmentMngr/PlanList.vue | 502 +++++++++-- .../views/AppointmentMngr/PlanModel - 旧.vue | 835 ++++++++++++++++++ .../src/views/AppointmentMngr/PlanModel.vue | 548 ++++++++---- YiJi-admin/src/views/Index.vue | 138 +-- YiJi-admin/src/views/YeWu/CheckItemConfig.vue | 60 +- YiJi-admin/src/views/YeWu/DoctorYuYue.vue | 3 +- 16 files changed, 2377 insertions(+), 321 deletions(-) create mode 100644 YiJi-admin/src/views/AppointmentMngr/PlanList - 旧.vue create mode 100644 YiJi-admin/src/views/AppointmentMngr/PlanModel - 旧.vue diff --git a/Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php b/Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php index 2dfd5bd..07d62fb 100644 --- a/Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php +++ b/Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Services\Admin\MenuService; use App\Services\Admin\UserService; +use Illuminate\Support\Facades\DB; class BaseInfoController extends Controller { @@ -35,4 +36,23 @@ class BaseInfoController extends Controller $s=app()->make(UserService::class); return $s->CheckMenuAuth(['userid'=>$userid,'group'=>$group,'url'=>$url]); } + + //切换默认科室 + public function ChangeDefaultDept(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $deptid = request('deptid'); + if (!isset($deptid)) return \Yz::echoError1('请选择科室'); + $dept = DB::table('s_department')->where(['id' => $deptid])->first(); + if (!$dept) return \Yz::echoError1('科室不存在'); + $u= DB::table('users')->where('id', $userid)->update([ + 'department_id' => $deptid, + 'updated_at' => date("Y-m-d H:i:s") + ]); + if($u){ + return \Yz::Return(true,'切换成功',[]); + }else{ + return \Yz::echoError1('切换失败'); + } + } } diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanListController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanListController.php index 9533dd7..12f617e 100644 --- a/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanListController.php +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanListController.php @@ -48,16 +48,18 @@ class PlanListController extends Controller if (count($checkList) > 0) { foreach ($models as $model) { foreach ($checkList as $item) { - $msglist .= $item->date . ' '; - $msgIds .= $item->id . ' '; + if ($item->roster_id == $model->id) { + $msglist .= $item->date . ' '; + $msgIds .= $item->id . ' '; + $msg .= " " . $model->weekname . $model->begin_time . '-' . $model->end_time . " "; + } } - if ($item->roster_id == $model->id) { - $msg .= " " . $model->weekname . $model->begin_time . '-' . $model->end_time . " "; - } + } + + - } return \Yz::Return(false, '已有重复的计划明细,禁止创建!' . $msg . '已存在相同记录,
存在于:
' . $msglist . '
对应记录Id为:' . $msgIds . '
请先删除后再操作', $checkList); } //查询勾选的时间范围内所有的节假日 @@ -243,7 +245,7 @@ class PlanListController extends Controller //匹配渠道数量 $countsInfo = DB::table('s_source_roster_detail_count') ->leftJoin('s_appointment_type', 's_source_roster_detail_count.appointment_type_id', '=', 's_appointment_type.id') - ->select('s_source_roster_detail_count.*', 's_appointment_type.name') + ->select('s_source_roster_detail_count.*', 's_appointment_type.name','s_appointment_type.jiancheng') ->whereIn('roster_detail_id', $ids)->get(); if (count($countsInfo) > 0) { diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanModelController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanModelController.php index 8e241f9..f488dc0 100644 --- a/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanModelController.php +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanModelController.php @@ -60,13 +60,19 @@ class PlanModelController extends Controller $list = $list->orderBy('s_source_roster.begin_time')->get(); $ids = []; foreach ($list as $key => $value) { + $patient_arr = explode(',', $value->patient_type); + $p_type=config('app.globals.患者类型'); + $type_label = array_map(function($key) use ($p_type) { + return $p_type[$key] ?? null; // 如果 key 不存在,返回 null + }, $patient_arr); + $list[$key]->patient_type_label = $type_label; $list[$key]->countsInfo = []; $ids[] = $value->id; } //匹配渠道数量 $countsInfo = DB::table('s_source_roster_count') ->leftJoin('s_appointment_type', 's_source_roster_count.appointment_type_id', '=', 's_appointment_type.id') - ->select('s_source_roster_count.*', 's_appointment_type.name') + ->select('s_source_roster_count.*', 's_appointment_type.name','s_appointment_type.jiancheng') ->whereIn('roster_id', $ids)->get(); if (count($countsInfo) > 0) { diff --git a/Laravel/app/Http/Controllers/API/Third/PacsController.php b/Laravel/app/Http/Controllers/API/Third/PacsController.php index 77cd695..08c92fa 100644 --- a/Laravel/app/Http/Controllers/API/Third/PacsController.php +++ b/Laravel/app/Http/Controllers/API/Third/PacsController.php @@ -52,7 +52,7 @@ class PacsController extends Controller "idCardNumber", "reservation_sources as reservation_sources_id", - )->where(['is_del'=>0,'is_nullify'=>0]); + )->where(['reservation_date'=>date('Y-m-d'),'is_del'=>0,'is_nullify'=>0]); if(isset($dateRange)){ if(!is_array($dateRange)) return \Yz::JsonError("日期范围必须是数组"); $entrust_list=$entrust_list->whereBetween('entrust_date',[$dateRange[0],$dateRange[1]]); diff --git a/Laravel/app/Services/Admin/UserService.php b/Laravel/app/Services/Admin/UserService.php index 8fe0744..8b3f4ea 100644 --- a/Laravel/app/Services/Admin/UserService.php +++ b/Laravel/app/Services/Admin/UserService.php @@ -90,8 +90,29 @@ class UserService return $result; } public function GetDetail($arr){ - $c=DB::table('users')->select(['id','cn_name','username','status','group','img',])->where(['id'=>$arr['id']])->whereIn('status',[0,1])->get(); + $c=DB::table('users')->select(['id','cn_name','username','department_id','department_ids','status','group','img',])->where(['id'=>$arr['id']])->whereIn('status',[0,1])->get(); if(count($c)){ + $ids=[]; + if(!empty($c[0]->department_ids)){ + $ids= explode(",", $c[0]->department_ids); + }else{ + $ids=[$c[0]->department_id]; + } + + $departments=DB::table('s_department')->whereIn('id',$ids)->get(); + $departments_arr=[]; + foreach ($departments as $department){ + $departments_arr[]=[ + 'id' => $department->id, + 'department_name' => $department->department_name, + 'default' => $c[0]->department_id==$department->id, + ]; + if($c[0]->department_id==$department->id){ + $c[0]->department_name= $department->department_name; + } + + } + $c[0]->department_info=$departments_arr; $result['info']=$c; $result['status']='ok'; $result['msg']='成功'; diff --git a/Laravel/routes/api.php b/Laravel/routes/api.php index 4fcd450..3ed22d1 100644 --- a/Laravel/routes/api.php +++ b/Laravel/routes/api.php @@ -101,6 +101,7 @@ Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () { Route::post('admin/CancelSign','App\Http\Controllers\API\Admin\YeWu\SignInController@CancelSign');//取消签到 Route::post('admin/countAppointmentType','App\Http\Controllers\API\Admin\YeWu\AppointmentTypeController@countAppointmentType');//预约渠道统计 Route::post('admin/CountMakeList','App\Http\Controllers\API\Admin\YeWu\WorkMainController@CountMakeList');//开单统计 + Route::post('admin/ChangeDefaultDept','App\Http\Controllers\API\Admin\BaseInfoController@ChangeDefaultDept');//切换默认科室 }); diff --git a/YiJi-admin/src/api/api.js b/YiJi-admin/src/api/api.js index b34de22..d138e06 100644 --- a/YiJi-admin/src/api/api.js +++ b/YiJi-admin/src/api/api.js @@ -359,4 +359,16 @@ export const countAppointmentType = (data = {}) => { //开单统计 export const CountMakeList = (data = {}) => { return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CountMakeList', data: data }) +} +//同步his分类 +export const UpdateHisItemClass = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'admin/UpdateItemClass', data: data }) +} +//同步his检查项目 +export const updateHisCheckItem = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'admin/updateCheckItem', data: data }) +} +//切换默认科室 +export const ChangeDefaultDept = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ChangeDefaultDept', data: data }) } \ No newline at end of file diff --git a/YiJi-admin/src/components/Yewu/PrintShenQingDan.vue b/YiJi-admin/src/components/Yewu/PrintShenQingDan.vue index 7ca75eb..671d94c 100644 --- a/YiJi-admin/src/components/Yewu/PrintShenQingDan.vue +++ b/YiJi-admin/src/components/Yewu/PrintShenQingDan.vue @@ -21,8 +21,8 @@ {{printInfo.patient_type_label}}号{{printInfo.reg_num}} - 病区:{{printInfo.warddesc ?? ''}} - 床号:{{printInfo.bedno ?? ''}} + 病区:{{printInfo.warddesc ?? ''}} + 床号:{{printInfo.bedno ?? ''}} 联系电话:{{printInfo.user_phone}} diff --git a/YiJi-admin/src/components/Yewu/YuYue202506.vue b/YiJi-admin/src/components/Yewu/YuYue202506.vue index 1263481..dfd1659 100644 --- a/YiJi-admin/src/components/Yewu/YuYue202506.vue +++ b/YiJi-admin/src/components/Yewu/YuYue202506.vue @@ -99,7 +99,7 @@
-
+
@@ -184,12 +184,13 @@ activeZhenShi.value = '' selectedRows.value = selection; + console.log('11111',selectedRows.value) selectedRows.value.forEach((v, i) => { selectedMianListId.value.push(v.id) selectedEntrustId.value.push(v.entrust_id) }) - //遍历勾选的项目 如果号源id都相同则 获取可以选定的号源id.------------vvvv + //遍历已经勾选的项目 如果号源id都相同则 获取可以选定的号源id.------------vvvv const allPlanIdsSame = selectedRows.value.every( (v) => v.roster_id === selectedRows.value[0]?.roster_id ); @@ -307,13 +308,14 @@ } const FindAllMatchItem = () => { - console.log(11111) + let list = [] //selectedRows.value.reverse(); - if (selectedRows.value[0].list_status != 0) return false //如果勾选的不是申请中的医嘱则不进行匹配 + let length=selectedRows.value.length + if (selectedRows.value[length-1].list_status != 0) return false //如果勾选的不是申请中的医嘱则不进行匹配 entrustTableDate.value.forEach((v, i) => { if (v.list_status == 0 && v.tishi_msg == "") { - if (v.id == selectedRows.value[0].id) { + if (v.id == selectedRows.value[length-1].id) { list.push({ name: v.entrust, rowid: i, diff --git a/YiJi-admin/src/views/AppointmentMngr/PlanList - 旧.vue b/YiJi-admin/src/views/AppointmentMngr/PlanList - 旧.vue new file mode 100644 index 0000000..d6e2f08 --- /dev/null +++ b/YiJi-admin/src/views/AppointmentMngr/PlanList - 旧.vue @@ -0,0 +1,514 @@ + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/AppointmentMngr/PlanList.vue b/YiJi-admin/src/views/AppointmentMngr/PlanList.vue index d6e2f08..3018a78 100644 --- a/YiJi-admin/src/views/AppointmentMngr/PlanList.vue +++ b/YiJi-admin/src/views/AppointmentMngr/PlanList.vue @@ -2,7 +2,7 @@
- + 删除
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- + + + +
+ +
+
@@ -184,15 +188,17 @@
-
{{selectedPlanRow.department_resources_name}} +
+ {{selectedPlanRow.department_resources_name}} {{ item.device_name }}
- - + @@ -238,24 +244,15 @@ ElMessageBox } from 'element-plus' - + let planTableData = ref([]) let loading = ref(false) - let tableData = ref([]) let currentPage = ref(1) //当前页码 - let pageSize = ref(15) //每页数量 + let pageSize = ref(9999) //每页数量 let total = 0 //总数量 - const PageSizeChange = (e) => { // 修改每页数量 - pageSize.value = e - GetList() - } - const PageCurrentChange = (e) => { //切换页码 - currentPage.value = e - GetList() - } - let tableSelected = ref([]) - const handleSelectionChange = (e) => { - tableSelected.value = e - } + + let selectedPlanArr = ref([]) + let date_list = ref([]) + let PlanSelectedAll = ref(0) let searchInfo = ref({ department_id: null, resources_id: null, @@ -266,16 +263,120 @@ }) let PlanDetailDialogVisible = ref(false) const GetList = () => { + searchInfo.value.resources_id = ResourceActive.value + date_list.value = getAllDatesBetweenDates(searchInfo.value.dateRange) + loading.value=true PlanListGetList({ page: currentPage.value, pageSize: pageSize.value, searchInfo: searchInfo.value }).then(res => { - tableData.value = res.data.list - total = res.data.count + loading.value=false + if (res.status) { + planTableData.value = [] + selectedPlanArr.value = [] + let plans = res.data.list + if (plans.length > 0) { + const timeSlotsSet = new Set(); + plans.forEach(v => { + if (v.resources_id == ResourceActive.value) { + const timeRange = + `${v.begin_time.substring(0,5)}-${v.end_time.substring(0,5)}`; + timeSlotsSet.add(timeRange); + } + }); + + const timeSlots = Array.from(timeSlotsSet).sort(); // 排序可选 + + // Step 2: 构建表格数据 + + + timeSlots.forEach(timeRange => { + const row = { + time_range: timeRange + }; + + date_list.value.forEach(date => { + const matchingPlan = plans.find( + v => + `${v.begin_time.substring(0,5)}-${v.end_time.substring(0,5)}` === + timeRange && v.date === date && v.resources_id == + ResourceActive.value + ); + let plan_enable = false + if (matchingPlan) { + row[date] = { + countsInfo: matchingPlan.countsInfo, + patient_type_label: matchingPlan.patient_type_label, + status: matchingPlan.status, + id: matchingPlan.id, + resources_id: matchingPlan.resources_id + + }; + }else{ + row[date] = { + countsInfo:null, + patient_type_label:null, + status: null, + id:null, + resources_id:null + + }; + } + }); + + planTableData.value.push(row); + }); + + } + } else { + ElMessage.error(res.msg) + } }) } + const selectedAllPlanFunc = () => { + PlanSelectedAll.value = PlanSelectedAll.value === 0 ? 1 : 0; + if (PlanSelectedAll.value === 0) { + selectedPlanArr.value = [] + } + if (PlanSelectedAll.value === 1) { + planTableData.value.forEach((v, i) => { + console.log(v) + for (let key in v) { + if (key != 'time_range') { + selectedPlanArr.value.push(v[key].id) + } + } + + }) + } + } + const checkBoxCheckFunc = (id) => { + const index = selectedPlanArr.value.indexOf(id); + if (index === -1) { + selectedPlanArr.value.push(id); + } else { + selectedPlanArr.value = selectedPlanArr.value.filter(item => item !== id); + } + }; + let hoverIndex = ref(null) + const showTools = (index) => { + hoverIndex.value = index + } + const hideTools = (index) => { + hoverIndex.value = null + } + const zhenshiClick = (zhenshi) => { + ResourceActive.value = zhenshi + PlanSelectedAll.value = 0 + selectedPlanArr.value = [] + + GetList() + } + const isSelected = (id) => { + return selectedPlanArr.value.includes(id) + } let xingqi = ref([{ label: '星期一', value: 1 @@ -341,12 +442,18 @@ // } //获取可用资源列表 let enableResourceList = ref([]) + let ResourceActive = ref(0) const getEnableResource = () => { loading.value = true DepartmentResourceGetEnableList().then(res => { loading.value = false if (res.status) { enableResourceList.value = res.data + if (enableResourceList.value.length > 0 && ResourceActive.value == '') { + ResourceActive.value = enableResourceList.value[0].id + GetList() + } + } else { ElMessage.error(res.msg) } @@ -416,14 +523,11 @@ }) } const Del = () => { - if (tableSelected.value.length == 0) { + if (selectedPlanArr.value.length == 0) { ElMessage.error("请至少勾选1条记录") return false } - let ids = [] - tableSelected.value.map((item) => { - ids.push(item.id) - }) + ElMessageBox.confirm( '确定删除吗?', '提示', { @@ -434,7 +538,7 @@ ).then(() => { loading.value = true PlanDetailPlanListDel({ - ids: ids + ids: selectedPlanArr.value }).then(res => { loading.value = false if (res.status) { @@ -453,9 +557,9 @@ let MingXiLoading = ref(false) let MingXiList = ref(null); let selectedPlanRow = ref(null); - let selectecQuDaoid =ref(null); + let selectecQuDaoid = ref(null); const GetMingXi = (row, typeid) => { - selectecQuDaoid.value=typeid + selectecQuDaoid.value = typeid selectedPlanRow.value = row MingXiDialogVisible.value = true MingXiLoading.value = true @@ -473,14 +577,66 @@ }) } + function formatDateLocal(date) { + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; + } + + function getAllDatesBetweenDates(dateArray) { + // 将字符串日期转为 Date 对象并排序 + const sortedDates = dateArray + .map(dateStr => new Date(dateStr)) + .sort((a, b) => a - b); + + const startDate = sortedDates[0]; + const endDate = sortedDates[sortedDates.length - 1]; + + const dateList = []; + let currentDate = new Date(startDate); + + while (currentDate <= endDate) { + dateList.push(currentDate.toISOString().split('T')[0]); // 格式化为 YYYY-MM-DD + currentDate.setDate(currentDate.getDate() + 1); + } + + return dateList; + } + function getWeekday(dateString) { + const date = new Date(dateString); + + if (isNaN(date)) { + return "无效日期"; + } + + const weekdays = [ + "周日", + "周一", + "周二", + "周三", + "周四", + "周五", + "周六" + ]; + + return weekdays[date.getDay()]; + } onMounted(() => { - GetList() + const today = new Date(); + const todayStr = formatDateLocal(today); + + // 获取15天后的日期 + const fifteenDaysLater = new Date(today); + fifteenDaysLater.setDate(today.getDate() + 14); + const fifteenDaysLaterStr = formatDateLocal(fifteenDaysLater); + searchInfo.value.dateRange = [todayStr, fifteenDaysLaterStr] GetDepartmentEnableList() getEnableResource() GetEnableDeviceListFunc() }) - \ No newline at end of file diff --git a/YiJi-admin/src/views/AppointmentMngr/PlanModel - 旧.vue b/YiJi-admin/src/views/AppointmentMngr/PlanModel - 旧.vue new file mode 100644 index 0000000..f0ffbdf --- /dev/null +++ b/YiJi-admin/src/views/AppointmentMngr/PlanModel - 旧.vue @@ -0,0 +1,835 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/AppointmentMngr/PlanModel.vue b/YiJi-admin/src/views/AppointmentMngr/PlanModel.vue index 8d49b68..e00015d 100644 --- a/YiJi-admin/src/views/AppointmentMngr/PlanModel.vue +++ b/YiJi-admin/src/views/AppointmentMngr/PlanModel.vue @@ -1,8 +1,8 @@