|
@@ -0,0 +1,402 @@
|
|
|
+<template>
|
|
|
+ <el-container>
|
|
|
+ <el-header>
|
|
|
+ <el-row style="color: red">
|
|
|
+ 核对变更医嘱期间医生可能对该窗口的医嘱进行了修改,请及时刷新。如医嘱较多,可先确认已核对的部分再继续核对。窗口已设置自动刷新,时间为15分钟!
|
|
|
+ </el-row>
|
|
|
+ </el-header>
|
|
|
+ <el-main>
|
|
|
+ <div style="width: 100%">
|
|
|
+ <el-row>
|
|
|
+ <el-col>
|
|
|
+ <el-select filterable v-model="queryParam.wardCode" @change="initPatintBedNo" style="width: 130px;" size="small">
|
|
|
+ <el-option v-for="item in ward" :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>
|
|
|
+ 时间范围:<el-date-picker
|
|
|
+ v-model="queryParam.startDate"
|
|
|
+ type="datetime"
|
|
|
+ size="small"
|
|
|
+ :clearable="false"
|
|
|
+ format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ style="width: 150px"/>
|
|
|
+ 至
|
|
|
+ <el-date-picker
|
|
|
+ v-model="queryParam.endDate"
|
|
|
+ type="datetime"
|
|
|
+ size="small"
|
|
|
+ :clearable="false"
|
|
|
+ format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ style="width: 150px;"/>
|
|
|
+ 打印选择:<el-select v-model="queryParam.printFlag" style="width: 80px;" size="small">
|
|
|
+ <el-option label="全部" value="0"></el-option>
|
|
|
+ <el-option label="未打印" value="1"></el-option>
|
|
|
+ <el-option label="已打印" value="2"></el-option>
|
|
|
+ </el-select>
|
|
|
+ 变更单类型:<el-select @change="handleChangeType" v-model="queryParam.changeClass" style="width: 100px;" size="small">
|
|
|
+ <el-option label="全部" value="0"></el-option>
|
|
|
+ <el-option label="长期" value="1"></el-option>
|
|
|
+ <el-option label="长期口服" value="2"></el-option>
|
|
|
+ <el-option label="长期输液" value="3"></el-option>
|
|
|
+ <el-option label="长期非口服" value="4"></el-option>
|
|
|
+ <el-option label="临时" value="5"></el-option>
|
|
|
+ <el-option label="临时口服" value="6"></el-option>
|
|
|
+ <el-option label="临时输液" value="7"></el-option>
|
|
|
+ <el-option label="治疗项目" value="8"></el-option>
|
|
|
+ </el-select>
|
|
|
+ 床位范围:<el-select v-model="queryParam.startBedNo"
|
|
|
+ clearable
|
|
|
+ style="width: 70px">
|
|
|
+ <el-option v-for="item in patintList"
|
|
|
+ :key="item.bedNo"
|
|
|
+ :label="item.bedNo"
|
|
|
+ :value="item.bedNo">
|
|
|
+ <span>{{ item.bedNo }}</span>
|
|
|
+ <el-divider direction="vertical"></el-divider>
|
|
|
+ <span>{{ item.inpatientNo }}</span>
|
|
|
+ <el-divider direction="vertical"></el-divider>
|
|
|
+ <span>{{ item.name }}</span>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ 至
|
|
|
+ <el-select v-model="queryParam.endBedNo"
|
|
|
+ style="width: 70px"
|
|
|
+ clearable>
|
|
|
+ <el-option v-for="item in reverPatintList"
|
|
|
+ :key="item.bedNo"
|
|
|
+ :label="item.bedNo"
|
|
|
+ :value="item.bedNo">
|
|
|
+ <span>{{ item.bedNo }}</span>
|
|
|
+ <el-divider direction="vertical"></el-divider>
|
|
|
+ <span>{{ item.inpatientNo }}</span>
|
|
|
+ <el-divider direction="vertical"></el-divider>
|
|
|
+ <span>{{ item.name }}</span>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <div style="margin-top: 5px">
|
|
|
+ <el-row gutter="10" style="margin-left: 25%">
|
|
|
+ <el-col span="6">
|
|
|
+ <el-button icon="Search" type="primary" @click="queryInfo">查询</el-button>
|
|
|
+ </el-col>
|
|
|
+ <el-col span="6">
|
|
|
+ <el-button icon="Printer" type="success" @click="printInfo">打印选中</el-button>
|
|
|
+ </el-col>
|
|
|
+ <el-col span="6">
|
|
|
+ <el-checkbox v-model="checkedAll" size="small" border @change="selectAll">全选</el-checkbox>
|
|
|
+ </el-col>
|
|
|
+ <el-col span="6">
|
|
|
+ <el-button type="danger" @click="saveData">确认变更</el-button>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <el-tabs v-model="activeName" >
|
|
|
+ <el-tab-pane label="编辑" name="first">
|
|
|
+ <div class="topSize" style="font-size: 25px;font-weight:bold;text-align: center">
|
|
|
+ {{titleData}}
|
|
|
+ </div>
|
|
|
+ <div class="topSize" style="text-align: center;">
|
|
|
+ 查询范围:{{queryParam.startDate}} - {{queryParam.endDate}}
|
|
|
+ </div>
|
|
|
+ <div class="topSize">
|
|
|
+ <el-table
|
|
|
+ ref="multipleTableRef"
|
|
|
+ :data="tableData"
|
|
|
+ style="width: 100%"
|
|
|
+ :height="getWindowSize.h/1.2-60"
|
|
|
+ @selection-change="handleSelectionChange"
|
|
|
+ >
|
|
|
+ <el-table-column type="selection" width="55" />
|
|
|
+ <el-table-column property="inpatientNo" label="住院号" />
|
|
|
+ <el-table-column property="bedNo" label="床位号"/>
|
|
|
+ <el-table-column property="name" label="姓名"/>
|
|
|
+ <el-table-column property="actOrderName" label="医嘱名称"/>
|
|
|
+ <el-table-column property="dose" label="剂量/领量"/>
|
|
|
+ <el-table-column property="supplyName" label="给药方式"/>
|
|
|
+ <el-table-column property="frequCode" label="频率"/>
|
|
|
+ <el-table-column property="startTime" label="开始时间" width="120"/>
|
|
|
+ <el-table-column property="endTime" label="结束时间" width="120"/>
|
|
|
+ <el-table-column v-if="queryParam.changeClass !== '0' && queryParam.changeClass !== '2' && queryParam.changeClass !== '7'" property="orderTime" label="医嘱时间" width="120"/>
|
|
|
+ <el-table-column v-if="queryParam.changeClass === '7'" property="execTime" label="执行时间" width="120"/>
|
|
|
+ <el-table-column property="physicianName" label="医生"/>
|
|
|
+ <el-table-column v-if="queryParam.changeClass === '2' || queryParam.changeClass === '4' || queryParam.changeClass === '6' || queryParam.changeClass === '8'" property="printOrderChange" label="执行"/>
|
|
|
+ <el-table-column v-if="queryParam.changeClass === '2' || queryParam.changeClass === '4' || queryParam.changeClass === '6' || queryParam.changeClass === '8'" property="printOrderChangeEnd" label="执行"/>
|
|
|
+ <el-table-column v-if="queryParam.changeClass === '3'" property="execId" label="执行人"/>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="打印预览" name="second">
|
|
|
+ <el-scrollbar class="scrollbar" :max-height="(getWindowSize.h/1.2-100)+'px'" noresize="true">
|
|
|
+ <div id="yzChangeId">
|
|
|
+ <table class="pageTable">
|
|
|
+ <thead>
|
|
|
+ <tr>
|
|
|
+ <td colspan="15" style="width: 100%;border: none;text-align: center;font-size: 25px;font-weight:bold">
|
|
|
+ {{titleData}}
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td colspan="15" style="width: 753px;border: none;text-align: center">
|
|
|
+ 查询范围:{{queryParam.startDate}} - {{queryParam.endDate}}
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <th style="width: 10%;height: 27px">住院号</th>
|
|
|
+ <th >床位号</th>
|
|
|
+ <th >姓名</th>
|
|
|
+ <th >医嘱名称</th>
|
|
|
+ <th >剂量/领量</th>
|
|
|
+ <th >给药方式</th>
|
|
|
+ <th >频率</th>
|
|
|
+ <th >开始时间</th>
|
|
|
+ <th >结束时间</th>
|
|
|
+ <th v-if="queryParam.changeClass !== '0' && queryParam.changeClass !== '2' && queryParam.changeClass !== '7'">医嘱时间</th>
|
|
|
+ <th v-if="queryParam.changeClass === '7'">执行时间</th>
|
|
|
+ <th>医生</th>
|
|
|
+ <th v-if="queryParam.changeClass === '2' || queryParam.changeClass === '4' || queryParam.changeClass === '6' || queryParam.changeClass === '8'">执行</th>
|
|
|
+ <th v-if="queryParam.changeClass === '2' || queryParam.changeClass === '4' || queryParam.changeClass === '6' || queryParam.changeClass === '8'">执行</th>
|
|
|
+ <th v-if="queryParam.changeClass === '3'">执行人</th>
|
|
|
+ </tr>
|
|
|
+ </thead>
|
|
|
+ <tbody>
|
|
|
+ <tr v-for="(item,index) in multipleSelection">
|
|
|
+ <td >{{item.inpatientNo}}</td>
|
|
|
+ <td >{{item.bedNo}}</td>
|
|
|
+ <td >{{item.name}}</td>
|
|
|
+ <td >{{item.actOrderName}}</td>
|
|
|
+ <td >{{item.dose}}</td>
|
|
|
+ <td >{{item.supplyName}}</td>
|
|
|
+ <td >{{item.frequCode}}</td>
|
|
|
+ <td >{{item.startTime}}</td>
|
|
|
+ <td >{{item.endTime}}</td>
|
|
|
+ <td v-if="queryParam.changeClass !== '0' && queryParam.changeClass !== '2' && queryParam.changeClass !== '7'">{{item.orderTime}}</td>
|
|
|
+ <td v-if="queryParam.changeClass === '7'">{{item.execTime}}</td>
|
|
|
+ <td >{{item.physicianName}}</td>
|
|
|
+ <td v-if="queryParam.changeClass === '2' || queryParam.changeClass === '4' || queryParam.changeClass === '6' || queryParam.changeClass === '8'">{{item.printOrderChange}}</td>
|
|
|
+ <td v-if="queryParam.changeClass === '2' || queryParam.changeClass === '4' || queryParam.changeClass === '6' || queryParam.changeClass === '8'">{{item.printOrderChangeEnd}}</td>
|
|
|
+ <td v-if="queryParam.changeClass === '3'">{{item.execId}}</td>
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+ </table>
|
|
|
+ </div>
|
|
|
+ </el-scrollbar>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+
|
|
|
+
|
|
|
+ </el-main>
|
|
|
+ </el-container>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup name='YzChange'>
|
|
|
+import { computed, onMounted, ref } from 'vue'
|
|
|
+import { useStore } from 'vuex'
|
|
|
+import { getFormatDatetime,getDateTiffDays } from "@/utils/date"
|
|
|
+import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
+import {getAllWards} from "@/api/zhu-yuan-yi-sheng/resident-doctor";
|
|
|
+import {stringNotBlank} from "@/utils/blank-utils"
|
|
|
+import PageLayer from "@/layout/PageLayer";
|
|
|
+import {getLodop, initLodop} from '@/utils/c-lodop'
|
|
|
+import {getWindowSize} from "@/utils/window-size";
|
|
|
+import {queryPatientInfo} from "@/api/medical-advice/medical-advice-management";
|
|
|
+import {queryYzChange,saveYzChange} from "@/api/medical-advice/excute-item";
|
|
|
+import sleep from "@/utils/sleep";
|
|
|
+
|
|
|
+const activeName = ref('first')
|
|
|
+const queryParam= ref({
|
|
|
+ wardCode:'',
|
|
|
+ startDate:getFormatDatetime(getDateTiffDays(5),'YYYY-MM-DD') + ' 00:00:00',
|
|
|
+ endDate:getFormatDatetime(getDateTiffDays(-1),'YYYY-MM-DD') + ' 23:59:59',
|
|
|
+ printFlag:'1',
|
|
|
+ changeClass:'0',
|
|
|
+ startBedNo:'',
|
|
|
+ endBedNo:'',
|
|
|
+
|
|
|
+})
|
|
|
+const ward = ref([])
|
|
|
+
|
|
|
+onMounted(()=>{
|
|
|
+ handleChangeType(queryParam.value.changeClass)
|
|
|
+ initLodop()
|
|
|
+ getAllWards().then((res)=>{
|
|
|
+ if(res){
|
|
|
+ ward.value =res
|
|
|
+ queryParam.value.wardCode = res[0].code
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ setInterval(()=>{
|
|
|
+ queryInfo()
|
|
|
+ },15*1000*60)
|
|
|
+
|
|
|
+})
|
|
|
+
|
|
|
+const checkedAll = ref(false)
|
|
|
+const selectAll = ()=>{
|
|
|
+ if(checkedAll.value){
|
|
|
+ multipleTableRef.value.toggleAllSelection()
|
|
|
+ }else {
|
|
|
+ multipleTableRef.value.clearSelection()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 查询
|
|
|
+const queryInfo=()=>{
|
|
|
+ queryYzChange(queryParam.value).then((res)=>{
|
|
|
+ tableData.value = res
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+const printCss =`
|
|
|
+.pageTable tr td, .pageTable tr th {
|
|
|
+ border: 1px solid black;
|
|
|
+ text-align: center;
|
|
|
+ font-size: 12px;
|
|
|
+ padding: 0 0;
|
|
|
+
|
|
|
+}
|
|
|
+.pageTable tr td{
|
|
|
+ height: 27px;
|
|
|
+}
|
|
|
+
|
|
|
+.pageTable {
|
|
|
+ border-collapse: collapse;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+`
|
|
|
+
|
|
|
+// 打印
|
|
|
+const printInfo =()=>{
|
|
|
+ saveData(true)
|
|
|
+}
|
|
|
+// 确认变更
|
|
|
+const saveData = (printFlag) =>{
|
|
|
+ let param = {
|
|
|
+ list : multipleSelection.value
|
|
|
+ }
|
|
|
+ saveYzChange(param).then((res)=>{
|
|
|
+ if(printFlag){
|
|
|
+ let LODOP = getLodop()
|
|
|
+ LODOP.PRINT_INIT('医嘱变更单') // 初始化打印机 名字
|
|
|
+ LODOP.SET_PRINT_PAGESIZE(1, '210mm', '297mm', '') // 设置纸张大小 A4
|
|
|
+ LODOP.SET_PRINT_MODE('FULL_WIDTH_FOR_OVERFLOW', true) // 整宽不变形
|
|
|
+ LODOP.ADD_PRINT_TABLE('2mm', '5mm', '205mm', '220mm', '<style>' + printCss + '</style>' + '<body>' + document.getElementById('yzChangeId').innerHTML + '</body>') //要打印的内容
|
|
|
+ LODOP.PREVIEW() // 关闭
|
|
|
+ }
|
|
|
+ sleep(500).then(()=>{queryInfo()})
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+// 变更单类型选择
|
|
|
+const handleChangeType=(val)=>{
|
|
|
+ for (let i = 0; i < titleList.length; i++) {
|
|
|
+ if(val === titleList[i].code){
|
|
|
+ titleData.value = titleList[i].name
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ clearTableData()
|
|
|
+}
|
|
|
+
|
|
|
+function clearTableData(){
|
|
|
+ tableData.value = []
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+const titleData = ref('')
|
|
|
+const titleList = [
|
|
|
+ {
|
|
|
+ code:'0',
|
|
|
+ name:'医嘱变更单',
|
|
|
+ },{
|
|
|
+ code:'1',
|
|
|
+ name:'长期医嘱变更单',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ code:'2',
|
|
|
+ name:'长期医嘱变更单(口服药)',
|
|
|
+ },{
|
|
|
+ code:'3',
|
|
|
+ name:'长期医嘱变更单(长期输液)',
|
|
|
+ },{
|
|
|
+ code:'4',
|
|
|
+ name:'长期医嘱变更单(非口服药)',
|
|
|
+ },{
|
|
|
+ code:'5',
|
|
|
+ name:'临时医嘱变更单',
|
|
|
+ },{
|
|
|
+ code:'6',
|
|
|
+ name:'临时医嘱变更单(口服药)',
|
|
|
+ },{
|
|
|
+ code:'7',
|
|
|
+ name:'临时医嘱变更单(临时输液)',
|
|
|
+ },{
|
|
|
+ code:'8',
|
|
|
+ name:'治疗类医嘱变更单',
|
|
|
+ }
|
|
|
+]
|
|
|
+
|
|
|
+const patintList = ref([])
|
|
|
+const reverPatintList = computed(() => reverseArray(patintList.value))
|
|
|
+
|
|
|
+const initPatintBedNo=()=>{
|
|
|
+ queryPatientInfo('',queryParam.value.wardCode,'').then((res)=>{
|
|
|
+ patintList.value = res
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const tableData = ref([])
|
|
|
+
|
|
|
+const multipleTableRef =ref({})
|
|
|
+const multipleSelection = ref([])
|
|
|
+const handleSelectionChange = (val) => {
|
|
|
+ multipleSelection.value = val
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+function reverseArray(arr) {
|
|
|
+ let newArr = [];
|
|
|
+ arr.forEach(element => {
|
|
|
+ // unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
|
|
|
+ newArr.unshift(element);
|
|
|
+ });
|
|
|
+ return newArr;
|
|
|
+}
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.topSize{
|
|
|
+ margin-top: 5px;
|
|
|
+}
|
|
|
+
|
|
|
+.pageTable tr td, .pageTable tr th {
|
|
|
+ border: 1px solid black;
|
|
|
+ text-align: center;
|
|
|
+ font-size: 12px;
|
|
|
+ padding: 0 0;
|
|
|
+
|
|
|
+}
|
|
|
+.pageTable tr td{
|
|
|
+ height: 27px;
|
|
|
+}
|
|
|
+
|
|
|
+.pageTable {
|
|
|
+ border-collapse: collapse;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+</style>
|