|
@@ -1,136 +1,35 @@
|
|
|
-<template>
|
|
|
- <page-layer>
|
|
|
- <template #header>
|
|
|
- 质控时间:
|
|
|
- <el-date-picker style="width: 180px" v-model="queryParam.date" type="daterange" format="YYYY-MM-DD"
|
|
|
- value-format="YYYY-MM-DD"/>
|
|
|
- 科室:
|
|
|
- <el-select style="width: 200px"
|
|
|
- v-model="queryParam.deptCode"
|
|
|
- clearable
|
|
|
- collapse-tags
|
|
|
- filterable
|
|
|
- multiple
|
|
|
- remote>
|
|
|
- <el-option v-for="item in deptList" :key="item.code" :label="item.name" :value="item.code">
|
|
|
- <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
|
|
|
- <el-divider direction="vertical"></el-divider>
|
|
|
- <span>{{ item.name }}</span>
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- 管床医生:
|
|
|
- <SelectStaffCode style="width: 120px" v-model="queryParam" :name="['tubeBedDoctor', 'tubeBedDoctorName']"/>
|
|
|
-
|
|
|
- <el-button @click="queryClick">查询</el-button>
|
|
|
-
|
|
|
- <el-button @click="excelClick">导出excel</el-button>
|
|
|
- </template>
|
|
|
-
|
|
|
- <template #main>
|
|
|
- <xc-table :local-data="data" :final-height="getWindowSize.h / 1.2">
|
|
|
- <el-table-column type="expand">
|
|
|
- <template #default="{row}">
|
|
|
- <JsonViewer :value="row.mapMessage"
|
|
|
- copyable
|
|
|
- :expandDepth="3"/>
|
|
|
- <JsonViewer :value="row.qualityControlOpinions"
|
|
|
- copyable
|
|
|
- :expandDepth="3"/>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="inpatientNo" label="住院号" width="120"/>
|
|
|
- <el-table-column prop="admissTimes" label="次数" width="40"/>
|
|
|
- <el-table-column prop="name" label="姓名" width="220"/>
|
|
|
- <el-table-column prop="gradingScale" label="病历评级"/>
|
|
|
- <el-table-column prop="age" label="年龄"/>
|
|
|
- <el-table-column prop="clinicDiagStr" label="门(急)诊诊断"/>
|
|
|
- <el-table-column prop="admissDiag" label="入院诊断"/>
|
|
|
- <el-table-column prop="admissDate" label="入院时间" width="220"/>
|
|
|
- <el-table-column prop="deptName" label="入院科室" width="220"/>
|
|
|
- <el-table-column prop="zkListName" label="转科"/>
|
|
|
- <el-table-column prop="disDate" label="出院时间"/>
|
|
|
- <el-table-column prop="admissDay" label="住院天数"/>
|
|
|
- <el-table-column prop="totalCharge" label="住院费用"/>
|
|
|
- <el-table-column prop="disDeptName" label="出院科室"/>
|
|
|
- <el-table-column prop="disDiag" label="出院主诊断"/>
|
|
|
- <el-table-column prop="typing" label="病历分型"/>
|
|
|
- <el-table-column prop="deptDirectorName" label="主任医生"/>
|
|
|
- <el-table-column prop="consultPhysicianName" label="主治医生"/>
|
|
|
- <el-table-column prop="tubeBedDoctorName" label="管床医生" width="220"/>
|
|
|
- <el-table-column prop="deathName" label="是否死亡"/>
|
|
|
- <el-table-column prop="fdcrb" label="法定传染病"/>
|
|
|
- <el-table-column prop="ssbm" label="手术编码"/>
|
|
|
- <el-table-column prop="ssmc" label="手术名称"/>
|
|
|
- <el-table-column prop="operatorName" label="术者"/>
|
|
|
- <el-table-column prop="level" label="手术级别"/>
|
|
|
- <el-table-column prop="anaesthesiaName" label="麻醉方式"/>
|
|
|
- <el-table-column prop="qjcs" label="抢救次数"/>
|
|
|
- <el-table-column prop="cutName" label="切口分类"/>
|
|
|
- <el-table-column prop="pathologicDiagStr" label="病理诊断"/>
|
|
|
- <el-table-column prop="allergicMedicine" label="药物过敏"/>
|
|
|
- <el-table-column prop="kssName" label="抗生素使用"/>
|
|
|
- <el-table-column prop="xjpyName" label="细菌培养送检"/>
|
|
|
-
|
|
|
- </xc-table>
|
|
|
- </template>
|
|
|
- </page-layer>
|
|
|
-</template>
|
|
|
-
|
|
|
-<script setup name='FinalQualityControl'>
|
|
|
-import PageLayer from "@/layout/PageLayer.vue";
|
|
|
-import {ref} from "vue";
|
|
|
-import {getDept} from "@/api/public-api";
|
|
|
-import SelectStaffCode from "@/components/SelectStaffCode.vue";
|
|
|
-import {getDateRangeFormatDate} from "@/utils/date";
|
|
|
+<script setup>
|
|
|
+import {onMounted, ref} from "vue";
|
|
|
+import {currentAndAFewDaysAgo, dateRangeAddTime} from "@/utils/date";
|
|
|
+import {finalControl} from "@/api/emr-control/emr-control";
|
|
|
import XcTable from "@/components/xiao-chan/xc-table/XcTable.vue";
|
|
|
-import {getWindowSize} from "@/utils/window-size";
|
|
|
-import {isDev} from "@/utils/public";
|
|
|
-import {ExcelName} from "@/utils/ExportExcel";
|
|
|
-import {terminalPatients} from "@/api/zhu-yuan-yi-sheng/emr-control-rule";
|
|
|
-import {qieKouName} from "@/components/si-sheet-upload/jieSuanDanXiuGai";
|
|
|
-import {uuid} from "@/utils/getUuid";
|
|
|
-import {sendAMessage} from "@/utils/websocket";
|
|
|
-
|
|
|
-const socketUrl = import.meta.env.VITE_SOCKET_URL
|
|
|
-let id = 'final_emr_rule' + uuid(10, 10)
|
|
|
+import {setCallback} from "@/utils/websocket";
|
|
|
+import {Export} from "@/utils/ExportExcel";
|
|
|
+import {makePercentage} from "@/components/progress/progUtils";
|
|
|
+import {openSocket, sid} from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-func/emr-socket";
|
|
|
|
|
|
-const queryParam = ref({
|
|
|
- date: '',
|
|
|
- deptCode: '',
|
|
|
- tubeBedDoctor: '',
|
|
|
- startDate: '',
|
|
|
- endDate: '',
|
|
|
- socketId: ''
|
|
|
-})
|
|
|
-
|
|
|
-const deptList = ref([])
|
|
|
+const dateRange = ref([])
|
|
|
const data = ref([])
|
|
|
-
|
|
|
+const progressBar = ref({
|
|
|
+ current: 0,
|
|
|
+ total: 0,
|
|
|
+ progress: 0,
|
|
|
+})
|
|
|
const queryClick = () => {
|
|
|
-
|
|
|
- let {startTime, endTime} = getDateRangeFormatDate(queryParam.value.date)
|
|
|
- queryParam.value.startDate = startTime
|
|
|
- queryParam.value.endDate = endTime
|
|
|
- queryParam.value.socketId = id
|
|
|
-
|
|
|
- terminalPatients(queryParam.value).then((res) => {
|
|
|
- data.value = res
|
|
|
- console.log(res)
|
|
|
- setTheName(data.value)
|
|
|
- })
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-const setTheName = (val) => {
|
|
|
- val.forEach(item => {
|
|
|
- item.cutName = qieKouName(item.cut, item.heal)
|
|
|
- item.kssName = yesOrNo(item.kss)
|
|
|
- item.xjpyName = yesOrNo(item.xjpy)
|
|
|
+ progressBar.value.progress = 0
|
|
|
+ let {start, end} = dateRangeAddTime(dateRange.value)
|
|
|
+ let temp = {
|
|
|
+ startDate: start,
|
|
|
+ endDate: end,
|
|
|
+ socketId: sid
|
|
|
+ }
|
|
|
+ finalControl(temp).then((res) => {
|
|
|
+ let {patient} = res
|
|
|
+ data.value = patient
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-const excelClick = () => {
|
|
|
+const exportExcelClick = () => {
|
|
|
let title = {
|
|
|
inpatientNo: '住院号',
|
|
|
admissTimes: '次数',
|
|
@@ -167,55 +66,87 @@ const excelClick = () => {
|
|
|
message: '详情',
|
|
|
opinion: '指控意见'
|
|
|
}
|
|
|
- ExcelName(data.value, title)
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-const yesOrNo = (val) => {
|
|
|
- if (val == 1) {
|
|
|
- return "是";
|
|
|
- }
|
|
|
- if (val == 2) {
|
|
|
- return "否";
|
|
|
- }
|
|
|
- return "";
|
|
|
-};
|
|
|
-
|
|
|
-let socket = null
|
|
|
-
|
|
|
-const webSocket = () => {
|
|
|
- if (socket != null) return
|
|
|
- socket = new WebSocket(socketUrl + id);
|
|
|
-
|
|
|
- socket.onopen = () => {
|
|
|
- console.log('临时websocket', socketUrl + id)
|
|
|
- }
|
|
|
-
|
|
|
- socket.onmessage = (e) => {
|
|
|
- let data = JSON.parse(e.data)
|
|
|
- sendAMessage(data.name, data.message)
|
|
|
- }
|
|
|
+ Export(data.value, title, `${dateRange.value[0]} - ${dateRange.value[1]} 终末质控`)
|
|
|
}
|
|
|
|
|
|
-onDeactivated(() => {
|
|
|
- socket.close()
|
|
|
- socket = null
|
|
|
-})
|
|
|
+onMounted(async () => {
|
|
|
+ dateRange.value = await currentAndAFewDaysAgo()
|
|
|
+ openSocket()
|
|
|
+ setCallback('FINAL_CONTROL', (data) => {
|
|
|
+ progressBar.value = data
|
|
|
+ progressBar.value.progress = makePercentage(progressBar.value.current, progressBar.value.total)
|
|
|
+ })
|
|
|
|
|
|
-onActivated(() => {
|
|
|
- webSocket()
|
|
|
})
|
|
|
|
|
|
-onMounted(() => {
|
|
|
- if (isDev) {
|
|
|
- queryParam.value.date = ['2023-05-10', '2023-05-10']
|
|
|
- }
|
|
|
- getDept().then((res) => {
|
|
|
- deptList.value = res
|
|
|
- });
|
|
|
-})
|
|
|
</script>
|
|
|
|
|
|
+<template>
|
|
|
+ <el-container>
|
|
|
+ <el-header style="height: max-content">
|
|
|
+ 质控时间:
|
|
|
+ <el-date-picker style="width: 180px" v-model="dateRange" type="daterange" format="YYYY-MM-DD"
|
|
|
+ value-format="YYYY-MM-DD"/>
|
|
|
+ <el-divider direction="vertical"/>
|
|
|
+ <el-button @click="queryClick">查询</el-button>
|
|
|
+ <el-button @click="exportExcelClick">导出Excel</el-button>
|
|
|
+ </el-header>
|
|
|
+ <el-main>
|
|
|
+ <el-auto-resizer>
|
|
|
+ <template #default="{ height, width }">
|
|
|
+ <el-progress :percentage="progressBar.progress"/>
|
|
|
+ <xc-table :local-data="data"
|
|
|
+ :final-height="height - 33 - 15"
|
|
|
+ :default-expand-all="false">
|
|
|
+ <el-table-column type="expand">
|
|
|
+ <template #default="{row}">
|
|
|
+ <JsonViewer :value="row.mapMessage"
|
|
|
+ copyable
|
|
|
+ :expandDepth="3"/>
|
|
|
+ <JsonViewer :value="row.qualityControlOpinions"
|
|
|
+ copyable
|
|
|
+ :expandDepth="3"/>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="inpatientNo" label="住院号" width="120"/>
|
|
|
+ <el-table-column prop="admissTimes" label="次数" width="40"/>
|
|
|
+ <el-table-column prop="name" label="姓名" width="220"/>
|
|
|
+ <el-table-column prop="gradingScale" label="病历评级"/>
|
|
|
+ <el-table-column prop="age" label="年龄"/>
|
|
|
+ <el-table-column prop="clinicDiagStr" label="门(急)诊诊断"/>
|
|
|
+ <el-table-column prop="admissDiag" label="入院诊断"/>
|
|
|
+ <el-table-column prop="admissDate" label="入院时间" width="220"/>
|
|
|
+ <el-table-column prop="deptName" label="入院科室" width="220"/>
|
|
|
+ <el-table-column prop="zkListName" label="转科"/>
|
|
|
+ <el-table-column prop="disDate" label="出院时间"/>
|
|
|
+ <el-table-column prop="admissDay" label="住院天数"/>
|
|
|
+ <el-table-column prop="totalCharge" label="住院费用"/>
|
|
|
+ <el-table-column prop="disDeptName" label="出院科室"/>
|
|
|
+ <el-table-column prop="disDiag" label="出院主诊断"/>
|
|
|
+ <el-table-column prop="typing" label="病历分型"/>
|
|
|
+ <el-table-column prop="deptDirectorName" label="主任医生"/>
|
|
|
+ <el-table-column prop="consultPhysicianName" label="主治医生"/>
|
|
|
+ <el-table-column prop="tubeBedDoctorName" label="管床医生" width="220"/>
|
|
|
+ <el-table-column prop="deathName" label="是否死亡"/>
|
|
|
+ <el-table-column prop="fdcrb" label="法定传染病"/>
|
|
|
+ <el-table-column prop="ssbm" label="手术编码"/>
|
|
|
+ <el-table-column prop="ssmc" label="手术名称"/>
|
|
|
+ <el-table-column prop="operatorName" label="术者"/>
|
|
|
+ <el-table-column prop="level" label="手术级别"/>
|
|
|
+ <el-table-column prop="anaesthesiaName" label="麻醉方式"/>
|
|
|
+ <el-table-column prop="qjcs" label="抢救次数"/>
|
|
|
+ <el-table-column prop="cutName" label="切口分类"/>
|
|
|
+ <el-table-column prop="pathologicDiagStr" label="病理诊断"/>
|
|
|
+ <el-table-column prop="allergicMedicine" label="药物过敏"/>
|
|
|
+ <el-table-column prop="kssName" label="抗生素使用"/>
|
|
|
+ <el-table-column prop="xjpyName" label="细菌培养送检"/>
|
|
|
+ </xc-table>
|
|
|
+ </template>
|
|
|
+ </el-auto-resizer>
|
|
|
+ </el-main>
|
|
|
+ </el-container>
|
|
|
+</template>
|
|
|
+
|
|
|
<style scoped lang="scss">
|
|
|
|
|
|
</style>
|