12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349 |
- <template>
- <div class="layout_display_flex_y">
- <div>
- <el-button type="success" icon="RefreshRight" @click="rcvrcalcost">
- 费用接收重算
- </el-button>
- <el-button type="primary" icon="RefreshLeft" @click="showConventions">
- 撤销检验项目
- </el-button>
- <el-button type="success" icon="Money" @click="openCostList">
- 费用清单
- </el-button>
- <el-button type="success" icon="Timer" @click="beforeSettle(false)"
- >出院结算
- </el-button>
- <el-button type="info" icon="VideoPause" @click="beforeSettle(true)"
- >中间断账
- </el-button>
- <el-button
- type="warning"
- icon="Odometer"
- :disabled="!isAdmin"
- @click="cancelDismiss"
- >取消出院结算
- </el-button>
- <el-button
- v-if="isKqk"
- type="danger"
- icon="Tickets"
- @click="makeDismissOrder"
- >生成出院医嘱
- </el-button>
- <el-button type="danger" @click="rejectNotGeneratedMedicationListClick"
- >撤销未生成的药单
- </el-button>
- <el-button
- plain
- type="danger"
- title="医保出院结算时,若提示【服务提供者后端服务响应超时】,可使用此功能进行出院结算。"
- @click="executeTimeoutSettlement"
- >超时结算
- </el-button>
- </div>
- <el-divider content-position="left" class="el-divider_shorter">
- 患者基本信息
- </el-divider>
- <div>
- <el-descriptions :column="4" border>
- <el-descriptions-item>
- <template #label> 住院号</template>
- {{ patient.inpatientNo }}
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label> 姓名</template>
- {{ patient.name }}
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label>性别</template>
- {{ cptSex(patient.sex) }}
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label> 病房</template>
- {{ patient.admissWardName }}
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label> 床号</template>
- {{ patient.bedNo }}
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label> 总费用</template>
- <span v-show="patient.inpatientNo">{{ patient.totalCharge }}</span>
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label> 余额</template>
- <span v-html="getBalance(patient.balance)"></span>
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label> 入院日期</template>
- {{ patient.admissDate }}
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label> 手术</template>
- <span v-show="patient.inpatientNo">{{
- cptOperation(patient.operation)
- }}</span>
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label> 医疗类别</template>
- {{ patient.medTypeName }}
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label> 险种类型</template>
- {{ patient.insutypeName }}
- </el-descriptions-item>
- </el-descriptions>
- </div>
- <el-divider content-position="left" class="el-divider_shorter">
- 医保出院诊断
- </el-divider>
- <div class="layout_flex_1-y">
- <el-table :data="diags.yb" stripe height="100%">
- <el-table-column prop="disDiagNo" label="序号"></el-table-column>
- <el-table-column prop="disDiag" label="诊断编码"></el-table-column>
- <el-table-column
- prop="disDiagComment"
- label="诊断内容"
- ></el-table-column>
- <el-table-column
- prop="disDiagStatus"
- label="出院转归"
- ></el-table-column>
- <el-table-column prop="opName" label="录入人"></el-table-column>
- </el-table>
- </div>
- <el-divider content-position="left" class="el-divider_shorter">
- 病案首页诊断
- </el-divider>
- <div class="layout_flex_1-y">
- <el-table :data="diags.bl" stripe height="100%">
- <el-table-column prop="disDiagNo" label="序号"></el-table-column>
- <el-table-column prop="disDiag" label="诊断编码"></el-table-column>
- <el-table-column
- prop="disDiagComment"
- label="诊断内容"
- ></el-table-column>
- <el-table-column
- prop="disDiagStatusName"
- label="出院转归"
- ></el-table-column>
- <el-table-column prop="opName" label="录入人"></el-table-column>
- </el-table>
- </div>
- </div>
- <el-dialog
- title="请选择中间断账的日期和时间"
- v-model="showZjdzDate"
- width="500px"
- >
- <div style="height: 20px"></div>
- <el-date-picker
- v-model="patient.zjdzDatetime"
- type="datetime"
- placeholder="选择日期时间"
- ></el-date-picker>
- <div style="height: 30px"></div>
- <div style="width: 450px; text-align: right">
- <el-button type="info" icon="Close" @click="cancelSelectZjdzDate"
- >取消
- </el-button>
- <el-button type="success" icon="Check" @click="confirmSelectZjdzDate"
- >确定
- </el-button>
- </div>
- </el-dialog>
- <el-dialog
- :title="dismissBtnText + '申请'"
- v-model="showSettleApplyForm"
- width="600px"
- >
- <div v-if="settleApply.deathFlag" style="margin-bottom: 20px; color: red">
- 患者已停保。
- </div>
- <div style="margin-bottom: 20px">
- {{ dismissBtnText }}时间:
- <el-date-picker
- :disabled="!patient.midSetl"
- v-model="settleApply.settleDatetime"
- type="datetime"
- placeholder="请选择要断账的时间"
- ></el-date-picker>
- </div>
- <div style="margin-bottom: 20px">
- 使用个人账户:
- <el-radio size="large" v-model="settleApply.acctUsedFlag" label="0">
- 不使用个账
- </el-radio>
- <el-radio size="large" v-model="settleApply.acctUsedFlag" label="1">
- 使用本人个账
- </el-radio>
- <el-radio size="large" v-model="settleApply.acctUsedFlag" label="2">
- 使用共济人个账
- </el-radio>
- </div>
- <el-input
- type="textarea"
- v-model="settleApply.inputComment"
- placeholder="请输入申请理由"
- ></el-input>
- <div style="width: 450px; text-align: right; margin-top: 30px">
- <el-button type="info" icon="Close" @click="cancelSettleApply"
- >取消
- </el-button>
- <el-button type="success" icon="Check" @click="confirmSettleApply"
- >提交
- </el-button>
- </div>
- </el-dialog>
- <el-dialog
- :title="dismissBtnText"
- v-model="showActOrders"
- fullscreen
- @close="closeActOrder"
- class="el-dialog-fullscreen-fill"
- >
- <div class="layout_display_flex_y">
- <div class="layout_flex_1-y">
- <el-table :data="actOrders" @row-click="switchActOrder" height="100%">
- <el-table-column label="医嘱号" fixed>
- <template #default="scope">
- <span v-html="getOrderStatus(scope.row)"></span>
- </template>
- </el-table-column>
- <el-table-column
- property="list[0].orderName"
- label="医嘱名称"
- fixed
- ></el-table-column>
- <el-table-column
- property="list[0].frequCode"
- label="频率"
- ></el-table-column>
- <el-table-column property="cxFlag" label="撤销">
- <template #default="scope">
- <span v-html="getCxFlag(scope.row.cxFlag)"></span>
- </template>
- </el-table-column>
- <el-table-column
- property="list[0].drugSpecification"
- label="规格"
- ></el-table-column>
- <el-table-column
- property="list[0].startTime"
- label="开始时间"
- ></el-table-column>
- <el-table-column
- property="list[0].endTime"
- label="结束时间"
- ></el-table-column>
- <el-table-column
- property="list[0].chargeAmount"
- label="一次领量"
- ></el-table-column>
- <el-table-column
- property="list[0].supplyCode"
- label="给药方式"
- ></el-table-column>
- <el-table-column
- property="list[0].physician"
- label="医生"
- ></el-table-column>
- <el-table-column
- property="list[0].enterOper"
- label="录入人"
- ></el-table-column>
- <el-table-column
- property="list[0].orderCode"
- label="医嘱码"
- ></el-table-column>
- <el-table-column
- property="list[0].wardCode"
- label="病房"
- ></el-table-column>
- </el-table>
- </div>
- <div class="layout_flex_1-y">
- <el-table :data="actOrderDetail" height="100%">
- <el-table-column label="日期" fixed>
- <template #default="scope">
- <span v-html="getOrderDetailStatus(scope.row)"></span>
- </template>
- </el-table-column>
- <el-table-column
- property="chargeCode"
- label="收费码"
- ></el-table-column>
- <el-table-column
- property="chargeName"
- label="项目名称"
- ></el-table-column>
- <el-table-column
- property="drugSpecification"
- label="规格"
- ></el-table-column>
- <el-table-column property="chargeStatus" label="状态">
- <template #default="scope">
- {{ scope.row.chargeStatus }}
- </template>
- </el-table-column>
- <el-table-column
- property="chargeAmount"
- label="数量"
- ></el-table-column>
- <el-table-column property="chargeFee" label="金额"></el-table-column>
- <el-table-column property="pageNo" label="药品单号"></el-table-column>
- <el-table-column
- property="execUnit"
- label="执行科室"
- ></el-table-column>
- <el-table-column property="wardName" label="病区"></el-table-column>
- </el-table>
- </div>
- <div>
- <el-tag style="float: left; margin-top: 5px" v-cloak>
- <span style="background: orangered" class="color-span"></span
- > 医技未确认
- <span style="background: dodgerblue" class="color-span"></span
- > 未确认药
- <span style="background: orange" class="color-span"></span
- > 未接收
- </el-tag>
- <div style="float: right; margin-top: 5px" v-cloak>
- <el-checkbox v-model="patient.deathFlag">患者已停保 </el-checkbox
- >
- <ReadCard
- :pat-no="patient.inpatientNo"
- biztype="01301"
- @success="afterReadCard"
- />
- <el-button type="primary" icon="DataAnalysis" @click="doCalFee"
- >费用计算
- </el-button>
- <el-button type="success" icon="Timer" @click="excuteDismiss"
- >{{ dismissBtnText }}
- </el-button>
- <el-button type="warning" icon="Close" @click="closeActOrder"
- >关闭
- </el-button>
- </div>
- </div>
- </div>
- </el-dialog>
- <el-dialog
- title="此患者费用清单存在负数"
- v-model="showNegativeFee"
- width="800px"
- >
- <div style="display: inline-block">
- <el-table
- :data="negativeFees.slice(0, negativeFees.length / 2 + 1)"
- empty-text=" "
- height="300"
- >
- <el-table-column
- property="code"
- label="费用"
- width="80"
- ></el-table-column>
- <el-table-column
- property="chargeCode"
- label="编码"
- width="80"
- ></el-table-column>
- <el-table-column
- property="name"
- label="名称"
- width="180"
- ></el-table-column>
- </el-table>
- </div>
- <div style="display: inline-block; margin-left: 8px">
- <el-table
- :data="
- negativeFees.slice(negativeFees.length / 2 + 1, negativeFees.length)
- "
- empty-text=" "
- height="300"
- >
- <el-table-column
- property="code"
- label="费用"
- width="80"
- ></el-table-column>
- <el-table-column
- property="chargeCode"
- label="编码"
- width="80"
- ></el-table-column>
- <el-table-column
- property="name"
- label="名称"
- width="180"
- ></el-table-column>
- </el-table>
- </div>
- </el-dialog>
- <el-dialog
- title="此患者有未处理的药单"
- v-model="showUnhandledDrugOrder"
- width="400px"
- >
- <el-table :data="negativeFees" empty-text=" " height="300">
- <el-table-column
- property="groupName"
- label="药房"
- width="120"
- ></el-table-column>
- <el-table-column
- property="pageNo"
- label="药单号"
- width="120"
- ></el-table-column>
- <el-table-column
- property="pageNoTy"
- label="退药单号"
- width="120"
- ></el-table-column>
- </el-table>
- </el-dialog>
- <el-dialog
- title="此患者有未处理的护士退药单"
- v-model="showUnhandledRefundDrugOrder"
- width="400px"
- >
- <el-table :data="negativeFees" empty-text=" " height="300">
- <el-table-column
- property="pageNoTy"
- label="退药单号"
- width="120"
- ></el-table-column>
- <el-table-column
- property="remark"
- label="说明"
- width="180"
- ></el-table-column>
- </el-table>
- </el-dialog>
- <el-dialog
- title="撤销检验项目"
- v-model="conventionsVisible"
- fullscreen
- @close="closeThreeConventions"
- class="el-dialog-fullscreen-fill"
- >
- <div class="layout_display_flex_y">
- <div class="layout_flex_1-y">
- <el-table
- :data="roughConventions"
- @row-click="clickConvention"
- highlight-current-row
- height="100%"
- @selection-change="handleSelectConvention"
- >
- <el-table-column type="selection"></el-table-column>
- <el-table-column
- property="inpatientNo"
- label="住院号"
- ></el-table-column>
- <el-table-column property="name" label="姓名"></el-table-column>
- <el-table-column property="bedNo" label="床号"></el-table-column>
- <el-table-column
- property="actOrderNo"
- label="医嘱号"
- ></el-table-column>
- <el-table-column
- property="occTime"
- label="医嘱日期"
- ></el-table-column>
- <el-table-column property="doctorName" label="医生"></el-table-column>
- <el-table-column
- property="orderName"
- label="医嘱名称"
- ></el-table-column>
- </el-table>
- </div>
- <div class="layout_flex_1-y">
- <el-table :data="conventionDetails" height="100%">
- <el-table-column label="选择" width="70">
- <template #default="scope">
- <input type="checkbox" disabled :checked="scope.row.checked" />
- </template>
- </el-table-column>
- <el-table-column property="name" label="姓名"></el-table-column>
- <el-table-column
- property="actOrderNo"
- label="医嘱号"
- ></el-table-column>
- <el-table-column
- property="orderName"
- label="医嘱名称"
- ></el-table-column>
- <el-table-column property="doctorName" label="医生"></el-table-column>
- <el-table-column
- property="occTime"
- label="医嘱日期"
- ></el-table-column>
- <el-table-column property="xmName" label="项目名称"></el-table-column>
- <el-table-column property="price" label="单价"></el-table-column>
- <el-table-column property="amount" label="数量"></el-table-column>
- <el-table-column property="fee" label="金额"></el-table-column>
- </el-table>
- </div>
- <div style="text-align: right; padding-top: 12px">
- <el-button type="success" @click="confirmRetractConventions"
- >撤销检验项目
- </el-button>
- <el-button type="warning" @click="closeThreeConventions"
- >关闭
- </el-button>
- </div>
- </div>
- </el-dialog>
- <el-dialog
- title="请选择出院医嘱的日期和时间"
- v-model="showDismissOrderDate"
- width="500px"
- >
- <el-date-picker
- v-model="patient.dismissOrderDate"
- type="datetime"
- placeholder="选择日期时间"
- ></el-date-picker>
- <div style="height: 30px"></div>
- <div style="width: 450px; text-align: right">
- <el-button type="info" icon="Close" @click="cancelSelectDismissOrderDate"
- >取消
- </el-button>
- <el-button
- type="success"
- icon="Check"
- @click="confirmSelectDismissOrderDate"
- >确定
- </el-button>
- </div>
- </el-dialog>
- <el-dialog
- title="出院预审有可疑数据"
- v-model="showPreDischargeErrors"
- width="600px"
- >
- <el-table :data="preDischargeErrors" empty-text=" " max-height="300">
- <el-table-column
- property="dept_name"
- label="科室"
- width="120"
- ></el-table-column>
- <el-table-column
- property="doctor_name"
- label="医生"
- width="120"
- ></el-table-column>
- <el-table-column
- property="return_code_message"
- label="描述"
- ></el-table-column>
- </el-table>
- <div style="margin-top: 20px">
- 是否继续为患者办理出院?
- <el-button
- type="primary"
- @click="executeDismissCalculate(false, null, null)"
- >继续办理
- </el-button>
- <el-button @click="cancelDischarge">取消办理</el-button>
- </div>
- </el-dialog>
- </template>
- <script setup>
- import {
- computed,
- onActivated,
- onDeactivated,
- onMounted,
- reactive,
- ref,
- watchEffect,
- } from "vue";
- import { cptOperation, cptSex } from "@/utils/computed";
- import {
- genDismissActOrder,
- getDisDiag,
- receiveAndRecalculateCost,
- } from "@/api/inpatient/patient";
- import {
- powersiPreDischarge,
- dismissCalculate,
- getActOrders,
- selfPayDismiss,
- } from "@/api/inpatient/dismiss";
- import { formatDatetime, getDatetime } from "@/utils/date";
- import { nullPatient } from "@/utils/validate";
- import { ElMessage, ElMessageBox } from "element-plus";
- import {
- dischargeProcessing,
- revokeSettlement,
- timeoutSettlement,
- } from "@/api/medical-insurance/si-inpatient";
- import { getSiPatInfo } from "@/api/medical-insurance/si-query";
- import {
- getDetailConventions,
- getRoughConventions,
- retractConventions,
- } from "@/api/inpatient/conventions";
- import { getGreatestRole } from "@/utils/permission";
- import {
- inpatientDischargeProcess,
- revokeInpatientSettlement,
- } from "@/api/medical-insurance/si-injury";
- import {
- selectSettleApply,
- submitSettleApply,
- } from "@/api/medical-insurance/si-settle-apply";
- import { baseinfo, setBaseinfo } from "@/data/inpatient";
- import ReadCard from "@/components/medical-insurance/readcard/Index.vue";
- import ChargeList from "@/components/medical-insurance/charge-list/Index.vue";
- import { rejectNotGeneratedMedicationList } from "@/api/inpatient/xiang-mu-lu-ru";
- import { useMedinsStore } from "@/pinia/medins-store";
- import { useUserStore } from "@/pinia/user-store";
- import { useDialog } from "@/components/cy/CyDialog/index";
- const isAdmin = getGreatestRole() < 10;
- const patient = computed(() => {
- return baseinfo();
- });
- const medinsStore = useMedinsStore();
- const injuryMode = computed(() => {
- return medinsStore.isInjuryMode;
- });
- const diags = initDiags();
- const fecthDisDiags = () => {
- getDisDiag(patient.value.inpatientNo, patient.value.admissTimes).then(res => {
- diags.yb = res.yb;
- diags.bl = res.bl;
- });
- };
- const clearDiags = () => {
- diags.yb = [];
- diags.bl = [];
- };
- const actived = ref(false);
- watchEffect(() => {
- if (actived.value) {
- if (patient.value.inpatientNo) {
- fecthDisDiags();
- } else {
- clearDiags();
- }
- }
- });
- onActivated(() => {
- actived.value = true;
- });
- onDeactivated(() => {
- actived.value = false;
- });
- const showZjdzDate = ref(false);
- const cancelSelectZjdzDate = () => {
- patient.value.zjdzDatetime = null;
- showZjdzDate.value = false;
- };
- const confirmSelectZjdzDate = () => {
- patient.value.zjdzDatetime = formatDatetime(patient.value.zjdzDatetime);
- ElMessageBox.confirm(
- "您选择的中间断账时间为【" + patient.value.zjdzDatetime + "】",
- "提示",
- {
- type: "warning",
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- }
- ).then(() => {
- showZjdzDate.value = false;
- fetchActOrders();
- });
- };
- const cancelSettleApply = () => {
- patient.value.zjdzDatetime = null;
- settleApply.value = {};
- showSettleApplyForm.value = false;
- };
- const confirmSettleApply = () => {
- if (settleApply.value.type === 2 && !settleApply.value.settleDatetime) {
- ElMessage({
- message: "中间断账的时间不能为空!",
- type: "error",
- duration: 2500,
- showClose: true,
- });
- return;
- }
- if (!settleApply.value.inputComment) {
- ElMessage({
- message: "申请理由不能为空!",
- type: "error",
- duration: 2500,
- showClose: true,
- });
- return;
- }
- settleApply.value.settleDatetime = formatDatetime(
- settleApply.value.settleDatetime
- );
- let message = "是否确认提交" + dismissBtnText.value + "申请?";
- if (settleApply.value.type === 2) {
- message +=
- "您选择的中间断账时间为【" +
- settleApply.value.settleDatetime +
- "】,请仔细核对。";
- }
- ElMessageBox.confirm(message, "提示", {
- type: "warning",
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- })
- .then(() => {
- submitSettleApply(settleApply.value).then(res => {
- ElMessage({
- message: res,
- type: "success",
- duration: 2500,
- showClose: true,
- });
- showSettleApplyForm.value = false;
- });
- })
- .catch(() => {});
- };
- const dismissBtnText = computed(() => {
- return patient.value.midSetl ? "中间断账" : "出院结算";
- });
- const dismissCalMsg = ref("");
- const actOrders = ref([]);
- const actOrderDetail = ref([]);
- const showActOrders = ref(false);
- const showSettleApplyForm = ref(false);
- const settleApply = ref({});
- const closeActOrder = () => {
- actOrders.value = actOrderDetail.value = [];
- dismissCalMsg.value = "";
- showActOrders.value = false;
- };
- const tempSortNo = ref(0);
- const executeDismissCalculate = (midSetl, disdate, sortNo) => {
- showPreDischargeErrors.value = false;
- dismissCalculate(patient.value)
- .then(() => {
- settleApply.value.patNo = patient.value.inpatientNo;
- settleApply.value.times = patient.value.admissTimes;
- settleApply.value.ledgerSn = patient.value.ledgerSn;
- settleApply.value.type = midSetl ? 2 : 1;
- settleApply.value.settleDatetime = disdate || setlDatetime.value;
- settleApply.value.acctUsedFlag = "0";
- settleApply.value.deathFlag = patient.value.deathFlag;
- settleApply.value.inputComment = midSetl ? null : "医嘱离院。";
- settleApply.value.sortNo = null === sortNo ? tempSortNo.value : sortNo;
- showSettleApplyForm.value = true;
- })
- .catch(res2 => {
- if (res2.code && res2.code === 1004) {
- negativeFees.value = res2.data;
- dismissCalMsg.value = res2.message;
- showNegativeFee.value = true;
- } else if (res2.code && res2.code === 1104) {
- negativeFees.value = res2.data;
- dismissCalMsg.value = res2.message;
- showUnhandledDrugOrder.value = true;
- } else if (res2.code && res2.code === 1105) {
- negativeFees.value = res2.data;
- dismissCalMsg.value = res2.message;
- showUnhandledRefundDrugOrder.value = true;
- } else {
- dismissCalMsg.value = res2.toString();
- }
- });
- };
- const preDischargeErrors = ref([]);
- const showPreDischargeErrors = ref(false);
- const setlDatetime = ref("");
- const cancelDischarge = () => {
- showPreDischargeErrors.value = false;
- preDischargeErrors.value = [];
- setlDatetime.value = "";
- };
- const preDischarge = (midSetl, settleDatetime, sortNo) => {
- if (midSetl) {
- executeDismissCalculate(midSetl, settleDatetime, sortNo);
- } else {
- powersiPreDischarge(makeVisitId())
- .then(() => {
- executeDismissCalculate(midSetl, settleDatetime, sortNo);
- })
- .catch(e => {
- setlDatetime.value = settleDatetime;
- preDischargeErrors.value = e.data;
- showPreDischargeErrors.value = true;
- });
- }
- };
- const makeVisitId = () => {
- return (
- patient.value.inpatientNo +
- "_" +
- patient.value.admissTimes +
- "_" +
- patient.value.ledgerSn
- );
- };
- const userInfo = useUserStore().userInfo;
- const userSid = useUserStore().getSid;
- const beforeSettle = midSetl => {
- if (nullPatient()) {
- return;
- }
- patient.value.midSetl = midSetl;
- selectSettleApply(patient.value).then(res => {
- tempSortNo.value = res.sortNo;
- if (null === res.status) {
- patient.value.sid = userSid;
- patient.value.zjdzDatetime = getDatetime();
- ElMessageBox.confirm("请确认患者状态:", "提示", {
- type: "warning",
- confirmButtonText: "患者未停保",
- cancelButtonText: "患者已停保",
- distinguishCancelAndClose: true,
- closeOnClickModal: false,
- closeOnPressEscape: false,
- })
- .then(() => {
- patient.value.deathFlag = false;
- preDischarge(midSetl, res.settleDatetime, res.sortNo);
- })
- .catch(action => {
- if (action === "cancel") {
- patient.value.deathFlag = true;
- preDischarge(midSetl, res.settleDatetime, res.sortNo);
- }
- });
- } else {
- switch (res.status) {
- case 0:
- ElMessageBox.alert(
- "医保科尚未处理此患者的" +
- dismissBtnText.value +
- "申请,请耐心等候或者致电医保科(内线电话:2102)。",
- "提示",
- {
- type: "warning",
- }
- );
- break;
- case 1:
- patient.value.acctUsedFlag = res.acctUsedFlag;
- patient.value.deathFlag = res.deathFlag;
- if (res.settleDatetime) {
- patient.value.zjdzDatetime = res.settleDatetime;
- fetchActOrders();
- } else {
- if (midSetl) {
- patient.value.zjdzDatetime = getDatetime();
- showZjdzDate.value = true;
- } else {
- fetchActOrders();
- }
- }
- break;
- case 2:
- ElMessageBox.confirm(
- "医保科驳回了此患者的" +
- dismissBtnText.value +
- "申请,驳回意见为【" +
- res.handleComment +
- "】",
- "提示",
- {
- type: "error",
- distinguishCancelAndClose: true,
- confirmButtonText: "我知道了",
- cancelButtonText: "重新提交",
- showCancelButton: true,
- }
- ).catch(action => {
- if (action === "cancel") {
- patient.value.sid = userSid;
- patient.value.zjdzDatetime = res.settleDatetime;
- ElMessageBox.confirm("请确认患者状态:", "提示", {
- type: "warning",
- confirmButtonText: "患者未停保",
- cancelButtonText: "患者已停保",
- })
- .then(() => {
- patient.value.deathFlag = false;
- executeDismissCalculate(
- midSetl,
- res.settleDatetime,
- res.sortNo
- );
- })
- .catch(() => {
- patient.value.deathFlag = true;
- executeDismissCalculate(
- midSetl,
- res.settleDatetime,
- res.sortNo
- );
- });
- }
- });
- break;
- }
- }
- });
- };
- const fetchActOrders = () => {
- getActOrders(patient.value.inpatientNo, patient.value.admissTimes).then(
- res => {
- actOrders.value = res;
- if (res.length > 0) {
- actOrderDetail.value = res[0].list;
- }
- showActOrders.value = true;
- }
- );
- };
- const switchActOrder = row => {
- actOrderDetail.value = row.list;
- };
- const showNegativeFee = ref(false);
- const showUnhandledDrugOrder = ref(false);
- const showUnhandledRefundDrugOrder = ref(false);
- const negativeFees = ref([]);
- const doCalFee = () => {
- patient.value.sid = userSid;
- dismissCalculate(patient.value)
- .then(res => {
- dismissCalMsg.value = "done";
- ElMessageBox.alert("计算成功。", "提示", {
- type: "success",
- });
- })
- .catch(res => {
- if (res.code && res.code === 1004) {
- negativeFees.value = res.data;
- dismissCalMsg.value = res.message;
- showNegativeFee.value = true;
- } else if (res.code && res.code === 1104) {
- negativeFees.value = res.data;
- dismissCalMsg.value = res.message;
- showUnhandledDrugOrder.value = true;
- } else if (res.code && res.code === 1105) {
- negativeFees.value = res.data;
- dismissCalMsg.value = res.message;
- showUnhandledRefundDrugOrder.value = true;
- } else {
- dismissCalMsg.value = res.toString();
- }
- });
- };
- const excuteDismiss = () => {
- if (dismissCalMsg.value !== "done") {
- const message =
- dismissCalMsg.value === "" ? "请先进行费用计算!" : dismissCalMsg.value;
- ElMessage({
- message: message,
- type: "error",
- duration: 2500,
- showClose: true,
- });
- return;
- }
- const param = {
- patNo: patient.value.inpatientNo,
- times: patient.value.admissTimes,
- ledgerSn: patient.value.ledgerSn,
- };
- getSiPatInfo(param).then(res => {
- patient.value.medType = res.medType;
- if (!res.mdtrtId) {
- ziFeiDismiss();
- } else {
- injuryMode.value ? injuryDismiss() : yibaoDismiss();
- }
- });
- };
- const injuryDismiss = () => {
- inpatientDischargeProcess(patient.value)
- .then(res => {
- ElMessageBox.alert(dismissBtnText.value + "成功。", "提示", {
- type: "success",
- });
- })
- .then(() => {
- afterDismiss();
- });
- };
- const ziFeiDismiss = () => {
- const param = {
- inpatientNo: patient.value.inpatientNo,
- admissTimes: patient.value.admissTimes,
- bedNo: patient.value.bedNo,
- deptCode: patient.value.admissDept,
- wardCode: patient.value.admissWard,
- midSetl: patient.value.midSetl,
- zjdzDatetime: patient.value.zjdzDatetime,
- };
- selfPayDismiss(param).then(() => {
- ElMessageBox.alert(dismissBtnText.value + "成功。", "提示", {
- type: "success",
- }).then(() => {
- afterDismiss();
- });
- });
- };
- const yibaoDismiss = () => {
- if (!patient.value.acctUsedFlag) {
- patient.value.acctUsedFlag = "0";
- }
- dischargeProcessing(patient.value).then(() => {
- ElMessageBox.alert(dismissBtnText.value + "成功。", "提示", {
- type: "success",
- }).then(() => {
- afterDismiss();
- });
- });
- };
- const executeTimeoutSettlement = () => {
- timeoutSettlement(patient.value).then(() => {
- ElMessageBox.alert(dismissBtnText.value + "成功。", "提示", {
- type: "success",
- }).then(() => {
- afterDismiss();
- });
- });
- };
- const afterDismiss = () => {
- if (patient.value.midSetl) {
- patient.value.ledgerSn += 1;
- }
- showActOrders.value = false;
- };
- const conventionsVisible = ref(false);
- const roughConventions = ref([]);
- const conventionDetails = ref([]);
- const selectedConventions = ref([]);
- const showConventions = () => {
- if (nullPatient()) return;
- conventionDetails.value = [];
- getRoughConventions(
- patient.value.inpatientNo,
- patient.value.admissTimes
- ).then(res => {
- roughConventions.value = res;
- if (res.length > 0) {
- clickConvention(res[0]);
- }
- conventionsVisible.value = true;
- });
- };
- const clickConvention = row => {
- getDetailConventions(row.inpatientNo, row.actOrderNo).then(res => {
- conventionDetails.value = res;
- if (selectedConventions.value.indexOf(row) > -1) {
- conventionDetails.value.forEach(item => (item.checked = true));
- }
- });
- };
- const handleSelectConvention = val => {
- selectedConventions.value = val;
- };
- const confirmRetractConventions = () => {
- if (selectedConventions.value.length === 0) {
- ElMessage({
- message: "没有选中的条目。",
- type: "warning",
- duration: 2500,
- showClose: true,
- });
- } else {
- ElMessageBox.confirm("确定撤销选中的常规项目吗?", "提示", {
- type: "warning",
- confirmButtonText: "确定",
- cancelButtonText: "放弃",
- })
- .then(() => {
- let orders = [];
- selectedConventions.value.forEach(item => {
- orders.push(item.actOrderNo);
- });
- retractConventions(orders).then(() => {
- ElMessage({
- message: "撤销成功。",
- type: "success",
- duration: 2500,
- showClose: true,
- });
- showConventions();
- });
- })
- .catch(() => {});
- }
- };
- const closeThreeConventions = () => {
- roughConventions.value = conventionDetails.value = [];
- conventionsVisible.value = false;
- };
- const afterReadCard = result => {
- patient.value.mdtrtCertType = result.mdtrtCertType;
- patient.value.readCardResult = result.readCardResult;
- patient.value.readCardBizType = result.readCardBizType;
- };
- const cancelDismiss = () => {
- ElMessageBox.confirm("确定取消此患者的医保结算?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "放弃",
- type: "warning",
- }).then(() => {
- if (injuryMode.value) {
- revokeInpatientSettlement(patient.value).then(() => {
- ElMessage({
- message: "取消医保结算成功。",
- type: "success",
- duration: 2500,
- showClose: true,
- });
- });
- } else {
- revokeSettlement(patient.value).then(() => {
- ElMessage({
- message: "取消医保结算成功。",
- type: "success",
- duration: 2500,
- showClose: true,
- });
- });
- }
- }).catch(() => {});
- };
- const showDismissOrderDate = ref(false);
- const cancelSelectDismissOrderDate = () => {
- patient.value.dismissOrderDate = new Date();
- showDismissOrderDate.value = false;
- };
- const confirmSelectDismissOrderDate = () => {
- ElMessageBox.confirm(
- "您选择的出院医嘱时间为:" +
- formatDatetime(patient.value.dismissOrderDate) +
- ",是否确认?",
- "提示",
- {
- type: "warning",
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- }
- )
- .then(() => {
- patient.value.dismissOrderDate = formatDatetime(
- patient.value.dismissOrderDate
- );
- genDismissActOrder(patient.value)
- .then(res => {
- ElMessageBox.alert("生成出院医嘱成功!医嘱号为:" + res, "提示", {
- type: "success",
- confirmButtonText: "确定",
- });
- })
- .then(() => {
- showDismissOrderDate.value = false;
- fecthDisDiags();
- });
- })
- .catch(() => {});
- };
- const makeDismissOrder = () => {
- if (nullPatient()) return;
- patient.value.dismissOrderDate = new Date();
- showDismissOrderDate.value = true;
- };
- const isKqk = computed(() => {
- return userInfo.deptCode === "8000201" || userInfo.deptCode === "1090000";
- });
- const rcvrcalcost = () => {
- if (nullPatient()) return;
- receiveAndRecalculateCost(patient.value).then(res => {
- setBaseinfo(res);
- ElMessage({
- type: "success",
- message: "费用接收重算成功。",
- duration: 2000,
- showClose: true,
- });
- });
- };
- const rejectNotGeneratedMedicationListClick = () => {
- if (nullPatient()) return;
- ElMessageBox.confirm(
- "请问是否要撤销所有未提交的药单,此操作不可逆。",
- "提示",
- {
- type: "warning",
- }
- )
- .then(() => {
- rejectNotGeneratedMedicationList(
- patient.value.inpatientNo,
- patient.value.admissTimes
- );
- })
- .catch(() => {});
- };
- function openCostList() {
- useDialog(ChargeList, {
- params: {
- patNo: patient.value.inpatientNo,
- times: patient.value.admissTimes,
- },
- confirmText: "打印",
- cancelText: "关闭",
- dialogProps: {
- title: "费用清单",
- fullscreen: true,
- },
- });
- }
- onMounted(() => {
- if (patient.value.inpatientNo) {
- fecthDisDiags();
- }
- });
- function getBalance(val) {
- if (!val) {
- return "";
- }
- return val > 0
- ? '<span style="color: green">' + val + "</span>"
- : '<span style="color: red">' + val + "</span>";
- }
- function initDiags() {
- return reactive({
- yb: [],
- bl: [],
- });
- }
- function getOrderStatus(val) {
- switch (val.chargeStatus) {
- case 5: // 未确认药
- return (
- '<p style="background: dodgerblue; color: white;">' +
- val.actOrderNo +
- "</p>"
- );
- case 6: // 未接收
- return (
- '<p style="background: orange; color: white;">' +
- val.actOrderNo +
- "</p>"
- );
- case 8: // 医技未确认
- return (
- '<p style="background: orangered; color: white;">' +
- val.actOrderNo +
- "</p>"
- );
- default:
- return "<p>" + val.actOrderNo + "</p>";
- }
- }
- function getOrderDetailStatus(val) {
- switch (val.chargeStatus) {
- case 5: // 未确认药
- return (
- '<p style="background: dodgerblue; color: white;">' +
- val.chargeDate +
- "</p>"
- );
- case 6: // 未接收
- return (
- '<p style="background: orange; color: white;">' +
- val.chargeDate +
- "</p>"
- );
- case 8: // 医技未确认
- return (
- '<p style="background: orangered; color: white;">' +
- val.chargeDate +
- "</p>"
- );
- default:
- return "<p>" + val.chargeDate + "</p>";
- }
- }
- function getCxFlag(val) {
- return val === "1"
- ? '<p style="color: orangered;">是</p>'
- : '<p style="color:green">否</p>';
- }
- </script>
- <style scoped>
- .m-divider {
- height: 1px;
- background-color: white;
- width: 100%;
- margin: 5px 0;
- }
- .color-span {
- display: inline-block;
- width: 30px;
- height: 10px;
- margin-left: 15px;
- }
- </style>
|