Browse Source

手术申请

xiaochan 1 năm trước cách đây
mục cha
commit
803a4ef6fd

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

@@ -1,6 +1,7 @@
 // @ts-ignore
 import request from "@/utils/request";
 import requestV2 from "../../utils/request-v2";
+import {OpRecord} from "../../ts-type/op-record";
 
 let url = '/shouShuShenQing/'
 
@@ -123,3 +124,37 @@ export function applicationOpRecord(data) {
         data
     })
 }
+
+export async function getSurgeryDetail(patNo, times, recordId) {
+    const res = await requestV2<{
+        opRecord: OpRecord,
+        list: {
+            reqNo: number;
+            code: string;
+            name: string;
+            type: number;
+            sort: number
+        }[]
+    }>({
+        url: url + "getSurgeryDetail",
+        method: 'get',
+        params: {patNo, times, recordId}
+    })
+
+    const diagList = []
+    const opCodeList = []
+
+
+    res.list.forEach(item => {
+        if (item.type === 1) {
+            opCodeList.push(item)
+        } else {
+            diagList.push(item)
+        }
+    })
+
+    res.opRecord.diagList = diagList
+    res.opRecord.opCodeList = opCodeList
+
+    return res.opRecord
+}

+ 0 - 2
src/components/cy/dialog/src/CyDialog.vue

@@ -5,9 +5,7 @@ import {
   ElFocusTrap,
   useZIndex, useDraggable,
 } from "element-plus";
-import sleep from "@/utils/sleep";
 import '@/assets/cy/cy-dialog.scss'
-import {Headset} from "@element-plus/icons-vue";
 
 const props = defineProps({
   modelValue: {

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

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

+ 9 - 6
src/components/zhu-yuan-yi-sheng/emr/auxiliary-tools/EmrOperation.vue

@@ -26,9 +26,9 @@
   </div>
 </template>
 
-<script setup name='EmrOperation'>
-import {getOpRecordList} from "@/api/zhu-yuan-yi-sheng/emr-patient";
+<script setup>
 import XEUtils from 'xe-utils'
+import {getOpRecord, getSurgeryDetail} from "@/api/zhu-yuan-yi-sheng/shou-shu-shen-qing";
 
 const {patNo, times} = defineProps({
   patNo: String,
@@ -38,10 +38,12 @@ const {patNo, times} = defineProps({
 
 const emits = defineEmits(['to-fill-in-data'])
 
-const paddingClick = (row) => {
+const paddingClick = async (row) => {
+  const res = await getSurgeryDetail(row.inpatientNo, row.admissTimes, row.recordId)
+
   let data = {
-    术前诊断: toArray(row.diagBeforeCode, row.diagBeforeOp),
-    拟行手术: toArray(row.opCode, row.opName),
+    术前诊断: res.diagList,
+    拟行手术: res.opCodeList,
     麻醉方式: toArray(row.hocusCode, row.hocusName),
     术者: toArray(row.doctorZd, row.doctorZdName),
     第一助手: toArray(row.doctor1, row.doctor1Name),
@@ -53,6 +55,7 @@ const paddingClick = (row) => {
     手术日期: row.opDatetime,
     手术者签名: toArray(row.doctorZd, row.doctorZdName),
   }
+
   emits('to-fill-in-data', data)
 }
 
@@ -66,7 +69,7 @@ const toArray = (code, name) => {
 const data = ref([])
 
 onMounted(() => {
-  getOpRecordList(patNo, times).then(res => {
+  getOpRecord(patNo, times).then(res => {
     data.value = res
   })
 })

+ 4 - 4
src/data/operation.ts

@@ -6,8 +6,8 @@ export const surgicalSituation = [
 
 
 export const shouShuDengJi = [
-    {code: 1, name: '四级', value: 4},
-    {code: 2, name: '三级', value: 3},
-    {code: 3, name: '二级', value: 2},
-    {code: 4, name: '一级', value: 1},
+    {code: '1', name: '四级', value: 4},
+    {code: '2', name: '三级', value: 3},
+    {code: '3', name: '二级', value: 2},
+    {code: '4', name: '一级', value: 1},
 ]

+ 11 - 2
src/ts-type/op-record.ts

@@ -1,13 +1,14 @@
 export declare type OpRecord = {
     opScale: string
     opDatetime: string
+    urgentClinicName?: string
     orderName: string
     opCode: string
     opName: string
     diagBeforeOp: string
     diagBeforeCode: string
-    opCodeList?: [],
-    diagList?: [],
+    opCodeList?: any[],
+    diagList?: any[],
     urgentClinicFlag: string
     ssbc: number
     ybSelfFlag: number
@@ -20,4 +21,12 @@ export declare type OpRecord = {
     remark: string
     applyDate: string
     generateRejectedOrders?: boolean
+    opScaleName?: string
+    hocusName?: string
+    doctor1Name?: string;
+    doctor2Name?: string;
+    doctor3Name?: string;
+    doctorMzName?: string
+    nurseQxName?: string
+    nurseXhName?: string
 };

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

@@ -10,16 +10,155 @@ import {
   huanZheXinXi,
   unChangePatient
 } from "@/views/hospitalization/zhu-yuan-yi-sheng/public-js/zhu-yuan-yi-sheng";
-import {getOpRecord, shanChuShouShu} from "@/api/zhu-yuan-yi-sheng/shou-shu-shen-qing";
+import {getOpRecord, getSurgeryDetail, shanChuShouShu} from "@/api/zhu-yuan-yi-sheng/shou-shu-shen-qing";
 import XcTable from "@/components/xiao-chan/xc-table/XcTable.vue";
 import {windowSizeStore} from "@/utils/store-public";
 import {CyMessageBox} from "@/components/cy/message-box";
 import AddShouShu from "@/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/components/AddShouShu.vue";
 import {ssMitt} from "@/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/shou-shu";
+import ShouShuDetails
+  from "@/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/components/ShouShuDetails.vue";
+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 queryOperation = async () => {
   if (huanZheXinXi.value.inpatientNo) {
     getOpRecord(huanZheXinXi.value.inpatientNo, huanZheXinXi.value.admissTimes).then(res => {
@@ -37,6 +176,13 @@ const delClick = async (row, index) => {
   operationData.value.splice(index, 1)
 }
 
+const viewDetails = ({inpatientNo, admissTimes, recordId}) => {
+  getSurgeryDetail(inpatientNo, admissTimes, recordId).then(res => {
+    details.value = res
+    dialog.value = true
+  })
+}
+
 onDeactivated(() => {
   unChangePatient('手术')
 })
@@ -48,18 +194,22 @@ onActivated(() => {
 
 onMounted(async () => {
   ssMitt.on('query', queryOperation)
+  console.log(details.value)
 })
 </script>
 
 <template>
   <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"
                     :local-data="operationData">
             <el-table-column label="申请号" prop="recordId" width="50" show-overflow-tooltip></el-table-column>
-            <el-table-column label="状态" width="30" prop="statusName" show-overflow-tooltip></el-table-column>
+            <el-table-column label="状态" width="40" prop="statusName" show-overflow-tooltip></el-table-column>
+            <el-table-column label="情况" width="40" prop="urgentClinicName" show-overflow-tooltip></el-table-column>
             <el-table-column label="手术名" prop="opName" show-overflow-tooltip></el-table-column>
             <el-table-column label="手术时间" prop="opDatetime" show-overflow-tooltip></el-table-column>
             <el-table-column label="术前诊断" prop="diagBeforeOp" show-overflow-tooltip width="90"></el-table-column>
@@ -71,6 +221,7 @@ onMounted(async () => {
                 <el-button @click="queryOperation" type="primary">查询</el-button>
               </template>
               <template #default="{row,$index}">
+                <el-button @click="viewDetails(row)">查看</el-button>
                 <el-button icon="Delete" type="danger" @click.stop="delClick(row, $index)">删除</el-button>
               </template>
             </el-table-column>

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

@@ -11,7 +11,6 @@ import type {OpRecord} from "@/ts-type/op-record";
 import {useZIndex} from "element-plus";
 import {getServerDate} from "@/utils/moment-utils";
 import {yzMitt} from "@/views/hospitalization/zhu-yuan-yi-sheng/public-js/zhu-yuan-yi-sheng";
-import {ssMitt} from "@/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/shou-shu";
 
 const initAddData = (): OpRecord => {
   return {
@@ -61,8 +60,6 @@ const queryOperation = (val) => {
 }
 
 const checkOneOpCodeList: () => void = XEUtils.debounce(async function () {
-  designateASurgeonInChief.value = []
-  disabledOpScale.value = false
 
   if (addData.value.opCodeList.length > 0) {
     const item = addData.value.opCodeList[0] as {
@@ -84,12 +81,16 @@ const checkOneOpCodeList: () => void = XEUtils.debounce(async function () {
       designateASurgeonInChief.value = opGrade.get(item.code)
       addData.value.doctorZd = ''
       addData.value.doctorZdName = ''
+    } else {
+      designateASurgeonInChief.value = []
     }
 
 
     if (item.opScale !== null) {
       disabledOpScale.value = true
       addData.value.opScale = item.opScale
+    } else {
+      disabledOpScale.value = false
     }
 
     editorRef.value.buildOrderName()
@@ -140,9 +141,7 @@ onMounted(() => {
   yzMitt.on('ssNotSave', () => {
     return !markShow.value
   })
-  ssMitt.on('markVisible', () => {
-    return markShow.value
-  })
+
 })
 </script>
 
@@ -164,7 +163,7 @@ onMounted(() => {
     </div>
     <div style="margin-left: 5px">
       <AddShouShuTable
-          title="诊断"
+          title="术前诊断"
           @changeList="changeDiagList"
           v-model:data="addData.diagList"
           :query-function="diagnosisInOurHospital"

+ 25 - 17
src/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/components/AddShouShuEditor.vue

@@ -22,7 +22,12 @@ import {
 import {userInfoStore} from "@/utils/store-public";
 import XEUtils from "xe-utils";
 import {formatDateToStr} from "@/utils/moment-utils";
-import {ssMitt} from "@/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/shou-shu";
+import {
+  ssMitt,
+  anestheticMode,
+  personnelList,
+  surgicalSiteList
+} from "@/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/shou-shu";
 
 const props = defineProps<{
   data: OpRecord,
@@ -31,12 +36,6 @@ const props = defineProps<{
 }>()
 const emits = defineEmits(['update:data', 'clear'])
 const dataModel = useVModel(props, 'data', emits) as Ref<OpRecord>
-// 麻醉方式
-const anestheticMode = ref([])
-// 人员
-const personnelList = ref([])
-// 手术部位
-const surgicalSiteList = ref([])
 
 const personnel = [
   {label: '编码', prop: 'code', width: 46},
@@ -126,15 +125,24 @@ const delClick = () => {
 
 
 onMounted(() => {
-  maZuiFangShi().then(res => {
-    anestheticMode.value = res as any
-  })
-  getRenYuan('').then(res => {
-    personnelList.value = res as any
-  })
-  huoQuShouShuBuWei('').then(res => {
-    surgicalSiteList.value = res
-  })
+  if (anestheticMode.value.length === 0) {
+    maZuiFangShi().then(res => {
+      anestheticMode.value = res as any
+    })
+  }
+
+  if (personnelList.value.length === 0) {
+    getRenYuan('').then(res => {
+      personnelList.value = res as any
+    })
+  }
+
+  if (surgicalSiteList.value.length === 0) {
+    huoQuShouShuBuWei('').then(res => {
+      surgicalSiteList.value = res
+    });
+  }
+
 })
 
 defineExpose({
@@ -327,7 +335,7 @@ defineExpose({
       <el-col :span="24">
         <el-form-item>
           <el-button :loading="loading" type="primary" @click="updateClick">保存</el-button>
-          <el-button :loading="loading" type="danger" @click="delClick">删除</el-button>
+          <el-button :loading="loading" type="danger" @click="delClick">取消申请</el-button>
         </el-form-item>
       </el-col>
 

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

@@ -82,9 +82,9 @@ onMounted(async () => {
         {{ row.name }}
       </template>
     </el-table-column>
-    <el-table-column>
+    <el-table-column width="32">
       <template #default="{$index}">
-        <el-button type="danger" @click="delClock($index)">删除</el-button>
+        <el-button type="danger" @click="delClock($index)" circle icon="Delete"/>
       </template>
     </el-table-column>
   </el-table>

+ 171 - 0
src/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/components/ShouShuDetails.vue

@@ -0,0 +1,171 @@
+<script setup lang="ts">
+import {OpRecord} from "@/ts-type/op-record";
+import {useVModels} from '@vueuse/core'
+
+const props = defineProps<{
+  data: OpRecord,
+  dialog: boolean
+}>()
+
+const emits = defineEmits(['update:dialog', 'update:data'])
+const uvm = useVModels(props, emits)
+
+</script>
+
+<template>
+  <el-dialog v-model="uvm.dialog.value" title="手术详情" width="60%">
+    <div class="details_body">
+
+      <div>
+        <el-table :data="data.opCodeList">
+          <el-table-column :label="`手术名称`" prop="name" width="120">
+            <template #default="{row,$index}">
+              <span class="ss_text" :class="$index ===0? 'main' : 'secondary'">
+                {{ $index === 0 ? '主' : '次' }}
+              </span>
+              {{ row.name }}
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <div>
+        <el-table :data="data.diagList">
+          <el-table-column :label="`诊断名称`" prop="name" width="120">
+            <template #default="{row,$index}">
+              <span class="ss_text" :class="$index ===0? 'main' : 'secondary'">
+                {{ $index === 0 ? '主' : '次' }}
+              </span>
+              {{ row.name }}
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <div>
+        <el-form>
+
+          <el-row :gutter="5">
+            <el-col :span="12">
+              <el-form-item label="手术时间" prop="opDatetime">
+                <el-input v-model="data.opDatetime"/>
+              </el-form-item>
+
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="情况">
+                <el-input v-model="data.urgentClinicName"/>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12">
+              <el-form-item label="班次">
+                <el-switch
+                    v-model="data.ssbc"
+                    :active-value="1"
+                    :inactive-value="2"
+                    active-color="#13ce66"
+                    active-text="正常"
+                    inactive-color="#ff4949"
+                    inactive-text="加班">
+                </el-switch>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12">
+              <el-form-item label="自费">
+                <el-switch
+                    v-model="data.ybSelfFlag"
+                    :active-value="1"
+                    :inactive-value="0"
+                    active-color="#13ce66"
+                    active-text="是"
+                    inactive-color="#ff4949"
+                    inactive-text="否">
+                </el-switch>
+              </el-form-item>
+            </el-col>
+
+
+            <el-col :span="12">
+              <el-form-item label="手术部位">
+                <el-input v-model="data.partCodeName"/>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12">
+              <el-form-item label="手术等级">
+                <el-input v-model="data.opScaleName"/>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12">
+              <el-form-item label="麻醉方式">
+                <el-input v-model="data.hocusName"/>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12">
+              <el-form-item label="主刀医生">
+                <el-input v-model="data.doctorZdName"/>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12">
+              <el-form-item label="第一助手">
+                <el-input v-model="data.doctor1Name"/>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12">
+              <el-form-item label="第二助手">
+                <el-input v-model="data.doctor2Name"/>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12">
+              <el-form-item label="第三助手">
+                <el-input v-model="data.doctor3Name"/>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12">
+              <el-form-item label="麻醉医生">
+                <el-input v-model="data.doctorMzName"/>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12">
+              <el-form-item label="器械护士">
+                <el-input v-model="data.nurseQxName"/>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12">
+              <el-form-item label="巡回护士">
+                <el-input v-model="data.nurseXhName"/>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="24">
+              <el-form-item label="附注说明">
+                <el-input v-model="data.remark" :rows="6" maxlength="50" show-word-limit
+                          style="width: 450px;"
+                          type="textarea"/>
+              </el-form-item>
+            </el-col>
+
+          </el-row>
+
+        </el-form>
+      </div>
+
+    </div>
+  </el-dialog>
+</template>
+
+<style lang="scss">
+.details_body {
+  display: flex;
+}
+</style>

+ 8 - 1
src/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/shou-shu.ts

@@ -1,9 +1,16 @@
 import EventBus from "../../../../../utils/mitt";
+import {ref} from "vue";
 
 declare type SsMitt = {
     query: () => void;
-    markVisible: () => boolean
 }
 export const ssMitt = new EventBus<SsMitt>();
 
+// 麻醉方式
+export const anestheticMode = ref([])
 
+// 人员
+export const personnelList = ref([])
+
+// 手术部位
+export const surgicalSiteList = ref([])