Procházet zdrojové kódy

前端手术共和草药

xiaochan před 1 rokem
rodič
revize
f1e07c40e0

+ 1 - 1
.gitignore

@@ -1,6 +1,6 @@
 node_modules
 .DS_Store
-dist
+release/dist
 dist-ssr
 *.local
 .vscode

+ 2 - 2
Dockerfile → release/Dockerfile

@@ -3,5 +3,5 @@ USER root
 RUN mkdir -p /home/intergration-platform
 COPY dist /home/intergration-platform/dist
 WORKDIR /home/intergration-platform
-COPY nginx.conf /etc/nginx/nginx.conf
-RUN mkdir -p /home/nginx-logs
+COPY ../nginx.conf /etc/nginx/nginx.conf
+RUN mkdir -p /home/nginx-logs

+ 55 - 0
release/nginx.conf

@@ -0,0 +1,55 @@
+worker_processes  1;
+
+events {
+    worker_connections  1024;
+}
+
+http {
+    include       mime.types;
+    default_type  application/octet-stream;
+
+	#获取真实ip
+    proxy_set_header Host $host;
+    proxy_set_header X-Real-IP $remote_addr;
+    proxy_set_header X-Real-Port $remote_port;
+    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
+    client_max_body_size 20m;
+    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
+                     '$status $body_bytes_sent "$http_referer" '
+                     '"$http_user_agent" "$http_x_forwarded_for"';
+
+    sendfile        on;
+
+    keepalive_timeout  65;
+
+	map $http_upgrade $connection_upgrade {
+    default upgrade;
+    '' close;
+    }
+
+    server {
+        listen	    4090;
+        server_name localhost;
+        root        /home/intergration-platform/dist;
+
+		location / {
+		    try_files $uri $uri/ @router;
+		    index  index.html index.htm;
+		}
+
+		location @router {
+		    rewrite ^.*$ /index.html last;
+		}
+
+		location ^~ /emr {
+			proxy_pass http://172.16.32.125:8001/emr;
+		}
+
+		location ^~ /bdp/dataservice/api {
+			proxy_pass http://172.16.32.183:8888/bdp/dataservice/api;
+		}
+
+    }
+
+}

+ 1 - 0
release/run.bat

@@ -0,0 +1 @@
+docker build -t vue-intergration-platform .

+ 0 - 1
src/api/zhu-yuan-yi-sheng/shou-shu-shen-qing.ts

@@ -144,7 +144,6 @@ export async function getSurgeryDetail(patNo, times, recordId) {
     const diagList = []
     const opCodeList = []
 
-
     res.list.forEach(item => {
         if (item.type === 1) {
             opCodeList.push(item)

+ 1 - 1
src/components/xiao-chan/combo-grid/XcComboGridV2.vue

@@ -369,7 +369,7 @@ onMounted(async () => {
 <template>
   <vxe-pulldown
       v-model="isShow"
-      ref="pullDownRef">
+      ref="pullDownRef" transfer>
     <template #default>
       <el-input v-model="inputData"
                 :title="isObj ? props.modelValue[modName] : props.modelValue"

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

@@ -1073,6 +1073,18 @@ const route = [
             }
         ],
     },
+    {
+        path: '/dataBase',
+        component: Layout,
+        meta: {title: '数据管理'},
+        children: [
+            {
+                path: '/dataBase/dataBaseApi',
+                component: createNameComponent(() => import('@/views/data-base/DataBase.vue')),
+                meta: {title: 'API管理'},
+            }
+        ]
+    }
 ];
 
 export default route

+ 40 - 0
src/views/data-base/DataBase.vue

@@ -0,0 +1,40 @@
+<script setup lang="ts">
+import {nextTick, onActivated, onDeactivated, onMounted, ref} from "vue";
+import {userInfoStore} from "@/utils/store-public";
+
+const iframe = ref<HTMLIFrameElement>()
+
+
+const getMessage = e => {
+  console.log(e)
+}
+
+onDeactivated(() => {
+  window.removeEventListener('message', getMessage)
+})
+
+onActivated(() => {
+  window.addEventListener('message', getMessage)
+})
+
+onMounted(async () => {
+  await nextTick()
+  iframe.value.onload = () => {
+    const data = {
+      token: userInfoStore.value.token,
+      name: 'setToken'
+    }
+    iframe.value.contentWindow.postMessage(JSON.stringify(data), '*')
+  }
+})
+
+</script>
+
+<template>
+  <iframe src="http://172.16.30.61:8991" width="100%" height="100%" style="border: 0"
+          ref="iframe"/>
+</template>
+
+<style lang="scss">
+
+</style>

+ 2 - 2
src/views/hospitalization/zhu-yuan-yi-sheng/Home.vue

@@ -1,7 +1,7 @@
 <template>
 
   <el-container>
-    <el-header style="padding: 0; height: max-content">
+    <el-header style="padding: 0; height: max-content" ref="yzHeader">
       <huan-zhe-xin-xi
           :huan-zhe-xin-xi="patientInfo"/>
     </el-header>
@@ -26,7 +26,7 @@
   <emr-control-rule/>
 </template>
 
-<script name="Home" setup>
+<script setup>
 import store from '@/store'
 import {computed, ref} from "vue";
 import HuanZheXinXi from "@/components/zhu-yuan-yi-sheng/HuanZheXinXi.vue";

+ 20 - 5
src/views/hospitalization/zhu-yuan-yi-sheng/cao-yao-yi-zhu/XinZhengCaoYao.vue

@@ -21,7 +21,7 @@
             <el-input-number v-model="chuFang.quantity" :min="0"></el-input-number>
           </el-form-item>
         </el-col>
-        <el-col :span="6">
+        <el-col :span="6" v-if="show">
           <el-form-item class="bi_tian" label="代煎:">
             <el-input-number v-model="chuFang.quantityDj"
                              :max="chuFang.quantity"
@@ -44,7 +44,7 @@
               <el-option v-for="item in jiaShuiLeiXing"
                          :key="item.code"
                          :label="item.name"
-                         :value="item.code"></el-option>
+                         :value="item.code"/>
             </el-select>
           </el-form-item>
         </el-col>
@@ -53,12 +53,12 @@
             <el-input-number v-model="chuFang.cyJsl"/>
           </el-form-item>
         </el-col>
-        <el-col :span="6">
+        <el-col :span="6" v-if="show">
           <el-form-item label="煮取(ml):">
             <el-input-number v-model="chuFang.cyZql"/>
           </el-form-item>
         </el-col>
-        <el-col :span="6">
+        <el-col :span="6" v-if="show">
           <el-form-item label="复煎:">
             <el-input-number v-model="chuFang.cyFj"/>
           </el-form-item>
@@ -219,6 +219,11 @@ const chuFang = ref({
   groupNo: '81',
   execDept: ''
 })
+
+const show = computed(() => {
+  return chuFang.value.groupNo !== '83'
+})
+
 /**
  * 编辑草药
  * @type {Ref<UnwrapRef<{chargeCodeName: string, quantity: number, retprice: number, instruction: string, je: string, chargeCode: string}>>}
@@ -408,7 +413,11 @@ const dianJiBaoCunCaoYao = () => {
   if (stringIsBlank(chuFang.value.orderName)) {
     return ElMessage.error('请输入处方名。')
   }
-  let listCode = []
+  if (stringIsBlank(chuFang.value.execDept)) {
+    chuFang.value.execDept = huanZheXinXi.value.smallDept
+    ElMessage.error('执行科室默认使用患者小科室。')
+  }
+  let listCode = [];
   mingXi.value.list.forEach((item) => {
     listCode.push(item.chargeCode + '-' + item.serial)
   })
@@ -472,6 +481,12 @@ const msgLength = () => {
 const clearHerbalInformation = () => {
   mingXi.value.weiYi = []
   mingXi.value.list = []
+  caoYao.value.chargeCodeName = ''
+  caoYao.value.quantity = 1
+  caoYao.value.instruction = ''
+  chuFang.value.cyZql = 0
+  chuFang.value.quantityDj = 0
+  chuFang.value.cyFj = 0
 }
 
 onMounted(() => {

+ 4 - 5
src/views/hospitalization/zhu-yuan-yi-sheng/jian-cha-jian-yan-shen-qing/JianYanShenQing.vue

@@ -82,19 +82,19 @@
 
 </template>
 
-<script name="JianYanShenQing" setup>
-import {createVNode, ref, watch} from 'vue'
+<script  setup>
+import { ref, watch} from 'vue'
 import {shortcuts} from '@/data/shortcuts'
 import {getDateRangeFormatDate, getFormatDatetime} from '@/utils/date'
 import {
   huanZheXinXi,
   xuanZhongJianYan,
   youWuXuanZheHuanZhe,
-  yzHeaderSize, yzMitt, yzSize
+   yzMitt, yzSize
 } from '@/views/hospitalization/zhu-yuan-yi-sheng/public-js/zhu-yuan-yi-sheng'
 import {
   getJyItem,
-  huoQuJianYan, huoQuShengQingXiangQing, queryCheckTextResults,
+  huoQuJianYan, huoQuShengQingXiangQing,
   shanChuJianChaJianYan, viewInspectionItemDetails
 } from '@/api/zhu-yuan-yi-sheng/jian-yan-jian-cha-shen-qing'
 import router from '@/router'
@@ -103,7 +103,6 @@ import {getServerDateApi} from '@/api/public-api'
 import TianJiaJianYan from "@/components/zhu-yuan-yi-sheng/jian-cha-shen-qing/TianJiaJianYan.vue";
 import XcComboGrid from "@/components/xiao-chan/combo-grid/XcComboGrid.vue";
 import {xcMessage} from "@/utils/xiaochan-element-plus";
-import {getWindowSize} from "@/utils/window-size";
 import XcTable from "@/components/xiao-chan/xc-table/XcTable.vue";
 import CuoWuXinXiVue from "@/components/zhu-yuan-yi-sheng/CuoWuXinXi.vue";
 import PrintCheckTable from "@/components/zhu-yuan-yi-sheng/jian-cha-shen-qing/da-ying/PrintCheckTable.vue";

+ 4 - 138
src/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/ShouShu.vue

@@ -8,7 +8,7 @@ import {
 import {
   changePatient,
   huanZheXinXi,
-  unChangePatient
+  unChangePatient, yzHeaderSize
 } from "@/views/hospitalization/zhu-yuan-yi-sheng/public-js/zhu-yuan-yi-sheng";
 import {getOpRecord, getSurgeryDetail, shanChuShouShu} from "@/api/zhu-yuan-yi-sheng/shou-shu-shen-qing";
 import XcTable from "@/components/xiao-chan/xc-table/XcTable.vue";
@@ -23,141 +23,8 @@ import {OpRecord} from "@/ts-type/op-record";
 const operationData = ref([])
 const tabs = ref('ss-lishi')
 
-const details = ref<OpRecord>({
-  "recordId": 50421,
-  "zySerialNo": null,
-  "opTimes": null,
-  "patientName": "李宽量",
-  "deptCode": "8000007",
-  "deptCodeName": "七病室",
-  "wardCode": null,
-  "wardName": null,
-  "applyDate": "2023-12-11 15:19:59",
-  "applyUser": null,
-  "applyDoc": null,
-  "applyDocName": null,
-  "scheduleDate": null,
-  "scheduleUser": null,
-  "status": null,
-  "patientType": null,
-  "actOrderNo": null,
-  "opCode": null,
-  "opName": "经皮腓动脉药物洗脱支架置入术",
-  "opDatetime": "2023-12-11 15:19:59",
-  "roomCode": null,
-  "roomName": null,
-  "opGroupCode": null,
-  "hocusCode": "04",
-  "hocusName": "静脉麻醉",
-  "diagAfterOp": null,
-  "infectionFlag": null,
-  "urgentClinicFlag": "0",
-  "avocationFlag": null,
-  "bloodAmount": null,
-  "bloodType": null,
-  "opStasticsId": null,
-  "isolationIndicator": null,
-  "opScale": "3",
-  "diagBeforeCode": "L23.400",
-  "diagBeforeOp": "染料引起的变应性接触性皮炎",
-  "diagAfterCode": null,
-  "hbsag": null,
-  "bodyCode": null,
-  "partCode": "21",
-  "partCodeName": "左上腹",
-  "specialreqCode": null,
-  "instrumentCode": null,
-  "aspesisScale": null,
-  "preoperativeVisit": null,
-  "preoperativePreparation": null,
-  "remark": "",
-  "opDept": null,
-  "inputId": null,
-  "inputDate": null,
-  "reqId": null,
-  "reqDate": "2023-12-11 15:18:17",
-  "lastModifyId": null,
-  "arrangeId": null,
-  "arrangeDate": null,
-  "inpatientNo": "0422888",
-  "admissTimes": 1,
-  "cancelId": null,
-  "cancelTime": null,
-  "sstc": null,
-  "bedNo": "-04",
-  "twFlag": null,
-  "ssbc": 2,
-  "ssyzFlag": null,
-  "statusFlag": null,
-  "wardDept": null,
-  "doctorZd": null,
-  "doctorZdName": "余春燕",
-  "doctor1": null,
-  "doctor2": null,
-  "doctor3": "00009",
-  "doctor1Name": null,
-  "doctor2Name": null,
-  "doctor3Name": "唐登华",
-  "doctorMz": null,
-  "doctorMzName": null,
-  "nurseQx": null,
-  "nurseQxName": null,
-  "nurseXh": null,
-  "nurseXhName": null,
-  "referPhysicianName": null,
-  "deptDirectorName": null,
-  "sex": null,
-  "ybSelfFlag": 0,
-  "birthDate": null,
-  "age": null,
-  "doctorMzYs": null,
-  "doctorMzYsName": null,
-  "doctorMzHsName": null,
-  "doctorMzHs": null,
-  "opStartDate": null,
-  "opEndDate": null,
-  "anstStartDate": null,
-  "anstEndDate": null,
-  "chargeSum": null,
-  "arrangementExecuted": null,
-  "orderName": null,
-  "statusName": "",
-  "opScaleName": "二级",
-  "ssbcName": "",
-  "diagList": [
-    {
-      "reqNo": 50421,
-      "code": "L23.400",
-      "name": "染料引起的变应性接触性皮炎",
-      "type": 2,
-      "sort": 1
-    },
-    {
-      "reqNo": 50421,
-      "code": "L23.503",
-      "name": "橡胶变应性接触性皮炎",
-      "type": 2,
-      "sort": 2
-    }
-  ],
-  "opCodeList": [
-    {
-      "reqNo": 50421,
-      "code": "00.5500x012",
-      "name": "经皮腓动脉药物洗脱支架置入术",
-      "type": 1,
-      "sort": 1
-    },
-    {
-      "reqNo": 50421,
-      "code": "01.3900x012",
-      "name": "经外侧裂脑内血肿清除术",
-      "type": 1,
-      "sort": 2
-    }
-  ]
-})
-const dialog = ref(true)
+const details = ref<OpRecord>()
+const dialog = ref(false)
 
 const queryOperation = async () => {
   if (huanZheXinXi.value.inpatientNo) {
@@ -202,10 +69,9 @@ onMounted(async () => {
   <el-container>
     <el-main>
       <ShouShuDetails v-model:dialog="dialog" :data="details"/>
-
       <el-tabs v-model="tabs" type="border-card" class="shou_shu">
         <el-tab-pane label="历史信息" name="ss-lishi">
-          <xc-table :final-height="windowSizeStore.h / 1.1 - 30"
+          <xc-table :final-height="windowSizeStore.h / 1.1 - 30 - yzHeaderSize"
                     :local-data="operationData">
             <el-table-column label="申请号" prop="recordId" width="50" show-overflow-tooltip></el-table-column>
             <el-table-column label="状态" width="40" prop="statusName" show-overflow-tooltip></el-table-column>

+ 37 - 28
src/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/components/AddShouShu.vue

@@ -61,44 +61,53 @@ const queryOperation = (val) => {
 
 const checkOneOpCodeList: () => void = XEUtils.debounce(async function () {
 
-  if (addData.value.opCodeList.length > 0) {
-    const item = addData.value.opCodeList[0] as {
-      opScale: string
-      code: string
-      name: string
-    }
+  if (addData.value.opCodeList.length === 0) {
+    addData.value.opCode = ''
+    addData.value.opName = ''
+    return
 
-    addData.value.opCode = item.code
-    addData.value.opName = item.name
+  }
 
-    if (!opGrade.has(item.code)) {
-      const res = await getDoctorByOpCode(item.code)
-      if (res.length > 0) {
-        opGrade.set(item.code, res)
-      }
-    }
-    if (opGrade.has(item.code)) {
-      designateASurgeonInChief.value = opGrade.get(item.code)
-      addData.value.doctorZd = ''
-      addData.value.doctorZdName = ''
-    } else {
-      designateASurgeonInChief.value = []
-    }
+  const item = addData.value.opCodeList[0] as {
+    opScale: string
+    code: string
+    name: string
+  }
 
+  addData.value.opCode = item.code
+  addData.value.opName = item.name
 
-    if (item.opScale !== null) {
-      disabledOpScale.value = true
-      addData.value.opScale = item.opScale
-    } else {
-      disabledOpScale.value = false
+  if (!opGrade.has(item.code)) {
+    const res = await getDoctorByOpCode(item.code)
+    if (res.length > 0) {
+      opGrade.set(item.code, res)
     }
+  }
+  if (opGrade.has(item.code)) {
+    designateASurgeonInChief.value = opGrade.get(item.code)
+    addData.value.doctorZd = ''
+    addData.value.doctorZdName = ''
+  } else {
+    designateASurgeonInChief.value = []
+  }
 
-    editorRef.value.buildOrderName()
+
+  if (item.opScale !== null) {
+    disabledOpScale.value = true
+    addData.value.opScale = item.opScale
+  } else {
+    disabledOpScale.value = false
   }
+
+  editorRef.value.buildOrderName()
 }, 500)
 
 const changeDiagList = () => {
-  if (addData.value.diagList.length === 0) return
+  if (addData.value.diagList.length === 0) {
+    addData.value.diagBeforeCode = ''
+    addData.value.diagBeforeOp = ''
+    return
+  }
   const item = addData.value.diagList[0] as {
     code: string
     name: string

+ 1 - 1
src/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/components/AddShouShuTable.vue

@@ -96,7 +96,7 @@ onMounted(async () => {
                  :query-data-func="props.queryFunction"/>
 </template>
 
-<style>
+<style lang="scss">
 
 .ss_text {
   padding: 3px;

+ 1 - 0
vite.config.js

@@ -74,5 +74,6 @@ export default defineConfig({
     },
     build: {
         chunkSizeWarningLimit: 1000,
+        outDir: 'release/dist'
     },
 })