Explorar o código

急诊抢救业务

lighter hai 9 meses
pai
achega
18de197995

+ 27 - 0
src/api/medical-insurance/emergency-rescue.js

@@ -0,0 +1,27 @@
+import request from '../../utils/request'
+
+export function checkGeneratedFees(data) {
+  return request({
+    url: '/emergencyRescue/checkGeneratedFees',
+    method: 'post',
+    data,
+  })
+}
+
+export function executeEmergencyRescue(data) {
+  return request({
+    url: '/emergencyRescue/executeEmergencyRescue',
+    method: 'post',
+    data,
+    showLoading: false
+  })
+}
+
+export function revokeBusiness(data) {
+  return request({
+    url: '/emergencyRescue/revokeBusiness',
+    method: 'post',
+    data,
+    showLoading: false
+  })
+}

+ 98 - 82
src/views/medical-insurance/outpatient/MzRegister.vue

@@ -50,6 +50,8 @@
           <el-dropdown-menu>
             <el-dropdown-item icon="CreditCard" command="execute">医保登记</el-dropdown-item>
             <el-dropdown-item icon="RefreshLeft" command="revoke">取消登记</el-dropdown-item>
+            <el-dropdown-item divided icon="Help" command="emergencyRescue">急诊抢救</el-dropdown-item>
+            <el-dropdown-item icon="Refresh" command="rvkEmergencyRescue">急诊抢救撤销</el-dropdown-item>
           </el-dropdown-menu>
         </template>
       </el-dropdown>
@@ -84,7 +86,7 @@
           </el-dropdown-menu>
         </template>
       </el-dropdown>
-      <el-button type="success" style="margin-left: 8px" @click="seeMzBlRecord">门诊病历</el-button>
+      <el-button style="margin-left: 8px" type="success" @click="seeMzBlRecord">门诊病历</el-button>
       <el-button type="danger" icon="Refresh" @click="clearinfo"> 重置</el-button>
     </header>
     <div class="layout_main layout_container layout-horizontal" >
@@ -240,6 +242,8 @@
   </el-dialog>
 
   <mz-bl-record v-if="showMzBlRecord" :patient-id="patientId" :times="times" @closed="showMzBlRecord = false"></mz-bl-record>
+
+  <EmergencyRescue ref="emergencyRef" :param="emergencyParams" />
 </template>
 
 <script setup>
@@ -258,7 +262,7 @@ import {
   outpatientSettlement,
   revokeOutpatientSettlement, rxPreCheck,
 } from '@/api/medical-insurance/si-outpatient'
-import {ElMessage, ElMessageBox, ElSelect} from 'element-plus'
+import {ElMessageBox, ElSelect, useZIndex} from 'element-plus'
 import {
   obtainBasicPersonInfo,
   querySpecialChronicDiseasesAccreditation,
@@ -278,6 +282,9 @@ import MzReceipt from "@/components/outpatient/MzReceipt.vue";
 import {useUserStore} from "@/pinia/user-store";
 import {CyMessageBox} from "@/components/cy/message-box";
 import {xcMessage} from "@/utils/xiaochan-element-plus";
+import {checkGeneratedFees} from "@/api/medical-insurance/emergency-rescue";
+import {getDatetime} from "@/utils/date";
+import EmergencyRescue from "@/views/medical-insurance/outpatient/component/EmergencyRescue.vue";
 
 const medType = ref(null)
 const admdvs = ref(null)
@@ -336,23 +343,13 @@ const handleClickInjuryinfo = (row) => {
   injuryOutpatientRegister(row).then(() => {
     showInsuinfo.value = false
     clearReadCardData()
-    ElMessage({
-      message: '登记成功',
-      type: 'success',
-      duration: 2000,
-      showClose: true,
-    })
+    xcMessage.success('登记成功')
   });
 }
 
 const nullPatientId = () => {
   if (!patientId.value) {
-    ElMessage({
-      message: '请输入门诊id号!',
-      type: 'warning',
-      duration: 2500,
-      showClose: true,
-    })
+    xcMessage.warning('请输入门诊id号!')
     return true
   }
   return false
@@ -367,12 +364,7 @@ const clearExpContent = () => {
 
 const nullMedType = () => {
   if (!medType.value) {
-    ElMessage({
-      message: '请先选择医疗类别!',
-      type: 'warning',
-      duration: 2500,
-      showClose: true,
-    })
+    xcMessage.warning('请先选择医疗类别!')
     return true
   }
   return false
@@ -404,49 +396,64 @@ const register = (command) => {
     needSaving: 1,
   }
   if (command === 'execute') {
-    if (injuryMode.value) {
-      employeeInfoInquiry2(param).then((res) => {
-        injuryinfo.value = res
-        showInsuinfo.value = true
-      })
-    } else {
-      obtainBasicPersonInfo(param).then((res) => {
-        times.value = res.times
-        psnBaseinfo.value = res
-        showInsuinfo.value = true
-      });
-    }
+    beforeRegister(param)
+  } else if (command === 'revoke') {
+    revokeRegister(param)
+  } else if (command === 'emergencyRescue') {
+    beforeEmergencyRescue(param)
   } else {
-    if (injuryMode.value) {
-      revokeInjuryOutpatientRegistration(param).then(res => {
-        ElMessage({
-          message: res,
-          type: 'success',
-          duration: 2000,
-          showClose: true,
-        })
-      })
-    } else {
-      revokeOutpatientRegistration(param).then((res) => {
-        ElMessage({
-          message: res,
-          type: 'success',
-          duration: 2000,
-          showClose: true,
-        })
-      })
-    }
+    revokeEmergencyRescue(param)
+  }
+}
+
+function beforeEmergencyRescue(param) {
+  if (param.medType !== '1301') {
+    xcMessage.error('医疗类别请选择【急诊抢救】。')
+    return
+  }
+  checkGeneratedFees(param).then(() => {
+    obtainBasicPersonInfo(param).then(res => {
+      times.value = res.times
+      psnBaseinfo.value = res
+      showInsuinfo.value = true
+    })
+  })
+}
+
+function beforeRegister(param) {
+  if (param.medType === '1301') {
+    xcMessage.error('医疗类别为【急诊抢救】的患者,请选择急诊抢救专用通道。')
+    return
+  }
+  if (injuryMode.value) {
+    employeeInfoInquiry2(param).then((res) => {
+      injuryinfo.value = res
+      showInsuinfo.value = true
+    });
+  } else {
+    obtainBasicPersonInfo(param).then((res) => {
+      times.value = res.times
+      psnBaseinfo.value = res
+      showInsuinfo.value = true
+    });
+  }
+}
+
+function revokeRegister(param) {
+  if (injuryMode.value) {
+    revokeInjuryOutpatientRegistration(param).then(res => {
+      xcMessage.success(res)
+    })
+  } else {
+    revokeOutpatientRegistration(param).then((res) => {
+      xcMessage.success(res)
+    })
   }
 }
 
 const nullTimes = () => {
   if (!times.value) {
-    ElMessage({
-      message: '请先获取门诊处方!',
-      type: 'warning',
-      duration: 2500,
-      showClose: true,
-    })
+    xcMessage.warning('请先获取门诊处方!')
     return true
   }
   return false
@@ -545,12 +552,7 @@ const fetchReceipts = (param) => {
 
 const markMzFees = () => {
   if (currentReceipts.value.length === 0) {
-    ElMessage({
-      message: '请先选择要保存的处方!',
-      type: 'warning',
-      duration: 2500,
-      showClose: true,
-    })
+    xcMessage.warning('请先选择要保存的处方!')
     return
   }
   ElMessageBox.confirm('是否将选中处方生成医保处方?', '提示', {
@@ -560,12 +562,7 @@ const markMzFees = () => {
   }).then(() => {
     insertSiMzFees(currentReceipts.value).then(() => {
       currentOrder.value.status = true
-      ElMessage({
-        message: '已成功生成医保处方。',
-        type: 'success',
-        duration: 2500,
-        showClose: true,
-      })
+      xcMessage.success('已成功生成医保处方。')
     })
   }).catch(() => {
   })
@@ -627,6 +624,8 @@ const afterReadCard = (result) => {
   readCardData.readCardBizType = result.readCardBizType
 }
 
+const emergencyRef = ref(null)
+const emergencyParams = ref({})
 const handleClickInsuinfo = (row) => {
   certainAdmdvs.value = row.insuplcAdmdvs
   const param = {
@@ -643,16 +642,38 @@ const handleClickInsuinfo = (row) => {
     readCardResult: readCardData.readCardResult,
     readCardBizType: readCardData.readCardBizType,
   }
+  if (param.medType === '1301') {
+    emergencyRescueProcess(param)
+  } else {
+    normalOutpatientRegister(param)
+  }
+}
+
+function emergencyRescueProcess(param) {
+  showInsuinfo.value = false
+  emergencyParams.value = param
+  nextTick().then(() => {
+    emergencyRef.value.start()
+  })
+}
+
+function revokeEmergencyRescue(param) {
+  if (param.medType !== '1301') {
+    xcMessage.error('医疗类别请选择【急诊抢救】。')
+    return
+  }
+  emergencyParams.value = param
+  nextTick().then(() => {
+    emergencyRef.value.revoke()
+  })
+}
+
+function normalOutpatientRegister(param) {
   outpatientRegistration(param).then((res) => {
     showInsuinfo.value = false
     clearReadCardData()
-    ElMessage({
-      message: res,
-      type: 'success',
-      duration: 2000,
-      showClose: true,
-    })
-  })
+    xcMessage.success(res)
+  });
 }
 
 const clickOrderNo = (row) => {
@@ -686,12 +707,7 @@ const unmarkMzFees = (row) => {
   }).then(() => {
     deleteMzReceipt(row).then(() => {
       currentOrder.value.status = false
-      ElMessage({
-        message: '已成功删除医保处方。',
-        type: 'success',
-        duration: 2500,
-        showClose: true,
-      })
+      xcMessage.success('已成功删除医保处方。')
     })
   }).catch(() => {
   })

+ 113 - 147
src/views/medical-insurance/outpatient/MzSpltryRcrd.vue

@@ -37,23 +37,27 @@
       <ReadCard :pat-no="patNo" @success="afterReadCard"/>
       <el-dropdown trigger="click" @command="register">
         <el-button type="primary">
-          登记&nbsp;<el-icon>
-          <ArrowDown/>
-        </el-icon>
+          登记&nbsp;
+          <el-icon>
+            <ArrowDown/>
+          </el-icon>
         </el-button>
         <template #dropdown>
           <el-dropdown-menu>
             <el-dropdown-item icon="CreditCard" command="execute">医保登记</el-dropdown-item>
             <el-dropdown-item icon="RefreshLeft" command="revoke">取消登记</el-dropdown-item>
+            <el-dropdown-item divided icon="Help" command="emergencyRescue">急诊抢救</el-dropdown-item>
+            <el-dropdown-item icon="Refresh" command="rvkEmergencyRescue">急诊抢救撤销</el-dropdown-item>
             <el-dropdown-item divided icon="Edit" command="diags">医保诊断补录</el-dropdown-item>
           </el-dropdown-menu>
         </template>
       </el-dropdown>
       <el-dropdown trigger="click" @command="receiptsOpts" style="margin-left: 8px">
         <el-button type="primary">
-          处方&nbsp;<el-icon>
-          <ArrowDown/>
-        </el-icon>
+          处方&nbsp;
+          <el-icon>
+            <ArrowDown/>
+          </el-icon>
         </el-button>
         <template #dropdown>
           <el-dropdown-menu>
@@ -112,7 +116,6 @@
     </div>
   </div>
 
-
   <el-dialog title="个人信息" v-model="showInsuinfo" width="65%">
     <el-tag>{{ injuryMode ? '工伤信息' : '参保信息' }}</el-tag>
     <div v-if="injuryMode">
@@ -170,6 +173,8 @@
       :times="currentRow.times"
       @closed="showMzBlRecord = false"
   ></mz-bl-record>
+
+  <EmergencyRescue ref="emergencyRef" :param="emergencyParams" />
 </template>
 
 <script setup>
@@ -197,7 +202,7 @@ import {
   queryMzMatnDises
 } from '@/api/medical-insurance/si-query'
 import {onMounted, ref} from 'vue'
-import {ElMessage, ElMessageBox, ElSelect} from 'element-plus'
+import {ElMessageBox, ElSelect} from 'element-plus'
 import {getMedTypesByFlag} from '@/api/medical-insurance/si-dict'
 import {shortcuts} from '@/data/shortcuts'
 import {getDateRangeFormatDate} from '@/utils/date'
@@ -209,6 +214,9 @@ import MzBlRecord from "@/components/outpatient/MzBlRecord.vue";
 import MzReceipt from "@/components/outpatient/MzReceipt.vue";
 import {useUserStore} from "@/pinia/user-store";
 import {CyMessageBox} from "@/components/cy/message-box";
+import EmergencyRescue from "@/views/medical-insurance/outpatient/component/EmergencyRescue.vue";
+import {xcMessage} from "@/utils/xiaochan-element-plus";
+import {checkGeneratedFees} from "@/api/medical-insurance/emergency-rescue";
 
 const patNo = ref('')
 const medType = ref('')
@@ -247,24 +255,14 @@ const nullPatNo = () => {
   if (patNo.value) {
     return false
   }
-  ElMessage({
-    message: '请输入门诊ID!',
-    type: 'warning',
-    duration: 2500,
-    showClose: true,
-  })
+  xcMessage.warning('请输入门诊ID!')
   return true
 }
 const nullMedtype = () => {
   if (medType.value) {
     return false
   }
-  ElMessage({
-    message: '请选择医疗类别!',
-    type: 'warning',
-    duration: 2500,
-    showClose: true,
-  })
+  xcMessage.warning('请选择医疗类别!')
   return true
 }
 
@@ -276,12 +274,7 @@ const fetchHistoryReceipts = () => {
     return
   }
   if (!dateRange.value) {
-    ElMessage({
-      message: '请选择日期范围!',
-      type: 'warning',
-      duration: 2500,
-      showClose: true,
-    })
+    xcMessage.warning('请选择日期范围!')
     return
   }
   clearReadCardData()
@@ -317,23 +310,13 @@ const handleClickInjuryinfo = (row) => {
   injuryOutpatientRegister(row).then(() => {
     showInsuinfo.value = false
     clearReadCardData()
-    ElMessage({
-      message: '登记成功',
-      type: 'success',
-      duration: 2000,
-      showClose: true,
-    })
+    xcMessage.success('登记成功')
   })
 }
 
 const register = (command) => {
   if (!currentRow.value.times) {
-    ElMessage({
-      message: '请先选择历史处方。',
-      type: 'warning',
-      duration: 2000,
-      showClose: true,
-    })
+    xcMessage.warning('请先选择历史处方。')
     return
   }
   const param = {
@@ -345,42 +328,61 @@ const register = (command) => {
     needSaving: 1,
   }
   if (command === 'execute') {
-    if (injuryMode.value) {
-      employeeInfoInquiry2(param).then((res) => {
-        injuryinfo.value = res
-        showInsuinfo.value = true
-      })
-    } else {
-      obtainBasicPersonInfo(param).then((res) => {
-        insuinfo.value = res.insuinfo
-        showInsuinfo.value = true
-      });
-    }
+    beforeRegister(param)
   } else if (command === 'revoke') {
-    if (injuryMode.value) {
-      revokeInjuryOutpatientRegistration(param).then(res => {
-        ElMessage({
-          message: res,
-          type: 'success',
-          duration: 2000,
-          showClose: true,
-        })
-      })
-    } else {
-      revokeOutpatientRegistration(param).then((res) => {
-        ElMessage({
-          message: res,
-          type: 'success',
-          duration: 2000,
-          showClose: true,
-        })
-      })
-    }
+    revokeRegister(param)
+  } else if (command === 'emergencyRescue') {
+    beforeEmergencyRescue(param)
+  } else if (command === 'rvkEmergencyRescue') {
+    revokeEmergencyRescue(param)
   } else {
     showInputDiags.value = true
   }
 }
 
+function beforeRegister(param) {
+  if (param.medType === '1301') {
+    xcMessage.error('医疗类别为【急诊抢救】的患者,请选择急诊抢救专用通道。')
+    return
+  }
+  if (injuryMode.value) {
+    employeeInfoInquiry2(param).then((res) => {
+      injuryinfo.value = res
+      showInsuinfo.value = true
+    })
+  } else {
+    obtainBasicPersonInfo(param).then((res) => {
+      insuinfo.value = res.insuinfo
+      showInsuinfo.value = true
+    })
+  }
+}
+
+function revokeRegister(param) {
+  if (injuryMode.value) {
+    revokeInjuryOutpatientRegistration(param).then(res => {
+      xcMessage.success(res)
+    })
+  } else {
+    revokeOutpatientRegistration(param).then((res) => {
+      xcMessage.success(res)
+    })
+  }
+}
+
+function beforeEmergencyRescue(param) {
+  if (param.medType !== '1301') {
+    xcMessage.error('医疗类别请选择【急诊抢救】。')
+    return
+  }
+  checkGeneratedFees(param).then(() => {
+    obtainBasicPersonInfo(param).then(res => {
+      insuinfo.value = res.insuinfo
+      showInsuinfo.value = true
+    })
+  })
+}
+
 const readCardData = reactive({
   mdtrtCertType: null,
   readCardResult: null,
@@ -399,6 +401,8 @@ const afterReadCard = (result) => {
   readCardData.readCardBizType = result.readCardBizType
 }
 
+const emergencyRef = ref(null)
+const emergencyParams = ref({})
 const handleClickInsuinfo = (row) => {
   const param = {
     patNo: patNo.value,
@@ -413,16 +417,38 @@ const handleClickInsuinfo = (row) => {
     readCardResult: readCardData.readCardResult,
     readCardBizType: readCardData.readCardBizType,
   }
+  if (param.medType === '1301') {
+    emergencyRescueProcess(param)
+  } else {
+    normalOutpatientRegister(param)
+  }
+}
+
+function emergencyRescueProcess(param) {
+  showInsuinfo.value = false
+  emergencyParams.value = param
+  nextTick().then(() => {
+    emergencyRef.value.start()
+  })
+}
+
+function revokeEmergencyRescue(param) {
+  if (param.medType !== '1301') {
+    xcMessage.error('医疗类别请选择【急诊抢救】。')
+    return
+  }
+  emergencyParams.value = param
+  nextTick().then(() => {
+    emergencyRef.value.revoke()
+  })
+}
+
+function normalOutpatientRegister(param) {
   outpatientRegistration(param).then((res) => {
     clearReadCardData()
     showInsuinfo.value = false
-    ElMessage({
-      message: res,
-      type: 'success',
-      duration: 2000,
-      showClose: true,
-    })
-  })
+    xcMessage.success(res)
+  });
 }
 
 const receiptsOpts = (command) => {
@@ -444,12 +470,7 @@ const receiptsOpts = (command) => {
 
 const markMzFees = () => {
   if (currentReceipts.value.length === 0) {
-    ElMessage({
-      message: '请先选择要保存的处方!',
-      type: 'warning',
-      duration: 2500,
-      showClose: true,
-    })
+    xcMessage.warning('请先选择要保存的处方!')
     return
   }
   ElMessageBox.confirm('是否将选中处方生成医保处方?', '提示', {
@@ -459,12 +480,7 @@ const markMzFees = () => {
   }).then(() => {
     insertSiMzFeesForSupplement(currentReceipts.value).then(() => {
       currentRow.value.status = '1'
-      ElMessage({
-        message: '已成功生成医保处方。',
-        type: 'success',
-        duration: 2500,
-        showClose: true,
-      })
+      xcMessage.success('已成功生成医保处方。');
     })
   }).catch(() => {
   })
@@ -476,12 +492,7 @@ const spcChrDiseAccts = ref([])
 const showSpcChrAccts = ref(false)
 const qrySpcChrDiseAcct = () => {
   if (!currentRow.value.times) {
-    ElMessage({
-      message: '请先选择历史处方。',
-      type: 'warning',
-      duration: 2000,
-      showClose: true,
-    })
+    xcMessage.warning('请先选择历史处方!')
     return
   }
   const param = {
@@ -542,12 +553,7 @@ const uploadFees = (row) => {
 const userStore = useUserStore()
 const mzPreSetl = () => {
   if (!currentRow.value.times) {
-    ElMessage({
-      message: '请先选择历史处方。',
-      type: 'warning',
-      duration: 2000,
-      showClose: true,
-    })
+    xcMessage.warning('请先选择历史处方!')
     return
   }
   const param = {
@@ -584,12 +590,7 @@ const mzPreSetl = () => {
 
 const revokeFees = () => {
   if (!currentRow.value.times) {
-    ElMessage({
-      message: '请先选择历史处方。',
-      type: 'warning',
-      duration: 2000,
-      showClose: true,
-    })
+    xcMessage.warning('请先选择历史处方!')
     return
   }
   const param = {
@@ -599,33 +600,18 @@ const revokeFees = () => {
   }
   if (injuryMode.value) {
     revokeInjuryOutpatientFee(param).then(res => {
-      ElMessage({
-        message: res,
-        type: 'success',
-        duration: 2000,
-        showClose: true,
-      })
+      xcMessage.success(res)
     })
   } else {
     revokeOutpatientFeeDetails(param).then((res) => {
-      ElMessage({
-        message: res,
-        type: 'success',
-        duration: 2000,
-        showClose: true,
-      })
+      xcMessage.success(res)
     });
   }
 }
 
 const deleteMtFees = () => {
   if (!currentRow.value.times) {
-    ElMessage({
-      message: '请先选择历史处方。',
-      type: 'warning',
-      duration: 2000,
-      showClose: true,
-    })
+    xcMessage.warning('请先选择历史处方!')
     return
   }
   const param = {
@@ -633,12 +619,7 @@ const deleteMtFees = () => {
     times: currentRow.value.times,
   }
   deleteAllMzReceipts(param).then((res) => {
-    ElMessage({
-      message: res,
-      type: 'success',
-      duration: 2000,
-      showClose: true,
-    })
+    xcMessage.success(res)
     currentReceipts.value = []
     fetchHistoryReceipts()
   })
@@ -648,12 +629,7 @@ const acctUsedFlag = ref('1')
 
 const mzSettle = () => {
   if (!currentRow.value.times) {
-    ElMessage({
-      message: '请先选择历史处方。',
-      type: 'warning',
-      duration: 2000,
-      showClose: true,
-    })
+    xcMessage.warning('请先选择历史处方!')
     return
   }
   const param = {
@@ -691,12 +667,7 @@ const mzSettle = () => {
 
 const revokeMzSettle = () => {
   if (!currentRow.value.times) {
-    ElMessage({
-      message: '请先选择历史处方。',
-      type: 'warning',
-      duration: 2000,
-      showClose: true,
-    })
+    xcMessage.warning('请先选择历史处方!')
     return
   }
   const param = {
@@ -743,12 +714,7 @@ const showMzBlRecord = ref(false)
 
 function seeMzBlRecord() {
   if (!currentRow.value.times) {
-    ElMessage({
-      message: '请先选择历史处方。',
-      type: 'warning',
-      duration: 2000,
-      showClose: true,
-    })
+    xcMessage.warning('请先选择历史处方!')
     return
   }
   showMzBlRecord.value = true

+ 159 - 0
src/views/medical-insurance/outpatient/component/EmergencyRescue.vue

@@ -0,0 +1,159 @@
+<template>
+  <div class="process-mask" v-if="showProcessMask">
+    <div>
+      <div class="title-box">
+        <div class="content">
+          急诊抢救医保进程
+        </div>
+        <el-button
+            :disabled="processing"
+            icon="Close"
+            circle
+            type="danger"
+            @click="showProcessMask = false"
+            title="关闭"
+        ></el-button>
+      </div>
+      <div class="progress">
+        <div v-for="item in processMsgs">
+          <div class="time">{{item.time}}</div>
+          <div class="msg">{{item.msg}}</div>
+        </div>
+      </div>
+      <div class="footer">
+        提示:急诊抢救患者的医保结算单为<span>住院</span>类型。
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import {reactive, ref} from "vue";
+import {executeEmergencyRescue,revokeBusiness} from "@/api/medical-insurance/emergency-rescue";
+import {getDatetime} from "@/utils/date";
+import {useZIndex} from "element-plus";
+import {setCallback} from "@/utils/websocket";
+
+defineExpose({
+  start,revoke
+})
+const props = defineProps({
+  param: {
+    type: Object,
+    required: true,
+  }
+})
+
+const showProcessMask = ref(false)
+
+const processMsgs = reactive([])
+const processing = ref(true)
+
+function start() {
+  showProcessMask.value = true
+  processing.value = true
+  processMsgs.splice(0, processMsgs.length)
+  executeEmergencyRescue(props.param).then(res => {
+    socketCallback(res)
+    processing.value = false
+  }).catch(e => {
+    socketCallback(e.toString())
+    processing.value = false
+  })
+}
+
+function revoke() {
+  showProcessMask.value = true
+  processing.value = true
+  processMsgs.splice(0, processMsgs.length)
+  revokeBusiness(props.param).then(res => {
+    socketCallback(res)
+    processing.value = false
+  }).catch(e => {
+    socketCallback(e.toString())
+    processing.value = false
+  })
+}
+
+function socketCallback(data) {
+  processMsgs.push({
+    time: getDatetime(new Date()),
+    msg: data
+  })
+}
+
+const zIndex = ref(0)
+onActivated(() => {
+  console.log('activated')
+  zIndex.value = useZIndex().nextZIndex()
+  setCallback('emergencyRescueProcess', socketCallback)
+})
+</script>
+
+<style lang="scss" scoped>
+.process-mask {
+  z-index: v-bind(zIndex);
+  width: 100vw;
+  height: 100vh;
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background-color: rgba(0,0,0,.5);
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  > div {
+    background-color: white;
+    width: 600px;
+    height: 400px;
+    border-radius: 8px;
+    box-shadow: dimgray 3px 2px 3px 8px;
+    .title-box {
+      height: 50px;
+      padding-left: 12px;
+      font-size: 16px;
+      color: darkred;
+      font-weight: bold;
+      border-bottom: 1px solid #e1e1e1;
+      display: flex;
+      align-items: center;
+      .content {
+        width: 94%;
+      }
+    }
+    .progress {
+      height: 320px;
+      padding: 12px 0 0 24px;
+      font-size: 14px;
+      overflow-y: auto;
+      > div {
+        padding-top: 12px;
+        display: flex;
+        .time {
+          color: GrayText;
+          font-size: 12px;
+          width: 130px;
+        }
+        .msg {
+          width: 400px;
+          color: #373737;
+          padding: 0 12px 0 4px;
+        }
+      }
+    }
+    .footer {
+      padding-left: 12px;
+      border-top: 1px solid #e1e1e1;
+      height: 30px;
+      display: flex;
+      align-items: center;
+      > span {
+        color: #0d84ff;
+        margin: 0 2px;
+      }
+    }
+  }
+}
+</style>