<template> <div v-loading="loading" class="app-container"> <!-- 选择门诊和急诊的选项开始 --> <el-card style="margin-bottom:5px;text-align:center"> <el-radio-group v-model="schedulingType" @change="schedulingTypeChange"> <el-radio-button v-for="dict in schedulingTypeOptions" :key="dict.dictValue" :label="dict.dictValue" :value="dict.dictValue" > {{ dict.dictLabel }} </el-radio-button> </el-radio-group> </el-card> <!-- 选择门诊和急诊的选项结束 --> <!-- 下面的整体卡片开始 --> <el-row :gutter="5"> <el-col :span="7"> <!-- 左边的患者信息开始 --> <el-card> <el-form ref="form" :model="patientAllObj.patientObj" :inline="true" label-width="88px"> <el-form-item label="患者姓名" prop="name"> <el-input v-model="patientAllObj.patientObj.name" placeholder="请输入患者姓名" :disabled="true" style="100%" size="small" > <el-button slot="append" icon="el-icon-user-solid" @click="viewRegistration" /> </el-input> </el-form-item> <el-form-item label="身份证号" prop="idCard"> <el-input v-model="patientAllObj.patientObj.idCard" placeholder="请输入身份证号" :disabled="true" style="100%" size="small" /> </el-form-item> <el-form-item label="患者电话" prop="phone"> <el-input v-model="patientAllObj.patientObj.phone" placeholder="请输入患者电话" :disabled="true" style="100%" size="small" /> </el-form-item> <el-form-item label="性别" prop="sex"> <el-radio-group v-model="patientAllObj.patientObj.sex"> <el-radio v-for="d in sexOptions" :key="d.dictValue" :label="d.dictValue" :value="d.dictValue" >{{ d.dictLabel }}</el-radio> </el-radio-group> </el-form-item> <el-form-item label="出生日期" prop="phone"> <el-input v-model="patientAllObj.patientObj.birthday" placeholder="请选择出生日期" :disabled="true" style="100%" size="small" /> </el-form-item> <el-form-item label="患者年龄" prop="age"> <el-input v-model="patientAllObj.patientObj.age" placeholder="请输入患者年龄" :disabled="true" style="100%" size="small" /> </el-form-item> <el-form-item label="患者地址" prop="address"> <el-input v-model="patientAllObj.patientObj.address" placeholder="请输入患者地址" :disabled="true" style="100%" size="small" /> </el-form-item> <el-form-item label="过敏信息" prop="allergyInfo"> <el-input v-model="patientAllObj.patientObj.allergyInfo" placeholder="请输入过敏信息" type="textarea" :autosize="{minRows:2,maxRows:4}" :disabled="true" maxlength="100" show-word-limit style="100%" size="small" /> </el-form-item> </el-form> <el-tabs :stretch="true" type="card"> <el-tab-pane label="患者档案"> <div v-if="patientAllObj.patientObj.isFinal==='1'"> <div class="item"> 紧急联系人:<span v-text="patientAllObj.patientFileObj.emergencyContactName" /> </div> <div class="item"> 紧急联系人电话:<span v-text="patientAllObj.patientFileObj.emergencyContactPhone" /> </div> <div class="item"> 关系: <span v-text="patientAllObj.patientFileObj.emergencyContactRelation" /> </div> <div class="item"> 左耳听力:<span v-text="patientAllObj.patientFileObj.leftEarHearing" /> </div> <div class="item"> 右耳听力:<span v-text="patientAllObj.patientFileObj.rightEarHearing" /> </div> <div class="item"> 左眼视力:<span v-text="patientAllObj.patientFileObj.leftVision" /> </div> <div class="item"> 右眼视力:<span v-text="patientAllObj.patientFileObj.rightVision" /> </div> <div class="item"> 身高:<span v-text="patientAllObj.patientFileObj.height" /> </div> <div class="item"> 体重:<span v-text="patientAllObj.patientFileObj.weight" /> </div> <div class="item"> 血型:<span v-text="patientAllObj.patientFileObj.bloodType" /> </div> <div class="item"> 个人史:<span v-text="patientAllObj.patientFileObj.personalInfo" /> </div> <div class="item"> 家族史:<span v-text="patientAllObj.patientFileObj.familyInfo" /> </div> <div class="item"> 档案创建时间:<span v-text="patientAllObj.patientFileObj.createTime" /> </div> <div class="item"> 档案更新时间:<span v-text="patientAllObj.patientFileObj.updateTime" /> </div> </div> <div v-else style="text-align:center"> 暂无患者档案信息 </div> </el-tab-pane> <el-tab-pane label="历史病历"> <div v-if="patientAllObj.careHistoryObjList.length>0"> <el-collapse accordion> <el-collapse-item v-for="(item,index) in patientAllObj.careHistoryObjList" :key="index"> <template slot="title"> 就诊部门:【{{ item.deptName }}】 就诊时间:{{ item.careDate }} </template> <div class="item"> 主诉:{{ item.caseTitle }} </div> <div class="item"> 发病日期:{{ item.caseDate }} </div> <div class="item"> 诊断信息:{{ item.caseResult }} </div> <div class="item"> 医生建议:{{ item.doctorTips }} </div> <div class="item"> 备注:{{ item.remark }} </div> <div class="item"> 接诊类型:{{ item.receiveType==='0'?'初诊':'复诊' }} </div> <div class="item"> 是否传染:{{ item.isContagious==='0'?'否':'是' }} </div> </el-collapse-item> </el-collapse> </div> <div v-else style="text-align:center"> 暂无患者病历信息 </div> </el-tab-pane> </el-tabs> </el-card> <!-- 左边的患者信息结束 --> </el-col> <el-col :span="17"> <!-- 右边的病历,处方开始 --> <el-card> <el-row :gutter="5"> <el-col :span="12"> 挂号单号: <span v-if="careHistory.regId===undefined" style="color:red">选择患者后显示</span> <span v-else style="color:red">{{ careHistory.regId }}</span> <br> 病历编号: <span v-if="careHistory.chId===undefined" style="color:red">保存病例后显示</span> <span v-else style="color:blue">{{ careHistory.chId }}</span> </el-col> <el-col :span="12" style="text-align:right"> <el-button type="primary" :disabled="careHistory.regId===undefined" icon="el-icon-check" @click="handleSaveCareHistory">保存病历</el-button> <el-button type="danger" :disabled="careHistory.regId===undefined" icon="el-icon-finished" @click="handleVisitComplete">完成就诊</el-button> </el-col> </el-row> </el-card> <el-card style="margin-top:3px"> <el-tabs :v-model="careActiveName" type="card"> <el-tab-pane label="病历"> <!-- 病例表单开始 --> <el-card> <el-form ref="form" :model="careHistory" :inline="true" label-width="88px"> <el-form-item label="发病日期" prop="caseDateObj"> <el-date-picker v-model="caseDateObj" value-format="yyyy-MM-dd" size="small" /> </el-form-item> <el-form-item label="接诊类型" prop="receiveType"> <el-select v-model="careHistory.receiveType" placeholder="接诊类型" size="small" > <el-option v-for="dict in receiveTypeOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" /> </el-select> </el-form-item> <el-form-item label="是否传染" prop="isContagious"> <el-select v-model="careHistory.isContagious" placeholder="是否传染" size="small" > <el-option v-for="dict in isContagiousOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" /> </el-select> </el-form-item> </el-form> <el-form ref="form" :model="careHistory" label-width="88px"> <el-form-item label="主诉" :inline="false" prop="caseTitle"> <el-input v-model="careHistory.caseTitle" type="textarea" :autosize="{ minRows: 4, maxRows: 6}" placeholder="请输入主诉" style="100%" maxlength="200" show-word-limit size="small" /> </el-form-item> <el-form-item label="诊断信息" :inline="false" prop="caseResult"> <el-input v-model="careHistory.caseResult" type="textarea" :autosize="{ minRows: 4, maxRows: 6}" placeholder="请输入诊断信息" style="100%" maxlength="200" show-word-limit size="small" /> </el-form-item> <el-form-item label="医生建议" :inline="false" prop="doctorTips"> <el-input v-model="careHistory.doctorTips" type="textarea" :autosize="{ minRows: 4, maxRows: 6}" placeholder="请输入医生建议" style="100%" maxlength="200" show-word-limit size="small" /> </el-form-item> <el-form-item label="备注" :inline="false" prop="remark"> <el-input v-model="careHistory.remark" type="textarea" :autosize="{ minRows: 4, maxRows: 6}" placeholder="请输入备注" style="100%" maxlength="200" show-word-limit size="small" /> </el-form-item> </el-form> </el-card> <!-- 病例表单结束 --> </el-tab-pane> <el-tab-pane label="处方"> <!-- 处方详情开始 --> <el-collapse v-if="careOrders.length>0" accordion> <el-collapse-item v-for="(item,index) in careOrders" :key="index"> <template slot="title"> 【{{ item.careOrder.coType==='0'?'药用处方':'检查处方' }}】【{{ index+1 }}】【处方总额】:¥{{ item.careOrder.allAmount }} </template> <el-table v-loading="loading" border :data="item.careOrderItems" > <el-table-column label="序号" align="center" type="index" width="50" /> <el-table-column :label="item.careOrder.coType==='0'?'药品名称':'项目名称'" align="center" prop="itemName" /> <el-table-column label="数量" align="center" prop="num" /> <el-table-column label="单价(元)" align="center" prop="price" /> <el-table-column label="金额(元)" align="center" prop="amount" /> <el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="状态" align="center" prop="status" :formatter="orderDetailsStatusFormatter" /> <el-table-column label="操作" align="center"> <template slot-scope="scope"> <el-button v-show="scope.row.status==='0'" type="text" icon="el-icon-delete" size="mini" @click="handleCareOrderItemDeleteByItemId(scope.row)">删除</el-button> </template> </el-table-column> </el-table> </el-collapse-item> </el-collapse> <!-- 处方详情结束 --> <div style="margin:3px;text-align:left"> <el-button type="success" icon="el-icon-plus" :disabled="careHistory.chId===undefined" @click="handelAddMedicinesOrder">添加药用处方</el-button> <el-button type="success" icon="el-icon-plus" :disabled="careHistory.chId===undefined" @click="handelAddCheckItemOrder">添加检查处方</el-button> </div> </el-tab-pane> </el-tabs> </el-card> <!-- 右边的病历,处方结束 --> </el-col> </el-row> <!-- 下面的整体卡片结束 --> <!-- 弹出选择患者的层开始 --> <el-dialog title="请选择挂号患者" :visible.sync="openRegistration" width="1000px" center :close-on-click-modal="false" append-to-body > <el-tabs v-model="activeName" :stretch="true" type="card" @tab-click="handleRegistrationTabClick"> <el-tab-pane label="待就诊列表" name="t1"> <el-table v-loading="tableLoading" border :data="toBeSeenRegistration"> <el-table-column type="expand"> <template slot-scope="scope"> <el-form label-position="right" inline class="demo-table-expand"> <el-form-item label="挂号ID"> <span>{{ scope.row.regId }}</span> </el-form-item> <el-form-item label="患者ID"> <span>{{ scope.row.patientId }}</span> </el-form-item> <el-form-item label="挂号员"> <span>{{ scope.row.createBy }}</span> </el-form-item> <el-form-item label="挂号时间"> <span>{{ scope.row.createTime }}</span> </el-form-item> </el-form> </template> </el-table-column> <el-table-column label="患者姓名" align="center" prop="patientName" /> <el-table-column label="流水编号" align="center" prop="regNumber" /> <el-table-column label="挂号类型" align="center" prop="schedulingType" :formatter="schedulingTypeFormatter" /> <el-table-column label="操作" align="center"> <template slot-scope="scope"> <el-button type="success" icon="el-icon-check" size="mini" @click="handleVisit(scope.row)">接诊</el-button> </template> </el-table-column> </el-table> </el-tab-pane> <el-tab-pane label="就诊中列表" name="t2"> <el-table v-loading="tableLoading" border :data="visitingRegistration"> <el-table-column type="expand"> <template slot-scope="scope"> <el-form label-position="right" inline class="demo-table-expand"> <el-form-item label="挂号ID"> <span>{{ scope.row.regId }}</span> </el-form-item> <el-form-item label="患者ID"> <span>{{ scope.row.patientId }}</span> </el-form-item> <el-form-item label="挂号员"> <span>{{ scope.row.createBy }}</span> </el-form-item> <el-form-item label="挂号时间"> <span>{{ scope.row.createTime }}</span> </el-form-item> </el-form> </template> </el-table-column> <el-table-column label="患者姓名" align="center" prop="patientName" /> <el-table-column label="流水编号" align="center" prop="regNumber" /> <el-table-column label="挂号类型" align="center" prop="schedulingType" :formatter="schedulingTypeFormatter" /> <el-table-column label="操作" align="center"> <template slot-scope="scope"> <el-button type="success" icon="el-icon-check" size="mini" @click="handleLoading(scope.row)">载入</el-button> </template> </el-table-column> </el-table> </el-tab-pane> <el-tab-pane label="就诊完成列表" name="t3"> <el-table v-loading="tableLoading" border :data="visitCompletedRegistration"> <el-table-column type="expand"> <template slot-scope="scope"> <el-form label-position="right" inline class="demo-table-expand"> <el-form-item label="挂号ID"> <span>{{ scope.row.regId }}</span> </el-form-item> <el-form-item label="患者ID"> <span>{{ scope.row.patientId }}</span> </el-form-item> <el-form-item label="挂号员"> <span>{{ scope.row.createBy }}</span> </el-form-item> <el-form-item label="挂号时间"> <span>{{ scope.row.createTime }}</span> </el-form-item> </el-form> </template> </el-table-column> <el-table-column label="患者姓名" align="center" prop="patientName" /> <el-table-column label="流水编号" align="center" prop="regNumber" /> <el-table-column label="挂号类型" align="center" prop="schedulingType" :formatter="schedulingTypeFormatter" /> <el-table-column label="操作" align="center"> <template slot-scope="scope"> <el-button type="success" icon="el-icon-check" size="mini" @click="handleLoading(scope.row)">载入</el-button> </template> </el-table-column> </el-table> </el-tab-pane> </el-tabs> </el-dialog> <!-- 弹出选择患者的层结束 --> <!-- 添加药用处方和检查出方的弹出层开始 --> <el-dialog :title="title" :visible.sync="openAddOrderItem" width="1000px" center :close-on-click-modal="false" append-to-body > <div style="margin:3px;text-align:right"> 【{{ submitCareOrder.careOrder.coType==='0'?'药用':'检查' }}】处方总额:¥<span style="color:red">{{ submitCareOrder.careOrder.allAmount }}</span> <el-button style="margin-left:15px" type="success" icon="el-icon-plus" :disabled="submitCareOrder.careOrderItems.length===0" @click="handleSaveOrderItem">确定添加</el-button> </div> <el-table border :data="submitCareOrder.careOrderItems" :row-class-name="tableRowClassName" > <el-table-column label="序号" align="center" type="index" width="50" /> <el-table-column :label="submitCareOrder.careOrder.coType==='0'?'药品名称':'项目名称'" align="center" prop="itemName" /> <el-table-column label="数量" width="180px" align="center" prop="num"> <template slot-scope="scope"> <el-input-number v-model="scope.row.num" size="small" @change="handleCareOrderItemNumChange(scope.row)" /> </template> </el-table-column> <el-table-column label="单价(元)" align="center" prop="price" /> <el-table-column label="金额(元)" align="center" prop="amount" /> <el-table-column label="备注" align="center" prop="remark"> <template slot-scope="scope"> <el-input v-model="scope.row.remark" size="small" /> </template> </el-table-column> <el-table-column label="操作" align="center"> <template slot-scope="scope"> <el-button type="text" icon="el-icon-delete" size="mini" @click="handleCareOrderItemDelete(scope.row)">删除</el-button> </template> </el-table-column> </el-table> <el-button type="primary" size="mini" style="100%;margin-top:2px" @click="handleOpenAddOrderItemDrawer">添加【{{ submitCareOrder.careOrder.coType==='0'?'药品':'检查' }}】项 </el-button> </el-dialog> <!-- 添加药用处方和检查处方的弹出层结束 --> <!-- 药品列表的抽屉开始 --> <el-drawer :visible.sync="openDrawerMedicines" direction="rtl" append-to-body > <h2 align="center">药品列表</h2> <el-form ref="queryItemForm" :model="queryItemFormParams" label-width="68px"> <el-form-item label="关键字" prop="keywords"> <el-input v-model="queryItemFormParams.keywords" placeholder="请输入关键字" clearable size="small" style="180px" /> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleMedicinesFormQuery">查询</el-button> <el-button type="primary" icon="el-icon-refresh" size="mini" @click="resetItemFormQuery">重置</el-button> </el-form-item> <el-table v-loading="drawerLoading" height="600px" border :data="tableItemList" @selection-change="handleMedicinesSelectionChange" > <el-table-column type="selection" width="55" align="center" /> <el-table-column label="药品ID" align="center" prop="medicinesId" /> <el-table-column label="药品名称" align="center" prop="medicinesName" /> <el-table-column label="关键字" align="center" prop="keywords" /> <el-table-column label="库存量" align="center" prop="medicinesStockNum" /> <el-table-column label="单位" align="center"> <template slot-scope="scope"> {{ scope.row.conversion }}/ {{ scope.row.unit }} </template> </el-table-column> </el-table> <!-- 数据表格结束 --> <!-- 分页控件开始 --> <el-pagination v-show="total>0" :current-page="queryItemFormParams.pageNum" :page-sizes="[5, 10, 20, 30]" :page-size="queryItemFormParams.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleMedicinesSizeChange" @current-change="handleMedicinesCurrentChange" /> <el-form-item> <div style="text-align:center"> <el-button type="primary" icon="el-icon-check" size="mini" @click="hanldeAddCareItem">添加并关闭</el-button> </div> </el-form-item> </el-form> <!-- 分页控件结束 --> </el-drawer> <!-- 药品列表的抽屉结束 --> <!-- 检查项目的抽屉开始 --> <el-drawer :visible.sync="openDrawerCheckItem" direction="rtl" append-to-body > <h2 align="center">检查项目列表</h2> <el-form ref="queryItemForm" :model="queryItemFormParams" label-width="68px"> <el-form-item label="关键字" prop="keywords"> <el-input v-model="queryItemFormParams.keywords" placeholder="请输入关键字" clearable size="small" style="180px" /> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleCheckItemFormQuery">查询</el-button> <el-button type="primary" icon="el-icon-refresh" size="mini" @click="resetItemFormQuery">重置</el-button> </el-form-item> <el-table v-loading="drawerLoading" height="600px" border :data="tableItemList" @selection-change="handleCheckItemSelectionChange" > <el-table-column type="selection" width="55" align="center" /> <el-table-column label="项目ID" align="center" prop="checkItemId" /> <el-table-column label="项目名称" align="center" prop="checkItemName" /> <el-table-column label="关键字" align="center" prop="keywords" /> <el-table-column label="项目单价" align="center" prop="unitPrice" /> <el-table-column label="单位" align="center" prop="unit" /> </el-table> <!-- 数据表格结束 --> <!-- 分页控件开始 --> <el-pagination v-show="total>0" :current-page="queryItemFormParams.pageNum" :page-sizes="[5, 10, 20, 30]" :page-size="queryItemFormParams.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleCheckItemSizeChange" @current-change="handleCheckItemCurrentChange" /> <el-form-item> <div style="text-align:center"> <el-button type="primary" icon="el-icon-check" size="mini" @click="hanldeAddCareItem">添加并关闭</el-button> </div> </el-form-item> </el-form> </el-drawer> <!-- 检查项目的抽屉结束 --> </div> </template> <script> import { queryToBeSeenRegistration, queryVisitingRegistration, queryVisitCompletedRegistration, receivePatient, getPatientAllMessageByPatientId, saveCareHistory, getCareHistoryByRegId, queryCareOrdersByChId, saveCareOrderItem, deleteCareOrderItemById, visitComplete } from '@/api/docter/care' import { listCheckItemForPage } from '@/api/system/checkItem' import { listMedicinesForPage } from '@/api/erp/medicines' export default { data() { return { // 总的遮罩层 loading: false, // 表格的遮罩层 tableLoading: false, // 门诊急诊的默认值 schedulingType: '1', // 就诊类型的字典数据 schedulingTypeOptions: [], // 排班类型的字典数据 subsectionTypeOptions: [], // 性别数据字典 sexOptions: [], // 接诊类型字典 receiveTypeOptions: [], // 是否传染字典 isContagiousOptions: [], // 处方详情的状态字典数据 orderDetailsStatusOptions: [], // 是否打开选择挂号患者的弹层 openRegistration: false, // 当前选中的挂号选项卡的 activeName: 't1', // 右边的病例和处方的选项卡 careActiveName: 'c1', // 待就诊数据 toBeSeenRegistration: [], // 就诊中的数据 visitingRegistration: [], // 就诊完成的数据 visitCompletedRegistration: [], // 发病日期 caseDateObj: new Date(), // 左边患者数据 patientAllObj: { patientObj: {}, patientFileObj: {}, careHistoryObjList: [] }, // 提交到数据库的对象 careHistory: { // 当前就诊中的挂号单ID regId: undefined, chId: undefined, caseDate: undefined, receiveType: '0', isContagious: '0', caseTitle: undefined, caseResult: undefined, doctorTips: undefined, remark: undefined, patientId: undefined, patientName: undefined }, // 存放处方及详情数据 careOrders: [], // 最后要提交到的处方及详情 submitCareOrder: { careOrder: { allAmount: 0.00, patientId: undefined, patientName: undefined, coType: '0' // 默认为药用处方 }, careOrderItems: [] }, // 弹出层的标题 title: '', // 是否打开药品和检查项的添加的弹出层 openAddOrderItem: false, // 是否打开药品列表的抽屉 openDrawerMedicines: false, // 是否打开检查项目列表的抽屉 openDrawerCheckItem: false, // 药品和检查项目抽屉的查询条件 queryItemFormParams: { pageNum: 1, pageSize: 10, keywords: undefined }, // 药品或检查项目表格的数据 tableItemList: [], // 抽屉里面数据的总条数 total: 0, // 抽屉数据加载的遮罩 drawerLoading: false, // 抽屉里面选中的数据 selectItemList: [] } }, created() { // 加载排班类型 1 门诊 2急诊 this.getDataByType('his_scheduling_type').then(res => { this.schedulingTypeOptions = res.data }) // 排班时段 1 2 3 上午 下午 晚上 this.getDataByType('his_subsection_type').then(res => { this.subsectionTypeOptions = res.data }) // 加载性别 this.getDataByType('sys_user_sex').then(res => { this.sexOptions = res.data }) // 加载接诊类型字典 this.getDataByType('his_receive_type').then(res => { this.receiveTypeOptions = res.data }) // 加载是否传染字典 this.getDataByType('his_contagious_status').then(res => { this.isContagiousOptions = res.data }) // 加载处方详情的状态字典数据 this.getDataByType('his_order_details_status').then(res => { this.orderDetailsStatusOptions = res.data }) }, methods: { // 门诊急诊切换事件 schedulingTypeChange(value) { this.schedulingType = value }, // 打开选择挂号患者的弹出层 viewRegistration() { this.activeName = 't1' this.openRegistration = true this.queryToBeSeenRegistration() }, // 挂号患者弹出层的选项卡change事件 handleRegistrationTabClick(tab, event) { if (tab.name === 't1') { this.queryToBeSeenRegistration() } else if (tab.name === 't2') { this.queryVisitingRegistration() } else if (tab.name === 't3') { this.queryVisitCompletedRegistration() } }, // 查询待就诊的数据 queryToBeSeenRegistration() { this.tableLoading = true queryToBeSeenRegistration(this.schedulingType).then(res => { this.toBeSeenRegistration = res.data this.tableLoading = false }).catch(() => { this.msgError('查询失败') this.tableLoading = false }) }, // 查询就诊中的数据 queryVisitingRegistration() { this.tableLoading = true queryVisitingRegistration(this.schedulingType).then(res => { this.visitingRegistration = res.data this.tableLoading = false }).catch(() => { this.msgError('查询失败') this.tableLoading = false }) }, // 查询就诊完成的数据 queryVisitCompletedRegistration() { this.tableLoading = true queryVisitCompletedRegistration(this.schedulingType).then(res => { this.visitCompletedRegistration = res.data this.tableLoading = false }).catch(() => { this.msgError('查询失败') this.tableLoading = false }) }, // 翻译挂号类型 schedulingTypeFormatter(row) { return this.selectDictLabel(this.schedulingTypeOptions, row.schedulingType) }, // 翻译处方详情状态 orderDetailsStatusFormatter(row) { return this.selectDictLabel(this.orderDetailsStatusOptions, row.status) }, // 接诊 handleVisit(row) { this.careHistory.regId = row.regId const patientId = row.patientId // 接诊,更新挂号的状态为就诊中并写入接诊的医生信息 this.loading = true receivePatient(this.careHistory.regId).then(res => { this.loading = false this.msgSuccess('接诊成功') // 根据患者ID查询患者信息档案信息 病历信息 getPatientAllMessageByPatientId(patientId).then(res => { this.patientAllObj.patientObj = res.data.patient this.patientAllObj.patientObj.age = this.getAge(res.data.patient.birthday) this.patientAllObj.patientFileObj = res.data.patientFile this.patientAllObj.careHistoryObjList = res.data.careHistoryList this.openRegistration = false this.loading = false }).catch(() => { this.msgError('查询患者信息失败') this.loading = false }) }).catch(() => { this.msgError('接诊失败') this.loading = false }) }, // 载入 handleLoading(row) { this.careHistory.regId = row.regId const patientId = row.patientId // 根据患者ID查询患者信息档案信息 病历信息 getPatientAllMessageByPatientId(patientId).then(res => { this.patientAllObj.patientObj = res.data.patient this.patientAllObj.patientObj.age = this.getAge(res.data.patient.birthday) this.patientAllObj.patientFileObj = res.data.patientFile this.patientAllObj.careHistoryObjList = res.data.careHistoryList this.openRegistration = false this.loading = false // 查询当前挂号单之前对应的病例信息 }).catch(() => { this.msgError('载入失败') this.loading = false }) // 根据挂号单ID查询对应的病历信息 this.getCareHistoryByRegId(row.regId) }, // 根据挂号单ID查询对应的病历信息 getCareHistoryByRegId(regId) { this.loading = true getCareHistoryByRegId(regId).then(res => { if (res.data != null) { this.careHistory = res.data this.caseDateObj = res.data.careDate // 如果有数据根据病历ID查询处方信息 this.getCareOrdersByChId(res.data.chId) } else { this.resetCareHistoryAndCareOrders(regId) } this.loading = false }).catch(() => { this.msgError('查询病历失败') this.loading = false }) }, // 根据病历ID查询处方信息 getCareOrdersByChId(chId) { this.loading = true queryCareOrdersByChId(chId).then(res => { this.careOrders = res.data this.loading = false }).catch(() => { this.msgError('查询详情失败') this.loading = false }) }, // 重置右边的病历和处方详情数据 resetCareHistoryAndCareOrders(regId) { this.careHistory = { // 当前就诊中的挂号单ID regId: regId, chId: undefined, caseDate: undefined, caseDateObj: new Date(), receiveType: '0', isContagious: '0', caseTitle: undefined, caseResult: undefined, doctorTips: undefined, remark: undefined, patientId: undefined, patientName: undefined } this.careOrders = [] }, // 保存病历 handleSaveCareHistory() { if (!this.careHistory.regId) { this.msgError('请选择挂号患者') return } // 封装数据 this.careHistory.caseDate = this.moment(this.caseDateObj).format('YYYY-MM-DD') this.careHistory.patientId = this.patientAllObj.patientObj.patientId this.careHistory.patientName = this.patientAllObj.patientObj.name this.loading = true saveCareHistory(this.careHistory).then(res => { this.msgSuccess('保存病历成功') this.loading = false this.careHistory.chId = res.data.chId }).catch(() => { this.msgError('保存病历失败') this.loading = false }) }, // 打开添加药用处方的弹出层 handelAddMedicinesOrder() { if (!this.careHistory.regId) { this.msgError('请选择挂号患者') return } if (!this.careHistory.chId) { this.msgError('请先保存病历') return } this.submitCareOrder.careOrder.coType = '0' this.title = '添加【药用】处方' this.openAddOrderItem = true this.submitCareOrder.careOrderItems = [] }, // 打开添加检查处方的弹出层 handelAddCheckItemOrder() { if (!this.careHistory.regId) { this.msgError('请选择挂号患者') return } if (!this.careHistory.chId) { this.msgError('请先保存病历') return } this.submitCareOrder.careOrder.coType = '1' this.title = '添加【检查】处方' this.openAddOrderItem = true this.submitCareOrder.careOrderItems = [] }, // 打开药品或者检查项目的抽屉 handleOpenAddOrderItemDrawer() { if (this.submitCareOrder.careOrder.coType === '0') { // 打开药口列表抽屉 this.openDrawerMedicines = true this.resetItemFormQuery() this.getMedicinesList() } else { // 打开检查项目的抽屉 this.openDrawerCheckItem = true this.resetItemFormQuery() this.getCheckItemList() } }, // 加载药品数据 getMedicinesList() { this.tableItemList = [] this.drawerLoading = true listMedicinesForPage(this.queryItemFormParams).then(res => { this.tableItemList = res.data this.total = res.total this.drawerLoading = false }).catch(() => { this.drawerLoading = false this.msgError('查询药品失败') }) }, // 数据表格的多选择框选择时触发 handleMedicinesSelectionChange(selection) { this.selectItemList = selection }, // 分页pageSize变化时触发 handleMedicinesSizeChange(val) { this.queryItemFormParams.pageSize = val // 重新查询 this.getMedicinesList() }, // 点击上一页 下一页,跳转到哪一页面时触发 handleMedicinesCurrentChange(val) { this.queryItemFormParams.pageNum = val // 重新查询 this.getMedicinesList() }, // 搜索药品的方法 handleMedicinesFormQuery() { this.queryItemFormParams.pageNum = 1 this.getMedicinesList() }, // 加载药品数据 getCheckItemList() { this.tableItemList = [] this.drawerLoading = true listCheckItemForPage(this.queryItemFormParams).then(res => { this.tableItemList = res.data this.total = res.total this.drawerLoading = false }).catch(() => { this.drawerLoading = false this.msgError('查询检查项目失败') }) }, // 数据表格的多选择框选择时触发 handleCheckItemSelectionChange(selection) { this.selectItemList = selection }, // 分页pageSize变化时触发 handleCheckItemSizeChange(val) { this.queryItemFormParams.pageSize = val // 重新查询 this.getCheckItemList() }, // 点击上一页 下一页,跳转到哪一页面时触发 handleCheckItemCurrentChange(val) { this.queryItemFormParams.pageNum = val // 重新查询 this.getCheckItemList() }, // 搜索检查项目的方法 handleCheckItemFormQuery() { this.queryItemFormParams.pageNum = 1 this.getCheckItemList() }, // 重置抽屉的查询条件 resetItemFormQuery() { this.queryItemFormParams = { pageNum: 1, pageSize: 10, keywords: undefined } if (this.submitCareOrder.careOrder.coType === '0') { this.getMedicinesList() } else { this.getCheckItemList() } }, // 点击药品或检查项目抽屉页面的添加并关闭按钮 hanldeAddCareItem() { const coType = this.submitCareOrder.careOrder.coType if (this.selectItemList.length === 0) { this.msgError('请选择【' + (coType === '0' ? '药品' : '检查项目') + '】') return } if (coType === '0') { // 药品 this.selectItemList.filter(item => { const obj = { itemRefId: item.medicinesId, itemName: item.medicinesName, itemType: coType, num: 1, price: item.prescriptionPrice, amount: 1 * item.prescriptionPrice, remark: '请按说明服用' } let flag = false// 默认里面没有加 this.submitCareOrder.careOrderItems.filter(i => { if (i.itemRefId === obj.itemRefId) { i.num = i.num + 1 flag = true// 说明之前加过 } }) if (!flag) { this.submitCareOrder.careOrderItems.push(obj) } this.openDrawerMedicines = false }) } else { // 检查项目 this.selectItemList.filter(item => { const obj = { itemRefId: item.checkItemId, itemName: item.checkItemName, itemType: coType, num: 1, price: item.unitPrice, amount: 1 * item.unitPrice, remark: '按要求检查' } let flag = false// 默认里面没有加 this.submitCareOrder.careOrderItems.filter(i => { if (i.itemRefId === obj.itemRefId) { i.num = i.num + 1 flag = true// 说明之前加过 } }) if (!flag) { this.submitCareOrder.careOrderItems.push(obj) } this.openDrawerCheckItem = false }) } // 计算总价 this.computeOrderItemAllAmount() }, // 删除弹出层里面的详情 handleCareOrderItemDelete(row) { this.submitCareOrder.careOrderItems.splice(row.index, 1) this.computeOrderItemAllAmount() }, // 把弹出层的表格的数据加上index tableRowClassName({ row, rowIndex }) { row.index = rowIndex }, // 计算当前处方详情的总价 computeOrderItemAllAmount() { this.submitCareOrder.careOrder.allAmount = 0.00 this.submitCareOrder.careOrderItems.filter(item => { this.submitCareOrder.careOrder.allAmount += (item.num * item.price) }) }, // 监听药品或检查项目弹出层的数量的变化 handleCareOrderItemNumChange(row) { row.amount = row.num * row.price this.computeOrderItemAllAmount() }, // 保存处方单信息 handleSaveOrderItem() { if (this.submitCareOrder.careOrderItems.length === 0) { this.msgError('添加处方详情') return } this.submitCareOrder.careOrder.patientId = this.careHistory.patientId this.submitCareOrder.careOrder.patientName = this.careHistory.patientName this.submitCareOrder.careOrder.chId = this.careHistory.chId console.log(this.submitCareOrder) this.loading = true saveCareOrderItem(this.submitCareOrder).then(res => { this.loading = false this.msgSuccess('保存成功') // 刷新处方列表 this.getCareOrdersByChId(this.careHistory.chId) // 关闭当前弹出层 this.openAddOrderItem = false }).catch(() => { this.msgError('保存失败') this.loading = false }) }, // 根据详情ID删除数据库里面的详情【只能删除未支付的】 handleCareOrderItemDeleteByItemId(row) { const itemId = row.itemId const itemName = row.itemName const tx = this tx.$confirm('是否确定删除【' + itemName + '】这条详情, 是否继续?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { deleteCareOrderItemById(itemId).then(res => { this.msgSuccess('删除成功') // 刷新处方列表 this.getCareOrdersByChId(this.careHistory.chId) }).catch(() => { this.msgError('删除失败') }) }).catch(() => { tx.msgError('删除已取消') tx.loading = false }) }, // 完成就诊 handleVisitComplete() { const regId = this.careHistory.regId const patientName = this.careHistory.patientName const tx = this tx.$confirm('是否确定完成【' + patientName + '】的就诊, 是否继续?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { visitComplete(regId).then(res => { this.msgSuccess('操作成功') // 重置所有数据 this.resetAllData() }).catch(() => { this.msgError('操作失败') }) }).catch(() => { tx.msgError('操作已取消') tx.loading = false }) }, // 重置所有数据 resetAllData() { this.patientAllObj = { patientObj: {}, patientFileObj: {}, careHistoryObjList: [] } this.careHistory = { // 当前就诊中的挂号单ID regId: undefined, chId: undefined, caseDate: undefined, receiveType: '0', isContagious: '0', caseTitle: undefined, caseResult: undefined, doctorTips: undefined, remark: undefined, patientId: undefined, patientName: undefined } this.careOrders = [] this.submitCareOrder = { careOrder: { allAmount: 0.00, patientId: undefined, patientName: undefined, coType: '0' // 默认为药用处方 }, careOrderItems: [] } } } } </script> <style scoped> .demo-table-expand { font-size: 0; } .demo-table-expand label { width: 90px; color: #99a9bf; } .demo-table-expand .el-form-item { margin-right: 0; margin-bottom: 0; width: 50%; } .item{ font-size: 14px; margin-bottom: 8px; } </style>