鹿和sa0ChunLuyu 2 weeks ago
parent 8d6d6fbf31
commit 4c54a90270

@ -94,4 +94,12 @@ public function Search()
return $service->Search($keyword); return $service->Search($keyword);
} }
//获取指定科室的下级科室列表(执行诊室)
public function GetChildrenDepartments()
{
$department_id = request('department_id');
$service = new DepartmentService();
return $service->GetChildrenDepartments($department_id);
}
} }

@ -37,7 +37,7 @@ public function CreateJianChaShenQingDanPdf()
if (!is_array($OrderNoList)) return \Yz::JsonReturn("OrderNoList,应为数组"); if (!is_array($OrderNoList)) return \Yz::JsonReturn("OrderNoList,应为数组");
$config=DB::table('configs')->where(['label'=>'开启申请单pdf'])->first(); $config=DB::table('configs')->where(['label'=>'开启申请单pdf'])->first();
if (!$config or $config->value<>1) return \Yz::JsonError("未开启申请单pdf"); if (!$config or $config->value<>1) return \Yz::JsonError("未开启申请单pdf");
$generator = new \Picqer\Barcode\BarcodeGeneratorHTML(); $generator = new \Picqer\Barcode\BarcodeGeneratorPNG();
$successCount=0; $successCount=0;
foreach ($OrderNoList as $orderNo) { foreach ($OrderNoList as $orderNo) {
$entrustInfo=DB::table('s_list as a')->where(['a.entrust_id'=>$orderNo,'a.list_status'=>1,'a.is_nullify'=>0]) $entrustInfo=DB::table('s_list as a')->where(['a.entrust_id'=>$orderNo,'a.list_status'=>1,'a.is_nullify'=>0])
@ -45,7 +45,8 @@ public function CreateJianChaShenQingDanPdf()
->leftJoin('s_period as c','a.reservation_time','=','c.id') ->leftJoin('s_period as c','a.reservation_time','=','c.id')
->first(); ->first();
if(!$entrustInfo) continue; if(!$entrustInfo) continue;
$tiaoma = $generator->getBarcode($entrustInfo->app_num, $generator::TYPE_CODE_128, 2, 40); $barcodeContent = $entrustInfo->patient_type == 0 ? substr($entrustInfo->episodeid, -10) : $entrustInfo->reg_num;
$tiaoma = base64_encode($generator->getBarcode($barcodeContent, $generator::TYPE_CODE_128, 2, 40));
$source=null; $source=null;
if(!empty($entrustInfo->reservation_sources)){ if(!empty($entrustInfo->reservation_sources)){

@ -223,4 +223,16 @@ public function Search($keyword)
->get(); ->get();
return \Yz::Return(true, '查询成功', ['list' => $list]); return \Yz::Return(true, '查询成功', ['list' => $list]);
} }
//获取指定科室的下级科室列表(执行诊室)
public function GetChildrenDepartments($department_id)
{
$list = DB::table('s_department')
->where('pid', $department_id)
->where('is_del', 0)
->where('department_status', 1)
->select('id', 'department_name')
->get();
return \Yz::Return(true, '查询成功', ['list' => $list]);
}
} }

@ -26,7 +26,8 @@ public function GetList($searchInfo, $page, $pageSize, $userid)
} }
$count = $list->count(); $count = $list->count();
$items = $list->select('s_devices.*') $items = $list->select('s_devices.*', 'sr.execute_department_id')
->leftJoin('s_department_resources as sr', 's_department_resources_device.rsourece_id', '=', 'sr.id')
->orderBy('s_devices.id', 'desc') ->orderBy('s_devices.id', 'desc')
->skip(($page - 1) * $pageSize) ->skip(($page - 1) * $pageSize)
->take($pageSize) ->take($pageSize)
@ -53,16 +54,57 @@ public function Save($data, $userid)
'is_del' => 0, 'is_del' => 0,
]); ]);
//关联到当前科室 //关联到当前科室
DB::table('s_department_resources_device')->insert([ $linkId = DB::table('s_department_resources_device')->insertGetId([
'department_id' => $user->department_id, 'department_id' => $user->department_id,
'device_id' => $deviceId, 'device_id' => $deviceId,
]); ]);
//如果有执行诊室,创建资源记录并关联
if (!empty($data['execute_department_id'])) {
$resourceId = DB::table('s_department_resources')->insertGetId([
'department_resources_name' => $data['device_name'],
'department_id' => $user->department_id,
'execute_department_id' => $data['execute_department_id'],
'is_del' => 0,
]);
DB::table('s_department_resources_device')
->where('id', $linkId)
->update(['rsourece_id' => $resourceId]);
}
} else { } else {
//更新设备 //更新设备
DB::table('s_devices')->where('id', $data['id'])->update([ DB::table('s_devices')->where('id', $data['id'])->update([
'device_name' => $data['device_name'], 'device_name' => $data['device_name'],
'status' => $data['status'] ?? 1, 'status' => $data['status'] ?? 1,
]); ]);
//如果有执行诊室,更新资源记录
$link = DB::table('s_department_resources_device')
->where('device_id', $data['id'])
->where('department_id', $user->department_id)
->first();
if ($link) {
if (!empty($data['execute_department_id'])) {
if ($link->rsourece_id) {
//更新已有资源
DB::table('s_department_resources')
->where('id', $link->rsourece_id)
->update([
'execute_department_id' => $data['execute_department_id'],
'department_resources_name' => $data['device_name'],
]);
} else {
//创建新资源并关联
$resourceId = DB::table('s_department_resources')->insertGetId([
'department_resources_name' => $data['device_name'],
'department_id' => $user->department_id,
'execute_department_id' => $data['execute_department_id'],
'is_del' => 0,
]);
DB::table('s_department_resources_device')
->where('id', $link->id)
->update(['rsourece_id' => $resourceId]);
}
}
}
} }
DB::commit(); DB::commit();
return \Yz::Return(true, '保存成功'); return \Yz::Return(true, '保存成功');

@ -0,0 +1,2 @@
<?php
phpinfo();

@ -46,8 +46,8 @@
<div style="width: 100%;text-align: center;font-size: 18px;font-weight: bold;">检查预约回执单</div> <div style="width: 100%;text-align: center;font-size: 18px;font-weight: bold;">检查预约回执单</div>
<div <div
style="width:200px;height:50px;-webkit-print-color-adjust: exact; position: absolute;right: 10px;top:0px;"> style="width:200px;height:50px;-webkit-print-color-adjust: exact; position: absolute;right: 10px;top:0px;">
<div style="display: flex;justify-content: center;">{!! $barcode !!}</div> <img src="data:image/png;base64,{{ $barcode }}" style="display: block; margin: 0 auto; max-width: 100%; height: auto;" />
<div style="text-align: center">{{$printInfo->app_num}} </div> <div style="text-align: center">{{$printInfo->patient_type == 0 ? substr($printInfo->episodeid, -10) : $printInfo->reg_num}}</div>
</div> </div>
</div> </div>
@ -61,13 +61,9 @@
</tr> </tr>
<tr style="border: none;"> <tr style="border: none;">
<td style="border: none; text-align: left;"> <td style="border: none; text-align: left;">
@if($printInfo->patient_type == 0) {{$printInfo->patient_type_label}}号:{{$printInfo->patient_type == 0 ? substr($printInfo->episodeid, -10) : $printInfo->reg_num}}
{{$printInfo->patient_type_label}}号:{{ substr($printInfo->episodeid, -10) }}
@else
{{$printInfo->patient_type_label}}号:{{$printInfo->reg_num}}
@endif
</td> </td>
@if($printInfo->patient_type==0)<td style="border: none; text-align: left;">病区:{{$printInfo->warddesc ?? ''}}</td> @if($printInfo->patient_type==0)<td style="border: none; text-align: left;">病区:{{$printInfo->warddesc ?? ''}}</td>
<td style="border: none; text-align: left;">床号:{{$printInfo->bedno ?? ''}}</td>@endif <td style="border: none; text-align: left;">床号:{{$printInfo->bedno ?? ''}}</td>@endif
<td style="border: none; text-align: left;">联系电话:{{$printInfo->user_phone}}</td> <td style="border: none; text-align: left;">联系电话:{{$printInfo->user_phone}}</td>
</tr> </tr>
@ -79,7 +75,7 @@
{{substr($printInfo->period_begin_time,0,5)}}-{{substr($printInfo->period_end_time,0,5)}} {{substr($printInfo->period_begin_time,0,5)}}-{{substr($printInfo->period_end_time,0,5)}}
{{$printInfo->weekday_label}} {{$printInfo->weekday_label}}
</div> </div>
<div>检查地点:{{$printInfo->department_resources->department_resources_name}}</div> <div>检查地点:{{$printInfo->department_resources->department_resources_addr ?? $printInfo->department_resources->department_resources_name}}</div>
</div> </div>
<div style="padding-left: 4px;padding-top:10px;padding-bottom: 10px;"> <div style="padding-left: 4px;padding-top:10px;padding-bottom: 10px;">
<table style="border: none;"> <table style="border: none;">

@ -82,6 +82,7 @@
Route::post('admin/GetEnableDepartmentList','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetEnableList');//获取启用的科室列表 Route::post('admin/GetEnableDepartmentList','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetEnableList');//获取启用的科室列表
Route::post('admin/GetFilteredDepartmentList','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetFilteredEnableList');//获取筛选后的科室列表(仅显示存在执行诊室的科室) Route::post('admin/GetFilteredDepartmentList','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetFilteredEnableList');//获取筛选后的科室列表(仅显示存在执行诊室的科室)
Route::post('admin/SearchDepartment','App\Http\Controllers\API\Admin\YeWu\DepartmentController@Search');//按名称或编号模糊搜索科室 Route::post('admin/SearchDepartment','App\Http\Controllers\API\Admin\YeWu\DepartmentController@Search');//按名称或编号模糊搜索科室
Route::post('admin/GetChildrenDepartments','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetChildrenDepartments');//获取指定科室的下级科室列表
Route::post('admin/GetDepartmentChildren','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetChildren');//获取科室已关联的子科室列表 Route::post('admin/GetDepartmentChildren','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetChildren');//获取科室已关联的子科室列表
Route::post('admin/GetLeafDepartmentList','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetLeafList');//获取可作为诊室的叶子节点科室列表 Route::post('admin/GetLeafDepartmentList','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetLeafList');//获取可作为诊室的叶子节点科室列表
Route::post('admin/SaveDepartmentChildren','App\Http\Controllers\API\Admin\YeWu\DepartmentController@SaveChildren');//保存科室关联诊室关系 Route::post('admin/SaveDepartmentChildren','App\Http\Controllers\API\Admin\YeWu\DepartmentController@SaveChildren');//保存科室关联诊室关系

@ -375,6 +375,10 @@ export const GetMainList = (data = {}) => {
export const SearchDepartment = (data = {}) => { export const SearchDepartment = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SearchDepartment', data: data }) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SearchDepartment', data: data })
} }
//admin获取指定科室的下级科室列表
export const GetChildrenDepartments = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetChildrenDepartments', data: data })
}
//取消预约 //取消预约
export const CancelYuYue = (data = {}) => { export const CancelYuYue = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CancelYuYue', data: data }) return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CancelYuYue', data: data })

@ -1,9 +1,9 @@
<template> <template>
<div> <div>
<el-dialog v-model="dialogVisible" title="排班信息" width="30%" @close="close()"> <el-dialog v-model="dialogVisible" title="排班信息" width="calc(40% + 80px)" @close="close()">
<el-form :model="ResourcesInfo" label-width="110px" v-loading="loading" style="padding-right: 40px;"> <el-form :model="ResourcesInfo" label-width="110px" v-loading="loading" style="padding-right: 40px;">
<el-form-item label="所属科室:" v-if="!departmentId"> <el-form-item label="所属科室:" v-if="!departmentId">
<el-select :filterable="true" clearable v-model="ResourcesInfo.department_id" placeholder="选择科室"> <el-select :filterable="true" clearable v-model="ResourcesInfo.department_id" placeholder="选择科室" @change="onDepartmentChange">
<el-option v-for="(item,index) in EnableDepartmentList" :key="index" :label="item.department_name" :value="item.id" /> <el-option v-for="(item,index) in EnableDepartmentList" :key="index" :label="item.department_name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -62,6 +62,13 @@
注意调整时令会影响该资源下全部模板 注意调整时令会影响该资源下全部模板
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="执行诊室:" v-if="showExecDeptSelect">
<el-select v-model="ResourcesInfo.execute_department_id" clearable filterable
placeholder="请选择执行诊室" style="width: 100%;">
<el-option v-for="item in childrenDeptList" :key="item.id"
:label="item.department_name" :value="item.id" />
</el-select>
</el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
@ -82,7 +89,8 @@
} from 'vue' } from 'vue'
import { import {
GetFilteredDepartmentList, GetFilteredDepartmentList,
SaveDepartmentResource SaveDepartmentResource,
GetChildrenDepartments
} from '@/api/api.js' } from '@/api/api.js'
import { import {
ElMessage ElMessage
@ -90,6 +98,9 @@
import { Delete } from '@element-plus/icons-vue' import { Delete } from '@element-plus/icons-vue'
let loading=ref(false); let loading=ref(false);
let dialogVisible=ref(true); let dialogVisible=ref(true);
let childrenDeptList = ref([])
let cachedExecuteDeptId = ref(null)
let showExecDeptSelect = ref(true)
let ResourcesInfo=ref({ let ResourcesInfo=ref({
id:null, id:null,
department_id:null, department_id:null,
@ -98,7 +109,8 @@
department_resources_addr:'', department_resources_addr:'',
time_mode: 0, // 0 1 time_mode: 0, // 0 1
time_range: [], // time_range: [], //
appointment_enabled: 1 // appointment_enabled: 1, //
execute_department_id: null
}) })
// //
@ -201,6 +213,9 @@
periods: convertPeriodsToObjects(season.periods) periods: convertPeriodsToObjects(season.periods)
})) }))
if (ResourcesInfo.value.execute_department_id === null) {
ResourcesInfo.value.execute_department_id = 0
}
loading.value = true loading.value = true
SaveDepartmentResource({info:ResourcesInfo.value}).then(res => { SaveDepartmentResource({info:ResourcesInfo.value}).then(res => {
loading.value = false loading.value = false
@ -222,6 +237,31 @@
const close = () => { const close = () => {
emit('closeAddResources') emit('closeAddResources')
} }
const loadChildrenDepts = (deptId) => {
if (!deptId) return
GetChildrenDepartments({ department_id: deptId }).then(res => {
if (res.status) {
childrenDeptList.value = res.data.list
if (!res.data.list || res.data.list.length === 0) {
showExecDeptSelect.value = false
ResourcesInfo.value.execute_department_id = null
return
}
showExecDeptSelect.value = true
const hasCached = cachedExecuteDeptId.value !== null &&
res.data.list.some(item => item.id === cachedExecuteDeptId.value)
if (hasCached) {
ResourcesInfo.value.execute_department_id = cachedExecuteDeptId.value
} else {
ResourcesInfo.value.execute_department_id = null
}
}
})
}
const onDepartmentChange = (newDeptId) => {
loadChildrenDepts(newDeptId)
}
const isNotNullOrEmpty=(str)=> { const isNotNullOrEmpty=(str)=> {
return str !== null && str !== ''; return str !== null && str !== '';
} }
@ -238,6 +278,8 @@
ResourcesInfo.value.department_resources_addr=props.resourceInfo.department_resources_addr ResourcesInfo.value.department_resources_addr=props.resourceInfo.department_resources_addr
ResourcesInfo.value.department_resources_status=props.resourceInfo.department_resources_status ResourcesInfo.value.department_resources_status=props.resourceInfo.department_resources_status
ResourcesInfo.value.appointment_enabled=props.resourceInfo.appointment_enabled ?? 1 ResourcesInfo.value.appointment_enabled=props.resourceInfo.appointment_enabled ?? 1
ResourcesInfo.value.execute_department_id=props.resourceInfo.execute_department_id
cachedExecuteDeptId.value=props.resourceInfo.execute_department_id
// //
ResourcesInfo.value.time_mode = props.resourceInfo.time_mode || 0 ResourcesInfo.value.time_mode = props.resourceInfo.time_mode || 0
@ -252,6 +294,7 @@
} }
ResourcesInfo.value.department_id=r_departmentId ResourcesInfo.value.department_id=r_departmentId
loadChildrenDepts(r_departmentId)
GetDepartmentEnableList(); GetDepartmentEnableList();
}) })
</script> </script>

@ -55,7 +55,7 @@
</div> </div>
</div> </div>
<div style="text-align: right; border-top: 1px solid #333; font-size: 16px;"> <div style="text-align: right; border-top: 1px solid #333; font-size: 16px;">
申请时间{{printInfo.entrust_date}} 申请时间{{printInfo.entrust_date}} {{printInfo.entrust_time}}
</div> </div>
</div> </div>
</template> </template>

@ -84,6 +84,8 @@
<el-checkbox-group v-model="auto_print" style="margin-left: 12px;"> <el-checkbox-group v-model="auto_print" style="margin-left: 12px;">
<el-checkbox label="1">预约完成后打印申请单</el-checkbox> <el-checkbox label="1">预约完成后打印申请单</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
<el-button class="do_button" type="primary" style="margin-left: 20px;" :disabled="buttonsDisabled">最优时间</el-button>
<el-button class="do_button" type="primary" :disabled="buttonsDisabled">单天全检</el-button>
</div> </div>
<div> <div>
<el-date-picker v-model="startDate" type="date" placeholder="跳转日期" @change="DatePickerChange()" /> <el-date-picker v-model="startDate" type="date" placeholder="跳转日期" @change="DatePickerChange()" />
@ -204,6 +206,7 @@
let print_shenqingdan_button = ref(null) let print_shenqingdan_button = ref(null)
let auto_print = ref(['1']); let auto_print = ref(['1']);
let shenqingdan_show = ref(false); let shenqingdan_show = ref(false);
let buttonsDisabled = ref(true)
let handleType = ref('add'); let handleType = ref('add');
let startDate = ref(''); let startDate = ref('');
let systemConfigs=ref([]);// let systemConfigs=ref([]);//
@ -276,6 +279,22 @@
GetEnablePlanFunc(); GetEnablePlanFunc();
} }
} }
checkSameSourceRoom()
}
const checkSameSourceRoom = () => {
if (selectedRows.value.length === 0) {
buttonsDisabled.value = true
return
}
const firstExecId = selectedRows.value[0]?.department_resources?.execute_department_id
if (firstExecId === undefined || firstExecId === null) {
buttonsDisabled.value = true
return
}
const allSame = selectedRows.value.every(
(v) => v.department_resources?.execute_department_id === firstExecId
)
buttonsDisabled.value = !allSame
} }
const isSelected = (row) => { const isSelected = (row) => {
return selectedRows.value.findIndex(item => item.id === row.id) > -1; return selectedRows.value.findIndex(item => item.id === row.id) > -1;

@ -47,6 +47,13 @@
<el-switch v-model="DeviceInfo.status" size="large" active-text="" inactive-text="" <el-switch v-model="DeviceInfo.status" size="large" active-text="" inactive-text=""
:active-value="1" :inactive-value="0" /> :active-value="1" :inactive-value="0" />
</el-form-item> </el-form-item>
<el-form-item label="执行诊室:">
<el-select v-model="DeviceInfo.execute_department_id" clearable filterable
placeholder="请选择执行诊室" style="width: 100%;">
<el-option v-for="item in childrenDeptList" :key="item.id"
:label="item.department_name" :value="item.id" />
</el-select>
</el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
@ -63,12 +70,14 @@
<script setup> <script setup>
import { import {
ref, ref,
onMounted onMounted,
nextTick
} from 'vue' } from 'vue'
import { import {
GetDeptDeviceListPage, GetDeptDeviceListPage,
SaveDeptDevice, SaveDeptDevice,
DelDeptDevice DelDeptDevice,
GetChildrenDepartments
} from '@/api/api.js' } from '@/api/api.js'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
@ -80,10 +89,16 @@
let DeviceInfo = ref({ let DeviceInfo = ref({
id: null, id: null,
device_name: '', device_name: '',
status: 1 status: 1,
execute_department_id: null
}) })
let dialogVisible = ref(false); let dialogVisible = ref(false);
let childrenDeptList = ref([])
let loginUserinfo = ref(null)
if (sessionStorage.getItem("LoginUserInfo")) {
loginUserinfo.value = JSON.parse(sessionStorage.getItem("LoginUserInfo"))
}
// //
let tableData = ref([]) let tableData = ref([])
@ -119,16 +134,22 @@
DeviceInfo.value = { DeviceInfo.value = {
id: null, id: null,
device_name: '', device_name: '',
status: 1 status: 1,
execute_department_id: null
} }
loadChildrenDepts()
} }
const Edit = (row) => { const Edit = async (row) => {
await loadChildrenDepts()
DeviceInfo.value = { DeviceInfo.value = {
id: row.id, id: row.id,
device_name: row.device_name, device_name: row.device_name,
status: row.status status: row.status,
execute_department_id: null
} }
dialogVisible.value = true dialogVisible.value = true
await nextTick()
DeviceInfo.value.execute_department_id = row.execute_department_id
} }
const Del = (id) => { const Del = (id) => {
ElMessageBox.confirm( ElMessageBox.confirm(
@ -150,6 +171,19 @@
}) })
}) })
} }
const loadChildrenDepts = async () => {
const deptId = loginUserinfo.value?.department_id
if (!deptId) return
try {
const res = await GetChildrenDepartments({ department_id: deptId })
if (res.status) {
childrenDeptList.value = res.data.list
}
} catch (e) {
childrenDeptList.value = []
}
}
const Save = () => { const Save = () => {
loading.value = true loading.value = true
SaveDeptDevice({ Info: DeviceInfo.value }).then(res => { SaveDeptDevice({ Info: DeviceInfo.value }).then(res => {

Loading…
Cancel
Save