Browse Source

结算单保存增加强制质控通过限制

lihong 2 years ago
parent
commit
87466b99a0

+ 43 - 0
src/api/medical-advice/medical-advice-management.js

@@ -0,0 +1,43 @@
+import request from "../../utils/request";
+
+/**
+ * 获取长期医嘱信息包含病人基本信息
+ * @param patNo
+ * @param times
+ * @returns {AxiosPromise}
+ */
+export function cqYzPrint(patNo,times) {
+    return request({
+        url: '/medicalAdvice/medicaManagement/cqYzPrint',
+        method: 'get',
+        params: {patNo, times}
+    })
+}
+
+/**
+ * 获取临时期医嘱信息包含病人基本信息
+ * @param patNo
+ * @param times
+ * @returns {AxiosPromise} yzPrintVOList  patientInfo
+ */
+export function lsYzPrint(patNo,times) {
+    return request({
+        url: '/medicalAdvice/medicaManagement/lsYzPrint',
+        method: 'get',
+        params: {patNo, times}
+    })
+}
+
+/**
+ * 查询病人基本信息
+ * @param patNo
+ * @param ward
+ * @returns {AxiosPromise}
+ */
+export function queryPatientInfo(patNo,ward) {
+    return request({
+        url: '/medicalAdvice/medicaManagement/queryPatientInfo',
+        method: 'get',
+        params: {patNo, ward}
+    })
+}

+ 122 - 0
src/components/medical-advice/PatientBaseList.vue

@@ -0,0 +1,122 @@
+<template>
+  <el-select v-model="currentWard"
+             :clearable="wardsClearable"
+             style="width: 110px"
+             @change="fetchOverviews">
+    <el-option v-for="item in allWards"
+               :key="item.code"
+               :label="item.name"
+               :value="item.code"/>
+  </el-select>
+
+  <el-input v-model="queryPatNo" clearable style="width: 90px"  placeholder="住院号"
+            @keyup.enter="queryPatientInfoClick"></el-input>
+  <el-button icon="Search" type="primary"  @click="queryPatientInfoClick">查询</el-button>
+  <br>
+  <el-table :data="cptOverviews"
+            height="800"
+            @row-click="handleClickOverview"
+            ref="elTableRef"
+            highlight-current-row
+            class="remove_hover"
+           >
+    <el-table-column label="床" prop="bedNo" width="30"/>
+    <el-table-column label="姓名" width="70" prop="name">
+      <template #default="{row}">
+        <span>
+          {{ row.name }}
+        </span>
+      </template>
+    </el-table-column>
+    <el-table-column label="住院号" prop="inpatientNo" width="65">
+      <template #default="{row}">
+        <div :style="{color: row.dismissOrder ===1 ? 'red' : '#19e63c'}">
+          {{ row.inpatientNo }}
+        </div>
+      </template>
+    </el-table-column>
+    <el-table-column label="性别" prop="sex" width="65">
+      <template #default="scope">
+        {{ cptSex(scope.row.sex) }}
+      </template>
+    </el-table-column>
+  </el-table>
+</template>
+
+<script setup name='PatientBaseList'>
+import {computed, onMounted, ref} from "vue";
+import {getOverView} from "@/api/inpatient/patient";
+import {allWardsVisible} from "@/utils/permission";
+import {cptSex} from "@/utils/computed";
+import {cqYzPrint, lsYzPrint,queryPatientInfo} from "@/api/medical-advice/medical-advice-management";
+import {getAllWards} from "@/api/zhu-yuan-yi-sheng/resident-doctor";
+
+const myPatient = ref(false)
+const queryPatNo = ref('')
+const wardsClearable = allWardsVisible()
+const allWards = ref([])
+const currentWard = ref()
+const overviews = ref([])
+const emit = defineEmits(['selectPatientInfo']);
+const props = defineProps({
+  yzType: {
+    type: String
+  }
+})
+const fetchOverviews = () => {
+  getOverView(currentWard.value).then((res) => {
+    overviews.value = res
+  })
+}
+
+const queryPatientInfoClick=()=>{
+  queryPatientInfo(currentWard.value,queryPatNo.value).then((res) => {
+    overviews.value = res
+  })
+}
+const cptOverviews = computed(() => {
+  return overviews.value
+})
+
+const elTableRef = ref(null)
+//行点击事件
+const handleClickOverview = (row) => {
+  if(props.yzType=='cq'){
+    cqYzPrint(row.inpatientNo,row.admissTimes).then((res) => {
+      let val = {patientInfo:res.patientInfo,yzPrintVOList:res.yzPrintVOList}
+      emit('selectPatientInfo',val)
+    })
+  }else if(props.yzType=='ls'){
+    lsYzPrint(row.inpatientNo,row.admissTimes).then((res) => {
+      let val = {patientInfo:res.patientInfo,yzPrintVOList:res.yzPrintVOList}
+      emit('selectPatientInfo',val)
+    })
+  }
+}
+
+
+
+
+
+
+
+
+
+onMounted(() => {
+  getAllWards().then((res) => {
+    if (res.length > 0) {
+      allWards.value = res
+      currentWard.value = wardsClearable ? '' : res[0].code
+      fetchOverviews()
+    }
+  })
+})
+</script>
+
+<style scoped lang="scss">
+
+.el_table__current {
+  background-color: #a7d3ff;
+}
+
+</style>

+ 67 - 0
src/components/medical-advice/PatientInfo.vue

@@ -0,0 +1,67 @@
+<template>
+  <el-descriptions :column="4" border style="width:100%;" title="基本信息" >
+  <el-descriptions-item label="床号">
+    {{ props.patientInfo.bedNo }}
+  </el-descriptions-item>
+  <el-descriptions-item label="姓名">
+    {{ props.patientInfo.name }}
+  </el-descriptions-item>
+  <el-descriptions-item label="出生日期">
+    {{ props.patientInfo.birthDate }} {{ companyFunc(props.patientInfo.age, '岁') }}
+  </el-descriptions-item>
+  <el-descriptions-item label="性别">
+    {{ props.patientInfo.sexName }}
+  </el-descriptions-item>
+  <el-descriptions-item label="入院日期">
+    {{ props.patientInfo.admissDate }}
+  </el-descriptions-item>
+  <el-descriptions-item label="住院天数">
+    {{ companyFunc(props.patientInfo.actIptDays,'天') }}
+  </el-descriptions-item>
+  <el-descriptions-item label="管床医生">
+    {{ props.patientInfo.referPhysicianName }}
+  </el-descriptions-item>
+  <el-descriptions-item label="病区">
+    {{ props.patientInfo.admissWardName }}
+  </el-descriptions-item>
+  <el-descriptions-item label="小科室">
+    {{ props.patientInfo.zkWardName }}
+  </el-descriptions-item>
+  <el-descriptions-item label="身份">
+    {{ props.patientInfo.medTypeName }}
+  </el-descriptions-item>
+  <el-descriptions-item label="总费用">
+    {{ props.patientInfo.totalCharge }}
+    <span style="color: red"> {{ props.patientInfo.balance }}</span>
+  </el-descriptions-item>
+  <el-descriptions-item label="药占比">
+    {{ props.patientInfo.yp }}
+  </el-descriptions-item>
+  </el-descriptions>
+</template>
+
+<script setup name="PatientInfo">
+import store from '@/store'
+import {stringNotBlank} from "@/utils/blank-utils";
+import { computed, onMounted, ref } from 'vue'
+const props = defineProps({
+  patientInfo: {}
+})
+
+
+const companyFunc = (val, company) => {
+  if (stringNotBlank(val)) {
+    return val + company
+  } else {
+    return ''
+  }
+}
+
+
+onMounted(() => {
+})
+
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 21 - 0
src/components/si-sheet-upload/jie-suan-dan-xiu-gai/JieSuanDanXiangQing.vue

@@ -704,6 +704,11 @@ const quRenShenHeTongGuoFlag = ref(false)
 
 //确认保存修改
 const queRenbaoCunXiuGai = (flag) =>{
+    let message = weiGuiXiaoYan()
+    if (stringNotBlank(message)) {
+        return ElMessage.error(message)
+    }
+
     qualityDialogFlag.value = false
     baoCunXiuGai(flag)
 }
@@ -829,6 +834,10 @@ const shenHeClick = () => {
 
 /* 审核操作 确认审核通过 */
 const queRenShenHeTongGuo=() =>{
+   let message = weiGuiXiaoYan()
+    if (stringNotBlank(message)) {
+        return ElMessage.error(message)
+    }
     const data = {
         id: props.data.shenHeXinXi.id,
         auditFlag: 1,
@@ -843,6 +852,18 @@ const queRenShenHeTongGuo=() =>{
         .catch((e) => {
         })
 }
+//违规效验
+function weiGuiXiaoYan(){
+    let message = '';
+    if(qualityData.value.length > 0){
+        for(let i = 0 ;i < qualityData.value.length;i++){
+            if(qualityData.value[i].rule_level === '2'){
+              return   message ='质控结果有违规项,请去病案首页先处理违规问题'
+            }
+        }
+    }
+    return  message
+}
 
 const shenHeTongGuoShangChuanClick = () => {
   ElMessageBox.confirm('是否通过该审核并上传', '提示', {

+ 18 - 0
src/router/modules/dashboard.js

@@ -796,6 +796,24 @@ const route = [
             },
         ],
     },
+    {
+        path: '/medicalAdvice',
+        component: Layout,
+        meta: {title: '医嘱模块'},
+        children: [
+            {
+                path: 'medicaManagement/cqYzPrint',
+                component: createNameComponent(() => import('@/views/medical-advice/advice-management/CqYzPrint.vue')),
+                meta: {title: '打印长期医嘱单'},
+            },
+            {
+                path: 'medicaManagement/lsYzPrint',
+                component: createNameComponent(() => import('@/views/medical-advice/advice-management/LsYzPrint.vue')),
+                meta: {title: '打印临时医嘱单'},
+            },
+
+        ],
+    },
 ]
 
 export default route

+ 141 - 0
src/views/medical-advice/advice-management/CqYzPrint.vue

@@ -0,0 +1,141 @@
+<template>
+    <el-container>
+        <el-aside width="280px">
+          <PatientBaseList :yzType="yzType" @selectPatientInfo="selectPatientInfo" ></PatientBaseList>
+        </el-aside>
+        <el-container>
+            <el-header style="height: 200px">
+                <PatientInfo :patientInfo="patientInfo"></PatientInfo>
+            </el-header>
+            <div>
+                <el-button icon="Printer" type="success" @click="daYingClick">打印</el-button>
+            </div>
+            <el-main>
+            <div id="cqYz">
+                <h1 style="text-align: center;margin-bottom: 10px">长沙泰和医院</h1>
+                <h1 style="text-align: center;margin-bottom: 10px">长期医嘱单</h1>
+                <div style="width: 100%;">
+                                 <span><strong>姓名:</strong>{{patientInfo.name}}</span>
+                                <span style="margin-left: 5px"><strong>性别:</strong>{{patientInfo.sexName}}</span>
+                                <span style="margin-left: 5px"><strong>年龄:</strong>{{companyFunc(patientInfo.age,'岁')}}</span>
+                                <span style="margin-left: 5px"><strong>科别:</strong>{{patientInfo.admissWardName}}</span>
+                                <span style="margin-left: 5px"><strong>床号:</strong>{{patientInfo.bedNo}}</span>
+                                <span style="margin-left: 5px"><strong>住院号:</strong>{{patientInfo.inpatientNo}}</span>
+                           
+                </div>
+                <el-scrollbar height="400px">
+                    <div style="width: 100%;" >
+                        <table>
+                            <tr>
+                                <th colspan="5">起始</th>
+                                <th colspan="4">停止</th>
+                            </tr>
+                            <tr>
+                                <th style="width: 40px">日期</th>
+                                <th style="width: 40px">时间</th>
+                                <th>长期医嘱</th>
+                                <th style="width: 58px">医师签名</th>
+                                <th style="width: 85px">核对护士签名</th>
+                                <th style="width: 40px">日期</th>
+                                <th style="width: 40px">时间</th>
+                                <th style="width: 58px">医师签名</th>
+                                <th style="width: 85px">核对护士签名</th>
+                            </tr>
+                            <tr v-for="item in yzPrintVOList">
+                                <td>{{item.date}}</td>
+                                <td>{{item.time}}</td>
+                                <td>{{item.orderGroupNo}} {{item.newOrderName}} {{item.newOrderNameCode}} {{item.frequCode}}</td>
+                                <td>{{item.doctorName}}</td>
+                                <td>{{item.nurseName}}</td>
+                                <td>{{item.stopDate}}</td>
+                                <td>{{item.stopTime}}</td>
+                                <td>{{item.modifierName}}</td>
+                                <td>{{item.execId2Name}}</td>
+                            </tr>
+                        </table>
+                    </div>
+            </el-scrollbar>
+
+            </div>
+        </el-main>
+        </el-container>
+    </el-container>
+</template>
+
+<script setup name='cqYzPrint'>
+import PatientInfo from "@/components/medical-advice/PatientInfo.vue"
+import PatientBaseList from "@/components/medical-advice/PatientBaseList.vue"
+import {getLodop, initLodop} from '@/utils/c-lodop'
+import {onMounted} from "vue";
+import {stringNotBlank} from "@/utils/blank-utils";
+// 基本信息
+const patientInfo = ref({})
+const yzType = ref('cq')
+const yzPrintVOList = ref({})
+const companyFunc = (val, company) => {
+    if (stringNotBlank(val)) {
+        return val + company
+    } else {
+        return ''
+    }
+}
+const yzPrintCss=` *{font-size:12px !important; margin: 0;
+            padding: 0;} .nav{margin: 0 auto;width: 100%;}ul{list-style: none;width: 100%;}.nav li{float: left;margin-left: 10px;}table{border:1px solid black;border-collapse:collapse;width:100%} th{border:1px solid black;text-align:center} td{border:1px solid black;text-align:center} tr{height:27px;line-height:27px}`
+
+const selectPatientInfo=(val)=>{
+    patientInfo.value =  val.patientInfo
+    yzPrintVOList.value = val.yzPrintVOList
+}
+onMounted(() => {
+    initLodop()
+})
+const daYingClick = () => {
+    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_HTM('2mm', '5mm', '100%', '100%', '<style>' + yzPrintCss + '</style>' + '<body>' + document.getElementById('cqYz').innerHTML + '</body>') //要打印的内容
+    LODOP.PREVIEW() // 关闭
+}
+</script>
+
+<style scoped>
+.nav{
+    margin: 0 auto;
+    width: 100%;
+}
+ul{
+    list-style: none;
+    width: 100%;
+}
+.nav li{
+    float: left;
+    margin-left: 10px;
+
+}
+#cqYz {
+    width: 753px;
+    padding: 0 0px;
+}
+
+table {
+    border: 1px solid black;
+    border-collapse: collapse;
+    width: 100%;
+}
+
+th {
+    border: 1px solid black;
+    text-align: center;
+}
+
+td {
+    border: 1px solid black;
+    text-align: left;
+}
+
+tr {
+    height: 27px;
+    line-height: 27px;
+}
+</style>

+ 135 - 0
src/views/medical-advice/advice-management/LsYzPrint.vue

@@ -0,0 +1,135 @@
+<template>
+    <el-container>
+        <el-aside width="280px">
+          <PatientBaseList :yzType="yzType" @selectPatientInfo="selectPatientInfo"></PatientBaseList>
+        </el-aside>
+        <el-container>
+            <el-header style="height: 200px">
+                <PatientInfo :patientInfo="patientInfo"></PatientInfo>
+            </el-header>
+            <div>
+                <el-button icon="Printer" type="success" @click="daYingClick">打印</el-button>
+            </div>
+            <el-main>
+            <div id="cqYz">
+                <h1 style="text-align: center;margin-bottom: 10px">长沙泰和医院</h1>
+                <h1 style="text-align: center;margin-bottom: 10px">临时医嘱单</h1>
+                <div style="width: 100%;">
+                                     <span><strong>姓名:</strong>{{patientInfo.name}}</span>
+                                    <span style="margin-left: 5px"><strong>性别:</strong>{{patientInfo.sexName}}</span>
+                                    <span style="margin-left: 5px"><strong>年龄:</strong>{{companyFunc(patientInfo.age,'岁')}}</span>
+                                    <span style="margin-left: 5px"><strong>科别:</strong>{{patientInfo.admissWardName}}</span>
+                                    <span style="margin-left: 5px"><strong>床号:</strong>{{patientInfo.bedNo}}</span>
+                                    <span style="margin-left: 5px"><strong>住院号:</strong>{{patientInfo.inpatientNo}}</span>
+                               
+                </div>
+                <el-scrollbar height="400px">
+                    <div style="width: 100%;" >
+                        <table>
+                            <tr>
+                                <th style="width: 40px">日期</th>
+                                <th style="width: 38px">时间</th>
+                                <th >临时医嘱</th>
+                                <th style="width: 58px">医师签名</th>
+                                <th style="width: 85px">核对护士签名</th>
+                                <th style="width: 70px">执行时间</th>
+                                <th style="width: 85px">执行护士签名</th>
+                            </tr>
+                            <tr v-for="item in yzPrintVOList">
+                                <td>{{item.date}}</td>
+                                <td>{{item.time}}</td>
+                                <td>{{item.orderGroupNo}} {{item.newOrderName}} {{item.newOrderNameCode}}</td>
+                                <td>{{item.doctorName}}</td>
+                                <td>{{item.nurseName}}</td>
+                                <td>{{item.execTimeStr}}</td>
+                                <td>{{item.execIdName}}</td>
+                            </tr>
+                        </table>
+                    </div>
+            </el-scrollbar>
+
+            </div>
+        </el-main>
+        </el-container>
+    </el-container>
+</template>
+
+<script setup name='cqYzPrint'>
+import PatientInfo from "@/components/medical-advice/PatientInfo.vue"
+import PatientBaseList from "@/components/medical-advice/PatientBaseList.vue"
+import {getLodop, initLodop} from '@/utils/c-lodop'
+import {onMounted} from "vue"
+import {stringNotBlank} from "@/utils/blank-utils"
+
+// 基本信息
+const patientInfo = ref({})
+const yzType = ref('ls')
+const yzPrintVOList = ref({})
+const companyFunc = (val, company) => {
+    if (stringNotBlank(val)) {
+        return val + company
+    } else {
+        return ''
+    }
+}
+
+
+const yzPrintCss=` *{font-size:12px !important; margin: 0;
+            padding: 0;} .nav{margin: 0 auto;width: 100%;}ul{list-style: none;width: 100%;}.nav li{float: left;margin-left: 10px;}table{border:1px solid black;border-collapse:collapse;width:100%} th{border:1px solid black;text-align:center} td{border:1px solid black;text-align:center} tr{height:27px;line-height:27px}`
+
+const selectPatientInfo=(val)=>{
+    patientInfo.value =  val.patientInfo
+    yzPrintVOList.value = val.yzPrintVOList
+}
+onMounted(() => {
+    initLodop()
+})
+const daYingClick = () => {
+    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_HTM('2mm', '5mm', '100%', '100%', '<style>' + yzPrintCss + '</style>' + '<body>' + document.getElementById('cqYz').innerHTML + '</body>') //要打印的内容
+    LODOP.PREVIEW() // 关闭
+}
+</script>
+
+<style scoped>
+.nav{
+    margin: 0 auto;
+    width: 100%;
+}
+ul{
+    list-style: none;
+    width: 100%;
+}
+.nav li{
+    float: left;
+    margin-left: 10px;
+
+}
+#cqYz {
+    width: 753px;
+    padding: 0 0px;
+}
+table {
+    border: 1px solid black;
+    border-collapse: collapse;
+    width: 100%;
+}
+
+th {
+    border: 1px solid black;
+    text-align: center;
+}
+
+td {
+    border: 1px solid black;
+    text-align: left;
+}
+
+tr {
+    height: 27px;
+    line-height: 27px;
+}
+</style>