| | |
| | | <template> |
| | | <ContentWrap> |
| | | <!-- 搜索工作栏 --> |
| | | <el-form |
| | | class="-mb-15px" |
| | | :model="queryParams" |
| | | ref="queryFormRef" |
| | | :inline="true" |
| | | label-width="68px" |
| | | > |
| | | <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px"> |
| | | <el-form-item label="患者编号" prop="patId"> |
| | | <el-input |
| | | v-model="queryParams.patId" |
| | | placeholder="请输入患者编号" |
| | | clearable |
| | | @keyup.enter="handleQuery" |
| | | class="!w-240px" |
| | | /> |
| | | <el-input v-model="queryParams.patId" placeholder="请输入患者编号" clearable @keyup.enter="handleQuery" |
| | | class="!w-240px" /> |
| | | </el-form-item> |
| | | <el-form-item label="患者姓名" prop="patName"> |
| | | <el-input |
| | | v-model="queryParams.patName" |
| | | placeholder="请输入患者姓名" |
| | | clearable |
| | | @keyup.enter="handleQuery" |
| | | class="!w-240px" |
| | | /> |
| | | <el-input v-model="queryParams.patName" placeholder="请输入患者姓名" clearable @keyup.enter="handleQuery" |
| | | class="!w-240px" /> |
| | | </el-form-item> |
| | | <el-form-item label="预约时段" prop="bookTimeslot"> |
| | | <el-select |
| | | v-model="queryParams.bookTimeslot" |
| | | placeholder="请输入预约时段" |
| | | clearable |
| | | class="!w-240px" |
| | | > |
| | | <el-option |
| | | v-for="dict in getIntDictOptions(DICT_TYPE.ECG_BOOK_TIMESLOT)" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | <el-select v-model="queryParams.bookTimeslot" placeholder="请输入预约时段" clearable class="!w-240px"> |
| | | <el-option v-for="dict in getIntDictOptions(DICT_TYPE.ECG_BOOK_TIMESLOT)" :key="dict.value" |
| | | :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="检查类型" prop="bookCheckType"> |
| | | <el-select |
| | | v-model="queryParams.bookCheckType" |
| | | placeholder="请选择检查类型" |
| | | clearable |
| | | class="!w-240px" |
| | | > |
| | | <el-option |
| | | v-for="dict in checkTypeStore.getCheckTypeOptions()" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | <el-form-item label="检查项目" prop="bookCheckType"> |
| | | <el-select v-model="queryParams.bookCheckType" placeholder="请选择检查项目" clearable class="!w-240px"> |
| | | <el-option v-for="dict in checkTypeStore.getCheckTypeOptions()" :key="dict.value" :label="dict.label" |
| | | :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="排队序号" prop="seqNum"> |
| | | <el-input |
| | | v-model="queryParams.seqNum" |
| | | placeholder="请输入排队序号" |
| | | clearable |
| | | @keyup.enter="handleQuery" |
| | | class="!w-240px" |
| | | /> |
| | | <el-input v-model="queryParams.seqNum" placeholder="请输入排队序号" clearable @keyup.enter="handleQuery" |
| | | class="!w-240px" /> |
| | | </el-form-item> |
| | | <el-form-item label="排队状态" prop="status"> |
| | | <el-select |
| | | multiple |
| | | v-model="queryParams.status" |
| | | placeholder="请选择排队状态" |
| | | clearable |
| | | class="!w-240px" |
| | | > |
| | | <el-option |
| | | v-for="dict in getIntDictOptions(DICT_TYPE.ECG_QUEUE_STATUS)" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | <el-select multiple v-model="queryParams.status" placeholder="请选择排队状态" clearable class="!w-240px"> |
| | | <el-option v-for="dict in getIntDictOptions(DICT_TYPE.ECG_QUEUE_STATUS)" :key="dict.value" :label="dict.label" |
| | | :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="诊室编号" prop="roomId"> |
| | | <el-input |
| | | v-model="queryParams.roomId" |
| | | placeholder="请输入诊室编号" |
| | | clearable |
| | | @keyup.enter="handleQuery" |
| | | class="!w-240px" |
| | | /> |
| | | <el-input v-model="queryParams.roomId" placeholder="请输入诊室编号" clearable @keyup.enter="handleQuery" |
| | | class="!w-240px" /> |
| | | </el-form-item> |
| | | <el-form-item label="诊疗床号" prop="bedNo"> |
| | | <el-input |
| | | v-model="queryParams.bedNo" |
| | | placeholder="请输入诊疗床号" |
| | | clearable |
| | | @keyup.enter="handleQuery" |
| | | class="!w-240px" |
| | | /> |
| | | <el-input v-model="queryParams.bedNo" placeholder="请输入诊疗床号" clearable @keyup.enter="handleQuery" |
| | | class="!w-240px" /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
| | | <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
| | | <!-- |
| | | <el-button @click="handleQuery"> |
| | | <Icon icon="ep:search" class="mr-5px" /> 搜索 |
| | | </el-button> |
| | | <el-button @click="resetQuery"> |
| | | <Icon icon="ep:refresh" class="mr-5px" /> 重置 |
| | | </el-button> |
| | | <!-- |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | |
| | | <Icon icon="ep:plus" class="mr-5px" /> 新增 |
| | | </el-button> |
| | | --> |
| | | <!-- |
| | | <!-- |
| | | <el-button |
| | | type="success" |
| | | plain |
| | |
| | | <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
| | | <el-table-column label="操作" align="center" min-width="120px"> |
| | | <template #default="scope"> |
| | | <!-- <el-button |
| | | <!-- <el-button |
| | | link |
| | | type="primary" |
| | | @click="openAppointmentForm('preview', scope.row.patId, scope.row.bookCheckType)" |
| | |
| | | 删除 |
| | | </el-button> |
| | | --> |
| | | <el-button |
| | | link |
| | | type="danger" |
| | | @click="handleJump(scope.row)" |
| | | v-if="scope.row.status === 10" |
| | | v-hasPermi="['ecg:queue:jump']" |
| | | > |
| | | {{scope.row.jumpFlag === 0? "加急" : "取消加急"}} |
| | | <el-button link type="danger" @click="handleJump(scope.row)" v-if="scope.row.status === 10" |
| | | v-hasPermi="['ecg:queue:jump']"> |
| | | {{ scope.row.jumpFlag === 0 ? "加急" : "取消加急" }} |
| | | </el-button> |
| | | <el-button |
| | | link |
| | | type="danger" |
| | | @click="recall(scope.row)" |
| | | v-if="scope.row.status === 3 || scope.row.status === 5 || scope.row.status === 7" |
| | | v-hasPermi="['ecg:queue:recall']" |
| | | > |
| | | <el-button link type="danger" @click="recall(scope.row)" |
| | | v-if="scope.row.status === 3 || scope.row.status === 5 || scope.row.status === 7" |
| | | v-hasPermi="['ecg:queue:recall']"> |
| | | 召回 |
| | | </el-button> |
| | | <el-button |
| | | link |
| | | type="danger" |
| | | @click="passWaitingPatient(scope.row)" |
| | | v-if="scope.row.status === 10" |
| | | v-hasPermi="['ecg:queue:pass']" |
| | | > |
| | | <el-button link type="danger" @click="passWaitingPatient(scope.row)" v-if="scope.row.status === 10" |
| | | v-hasPermi="['ecg:queue:pass']"> |
| | | 过号 |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column label="id" align="center" prop="id" />--> |
| | | <el-table-column label="就诊流水号" align="center" prop="episodeId" min-width="110px"/> |
| | | <el-table-column label="申请号" align="center" prop="applyNo" min-width="110px"/> |
| | | <!-- <el-table-column label="id" align="center" prop="id" />--> |
| | | <el-table-column label="申请单号" align="center" prop="applyNo" min-width="110px" /> |
| | | <el-table-column label="排队序号" align="center" prop="seqNum" /> |
| | | <el-table-column label="预约号" align="center" prop="bookSeqNum" /> |
| | | <el-table-column label="过号标记" align="center" prop="passed" /> |
| | | <el-table-column label="患者编号" align="center" prop="patId" /> |
| | | <el-table-column label="患者姓名" align="center" prop="patName" min-width="90px" /><el-table-column label="检查项目" |
| | | align="center" prop="bookCheckType" min-width="100px"> |
| | | <template #default="scope"> |
| | | {{ getCheckTypeName(scope.row.bookCheckType) }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="来源" align="center" width="90px"> |
| | | <template #default="scope"> |
| | | <!-- 优先用预约单平铺值,回退到 patDetails 快照 --> |
| | | <dict-tag :type="DICT_TYPE.ECG_PAT_SOURCE" :value="scope.row.patSrc ?? scope.row.patDetails?.source ?? 0" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="预约时段" align="center" prop="bookTimeslot" min-width="100px"> |
| | | <template #default="scope"> |
| | | <dict-tag :type="DICT_TYPE.ECG_BOOK_TIMESLOT" :value="scope.row.bookTimeslot" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="状态" align="center" prop="status"> |
| | | <template #default="scope"> |
| | | <dict-tag :type="DICT_TYPE.ECG_QUEUE_STATUS" :value="scope.row.status" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="VIP" align="center" prop="isVip" /> |
| | | <el-table-column label="就诊号" align="center" prop="episodeId" min-width="110px" /> |
| | | <!-- 本列标签由「就诊卡号」改为「门诊号」(经确认)。原因(详见《部署清单》5.1): |
| | | HIS 在卡号槽位传空,medical_card 全库 159,116 行**无一非空**; |
| | | 实测该列 99.9% 显示的是 outpatient_no(65% 形如身份证、35% 为门诊号)。 |
| | |
| | | {{ scope.row.doctorAdviceNo || '-' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="患者姓名" align="center" prop="patName" min-width="90px" /> |
| | | <el-table-column label="性别" align="center" prop="patGender" width="70px"> |
| | | <template #default="scope">{{ genderFormat(scope.row.patGender) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="来源" align="center" width="90px"> |
| | | <template #default="scope"> |
| | | <!-- 优先用预约单平铺值,回退到 patDetails 快照 --> |
| | | <dict-tag :type="DICT_TYPE.ECG_PAT_SOURCE" |
| | | :value="scope.row.patSrc ?? scope.row.patDetails?.source ?? 0" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="出生日期" align="center" min-width="110px"> |
| | | <template #default="scope">{{ formatDateOnly(scope.row.patBirthday) }}</template> |
| | |
| | | <el-table-column label="年龄" align="center" width="80px"> |
| | | <template #default="scope">{{ formatAge(scope.row.patBirthday) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="检查类型" align="center" prop="bookCheckType" min-width="100px"> |
| | | <template #default="scope"> |
| | | {{getCheckTypeName(scope.row.bookCheckType)}} |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="病区" align="center" min-width="110px"> |
| | | <template #default="scope">{{ scope.row.patWardDesc || scope.row.patDetails?.wardDesc || '-' }}</template> |
| | | </el-table-column> |
| | |
| | | <el-table-column label="开单医师" align="center" prop="doctor" min-width="100px"> |
| | | <template #default="scope">{{ scope.row.doctor || '-' }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="预约时段" align="center" prop="bookTimeslot" min-width="100px"> |
| | | |
| | | <el-table-column label="多耐药" width="150" align="center" prop="tolerance"> |
| | | <template #default="scope"> |
| | | <dict-tag :type="DICT_TYPE.ECG_BOOK_TIMESLOT" :value="scope.row.bookTimeslot" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="状态" align="center" prop="status" > |
| | | <template #default="scope"> |
| | | <dict-tag :type="DICT_TYPE.ECG_QUEUE_STATUS" :value="scope.row.status" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="多耐药" width="150" align="center" prop="tolerance" > |
| | | <template #default="scope"> |
| | | <!-- 需求6:多耐走字典;NULL 按"无"显示(Q12) --> |
| | | <dict-tag :type="DICT_TYPE.ECG_TOLERANCE" :value="scope.row.tolerance ?? 0" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="VIP" align="center" prop="isVip" /> |
| | | <el-table-column label="过号标记" align="center" prop="passed" /> |
| | | <el-table-column label="过期标记" align="center" prop="expired" /> |
| | | <el-table-column label="诊室编号" align="center" prop="roomId" /> |
| | | <el-table-column label="诊室名称" align="center" prop="roomName" /> |
| | | <el-table-column label="诊疗床号" align="center" prop="bedNo" /> |
| | | <el-table-column |
| | | label="创建时间" |
| | | align="center" |
| | | prop="createTime" |
| | | :formatter="dateFormatter" |
| | | width="180px" |
| | | /> |
| | | <el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" /> |
| | | </el-table> |
| | | <!-- 分页 --> |
| | | <Pagination |
| | | :total="total" |
| | | v-model:page="queryParams.pageNo" |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | <Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" |
| | | @pagination="getList" /> |
| | | </ContentWrap> |
| | | |
| | | <!-- 表单弹窗:添加/修改 --> |
| | |
| | | import { dateFormatter } from '@/utils/formatTime' |
| | | import download from '@/utils/download' |
| | | import { QueueApi, QueueVO } from '@/api/ecg/queue' |
| | | import {DICT_TYPE, getIntDictOptions} from '@/utils/dict' |
| | | import {DoctorApi, PatientVO} from "@/api/ecg/doctor"; |
| | | import {useCheckTypeStore} from "@/store/modules/checkType"; |
| | | import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
| | | import { DoctorApi, PatientVO } from "@/api/ecg/doctor"; |
| | | import { useCheckTypeStore } from "@/store/modules/checkType"; |
| | | import AppointmentForm from "@/views/ecg/appointment/AppointmentForm.vue"; |
| | | import {genderFormat} from "@/utils/stringUtil"; |
| | | import {getCheckTypeName} from "../../../utils/checkTypeFormatter"; |
| | | import { genderFormat } from "@/utils/stringUtil"; |
| | | import { getCheckTypeName } from "../../../utils/checkTypeFormatter"; |
| | | // 需求1:患者信息 18 项的公共格式化(年龄、距今天数等) |
| | | import { formatAge, formatDaysFromOrder, formatDateTime, formatDateOnly, resolveCardNo } from '@/utils/patientInfo' |
| | | |
| | |
| | | message.success(t('common.delSuccess')) |
| | | // 刷新列表 |
| | | await getList() |
| | | } catch {} |
| | | } catch { } |
| | | } |
| | | |
| | | /** 插队按钮操作 */ |
| | | const handleJump = async (item: QueueVO ) => { |
| | | const handleJump = async (item: QueueVO) => { |
| | | try { |
| | | if (item.jumpFlag === 0) |
| | | item.jumpFlag = 1 |
| | |
| | | message.success(data) |
| | | // 刷新列表 |
| | | await getList() |
| | | } catch {} |
| | | } catch { } |
| | | } |
| | | |
| | | const passWaitingPatient = async (item: QueueVO) => { |