|
@@ -1,44 +1,80 @@
|
|
|
<template>
|
|
|
<el-container>
|
|
|
<el-header style="height: 35px; margin-top: 10px">
|
|
|
- <el-input v-model="patNo" style="width: 200px; margin-left: 2px" clearable placeholder="请输入">
|
|
|
- <template #prepend>门诊id</template>
|
|
|
- </el-input>
|
|
|
+ <el-input v-model="patNo" style="width: 120px; margin-left: 2px" clearable placeholder="门诊id"> </el-input>
|
|
|
+ <el-select v-model="medType" style="width: 120px" placeholder="医疗类别">
|
|
|
+ <el-option v-for="item in medTypes" :key="item.code" :value="item.code" :label="item.name"></el-option>
|
|
|
+ </el-select>
|
|
|
+ <el-date-picker
|
|
|
+ v-model="dateRange"
|
|
|
+ type="daterange"
|
|
|
+ :shortcuts="shortcuts"
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ style="width: 240px"
|
|
|
+ ></el-date-picker>
|
|
|
+ <el-divider direction="vertical"></el-divider>
|
|
|
<el-button type="primary" @click="fetchHistoryReceipts">历史处方</el-button>
|
|
|
- <el-button type="primary" @click="registor(1)">登记</el-button>
|
|
|
- <el-button type="primary" @click="markMzFees">生成</el-button>
|
|
|
- <el-button type="primary" @click="qrySpcChrDiseAcct">上传</el-button>
|
|
|
- <el-button type="primary" @click="mzPreSetl">试算</el-button>
|
|
|
- <el-button type="primary" @click="mzSettle">结算</el-button>
|
|
|
- <el-button type="warning" @click="deleteMtFees">撤销处方</el-button>
|
|
|
- <el-button type="warning" @click="registor(2)">取消登记</el-button>
|
|
|
- <el-button type="warning" @click="revokeFees">取消上传</el-button>
|
|
|
- <el-button type="warning" @click="revokeMzSettle">取消结算</el-button>
|
|
|
+
|
|
|
+ <el-dropdown trigger="click" @command="registor" style="margin-left: 8px">
|
|
|
+ <el-button type="primary">登记<i class="el-icon-arrow-down el-icon--right"></i> </el-button>
|
|
|
+ <template #dropdown>
|
|
|
+ <el-dropdown-menu>
|
|
|
+ <el-dropdown-item icon="el-icon-bank-card" command="execute">医保登记</el-dropdown-item>
|
|
|
+ <el-dropdown-item icon="el-icon-refresh-left" command="revoke">取消登记</el-dropdown-item>
|
|
|
+ </el-dropdown-menu>
|
|
|
+ </template>
|
|
|
+ </el-dropdown>
|
|
|
+
|
|
|
+ <el-dropdown trigger="click" @command="receiptsOpts" style="margin-left: 8px">
|
|
|
+ <el-button type="primary">处方<i class="el-icon-arrow-down el-icon--right"></i> </el-button>
|
|
|
+ <template #dropdown>
|
|
|
+ <el-dropdown-menu>
|
|
|
+ <el-dropdown-item icon="el-icon-document" command="insert">生成医保处方</el-dropdown-item>
|
|
|
+ <el-dropdown-item icon="el-icon-delete" command="delete">删除已生成处方</el-dropdown-item>
|
|
|
+ <el-dropdown-item icon="el-icon-upload" command="upload">医保处方上传</el-dropdown-item>
|
|
|
+ <el-dropdown-item icon="el-icon-refresh-left" command="retract">撤销医保上传</el-dropdown-item>
|
|
|
+ </el-dropdown-menu>
|
|
|
+ </template>
|
|
|
+ </el-dropdown>
|
|
|
+
|
|
|
+ <el-dropdown trigger="click" @command="settlement" style="margin-left: 8px">
|
|
|
+ <el-button type="primary">结算<i class="el-icon-arrow-down el-icon--right"></i> </el-button>
|
|
|
+ <template #dropdown>
|
|
|
+ <el-dropdown-menu>
|
|
|
+ <el-dropdown-item icon="el-icon-document" command="pre">试算</el-dropdown-item>
|
|
|
+ <el-dropdown-item icon="el-icon-document" command="fin">结算</el-dropdown-item>
|
|
|
+ <el-dropdown-item icon="el-icon-refresh-left" command="revoke">取消结算</el-dropdown-item>
|
|
|
+ </el-dropdown-menu>
|
|
|
+ </template>
|
|
|
+ </el-dropdown>
|
|
|
+ <el-button type="danger" icon="el-icon-refresh" @click="clearinfo" style="margin-left: 8px"> 重置 </el-button>
|
|
|
</el-header>
|
|
|
<el-container>
|
|
|
- <el-aside width="400px">
|
|
|
+ <el-aside width="300px">
|
|
|
<el-tag>历史处方目录</el-tag>
|
|
|
<el-table :height="tableHeight" :data="historyReceipts" stripe highlight-current-row @row-click="fetchHistoryReceiptDetail">
|
|
|
- <el-table-column property="patNo" label="Id号" width="70"></el-table-column>
|
|
|
- <el-table-column property="times" label="就诊次数" width="60"></el-table-column>
|
|
|
- <el-table-column property="chargeFee" label="金额" width="60"></el-table-column>
|
|
|
- <el-table-column property="chargeDate" label="时间"></el-table-column>
|
|
|
- <el-table-column label="状态" width="60">
|
|
|
+ <el-table-column property="patNo" label="Id号" width="70">
|
|
|
<template #default="scope">
|
|
|
- <span v-html="colorStatus(scope.row.status)"></span>
|
|
|
+ <span v-html="colorStatus(scope.row)"></span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
+ <el-table-column property="times" label="次数" width="40"></el-table-column>
|
|
|
+ <el-table-column property="chargeFee" label="金额" width="60"></el-table-column>
|
|
|
+ <el-table-column property="chargeDate" label="时间"></el-table-column>
|
|
|
</el-table>
|
|
|
</el-aside>
|
|
|
<el-main>
|
|
|
<el-tag>历史处方明细</el-tag>
|
|
|
<div :style="receiptBoxStyle">
|
|
|
<div v-for="(item, index) in currentReceipts" :key="index">
|
|
|
- <div class="receipt-item">
|
|
|
- <div class="w75">{{ index + 1 }}){{ item.drugName }} </div>
|
|
|
- <div class="w25">× {{ item.quantity }}</div>
|
|
|
+ <div>
|
|
|
+ <el-checkbox v-model="item.checked"></el-checkbox>
|
|
|
+ <span style="color: rgb(94, 50, 50)"> {{ index + 1 }})【{{ item.chargeItemCode }}】{{ item.drugName }} × {{ item.quantity }} </span>
|
|
|
+ <span :style="{ color: item.nationalCode ? 'green' : 'red', fontWeight: 'bold' }"> 【医保码:{{ item.nationalCode || '未匹配' }} 】</span>
|
|
|
</div>
|
|
|
- <div class="receipt-tips"></div>
|
|
|
+ <div style="margin-bottom: 16px"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<el-dialog title="个人参保信息" v-model="showInsuinfo" width="65%">
|
|
@@ -55,7 +91,6 @@
|
|
|
<el-table-column property="empName" label="单位名称"></el-table-column>
|
|
|
</el-table>
|
|
|
</el-dialog>
|
|
|
-
|
|
|
<el-dialog title="请选择(慢特病备案信息)" v-model="showSpcChrAccts" width="40%">
|
|
|
<el-table :data="spcChrDiseAccts" @row-click="uploadFees">
|
|
|
<el-table-column property="opspDiseCode" label="病种编码"></el-table-column>
|
|
@@ -64,6 +99,14 @@
|
|
|
<el-table-column property="enddate" label="失效日期"></el-table-column>
|
|
|
</el-table>
|
|
|
</el-dialog>
|
|
|
+ <el-dialog title="请选择生育诊断" v-model="showMatnDises" width="60%">
|
|
|
+ <el-table :data="matnDises" @row-click="uploadFees" stripe height="360">
|
|
|
+ <el-table-column property="code" label="病种编码"></el-table-column>
|
|
|
+ <el-table-column property="name" label="病种名称"></el-table-column>
|
|
|
+ <el-table-column property="insutype" label="险种类型"></el-table-column>
|
|
|
+ <el-table-column property="limitAmt" label="疾病限额"></el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-dialog>
|
|
|
</el-main>
|
|
|
</el-container>
|
|
|
</el-container>
|
|
@@ -83,10 +126,13 @@ import {
|
|
|
outpatientSettlement,
|
|
|
revokeOutpatientSettlement,
|
|
|
} from '@/api/medical-insurance/si-outpatient'
|
|
|
-import { obtainBasicPersonInfo, querySpecialChronicDiseasesAccreditation } from '@/api/medical-insurance/si-query'
|
|
|
-import { ref } from 'vue-demi'
|
|
|
+import { obtainBasicPersonInfo, querySpecialChronicDiseasesAccreditation, queryMzMatnDises } from '@/api/medical-insurance/si-query'
|
|
|
+import { onMounted, ref } from 'vue-demi'
|
|
|
import store from '@/store'
|
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
+import { getMedTypesByFlag } from '@/api/medical-insurance/si-dict'
|
|
|
+import { shortcuts } from '@/data/shortcuts'
|
|
|
+import { getDateRangeFormatDate } from '@/utils/date'
|
|
|
export default {
|
|
|
setup() {
|
|
|
const windowSize = store.state.app.windowSize
|
|
@@ -97,16 +143,60 @@ export default {
|
|
|
overflowY: 'auto',
|
|
|
}
|
|
|
const patNo = ref('')
|
|
|
+ const medType = ref('')
|
|
|
+ const medTypes = ref([])
|
|
|
const historyReceipts = ref([])
|
|
|
const currentRow = ref({})
|
|
|
const currentReceipts = ref([])
|
|
|
- const colorStatus = (status) => {
|
|
|
- return status > 0 ? '<span style="color: green">已生成</span>' : '<span style="color: red">未生成</span>'
|
|
|
+ const dateRange = ref(shortcuts[2].value)
|
|
|
+ const colorStatus = (row) => {
|
|
|
+ return row.status > 0 ? `<span style="color: green">${row.patNo}</span>` : `<span style="color: red">${row.patNo}</span>`
|
|
|
+ }
|
|
|
+ const nullPatNo = () => {
|
|
|
+ if (patNo.value) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ ElMessage({
|
|
|
+ message: '请输入门诊ID!',
|
|
|
+ type: 'warning',
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
+ })
|
|
|
+ return true
|
|
|
}
|
|
|
+ const nullMedtype = () => {
|
|
|
+ if (medType.value) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ ElMessage({
|
|
|
+ message: '请选择医疗类别!',
|
|
|
+ type: 'warning',
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
+ })
|
|
|
+ return true
|
|
|
+ }
|
|
|
+
|
|
|
const fetchHistoryReceipts = () => {
|
|
|
+ if (nullPatNo()) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (nullMedtype()) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (!dateRange.value) {
|
|
|
+ ElMessage({
|
|
|
+ message: '请选择日期范围!',
|
|
|
+ type: 'warning',
|
|
|
+ duration: 2500,
|
|
|
+ showClose: true,
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
historyReceipts.value = []
|
|
|
currentRow.value = {}
|
|
|
- getHistoryMzReceipts(patNo.value).then((res) => {
|
|
|
+ const dates = getDateRangeFormatDate(dateRange.value)
|
|
|
+ getHistoryMzReceipts(patNo.value, dates.startTime, dates.endTime).then((res) => {
|
|
|
historyReceipts.value = res
|
|
|
})
|
|
|
}
|
|
@@ -119,7 +209,7 @@ export default {
|
|
|
|
|
|
const insuinfo = ref([])
|
|
|
const showInsuinfo = ref(false)
|
|
|
- const registor = (flag) => {
|
|
|
+ const registor = (command) => {
|
|
|
if (!currentRow.value.times) {
|
|
|
ElMessage({
|
|
|
message: '请先选择历史处方。',
|
|
@@ -131,11 +221,11 @@ export default {
|
|
|
}
|
|
|
const param = {
|
|
|
patNo: patNo.value,
|
|
|
- medType: '14',
|
|
|
+ medType: medType.value,
|
|
|
times: currentRow.value.times,
|
|
|
needSaving: 1,
|
|
|
}
|
|
|
- if (flag === 1) {
|
|
|
+ if (command === 'execute') {
|
|
|
obtainBasicPersonInfo(param).then((res) => {
|
|
|
insuinfo.value = res.insuinfo
|
|
|
showInsuinfo.value = true
|
|
@@ -172,6 +262,23 @@ export default {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+ const receiptsOpts = (command) => {
|
|
|
+ switch (command) {
|
|
|
+ case 'insert':
|
|
|
+ markMzFees()
|
|
|
+ break
|
|
|
+ case 'delete':
|
|
|
+ deleteMtFees()
|
|
|
+ break
|
|
|
+ case 'upload':
|
|
|
+ qrySpcChrDiseAcct()
|
|
|
+ break
|
|
|
+ case 'retract':
|
|
|
+ revokeFees()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
const markMzFees = () => {
|
|
|
if (currentReceipts.value.length === 0) {
|
|
|
ElMessage({
|
|
@@ -182,7 +289,7 @@ export default {
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
- ElMessageBox.confirm('是否将选中处方生成门特费用?', '提示', {
|
|
|
+ ElMessageBox.confirm('是否将选中处方生成医保处方?', '提示', {
|
|
|
type: 'warning',
|
|
|
confirmButtonText: '生成',
|
|
|
cancelButtonText: '取消',
|
|
@@ -191,7 +298,7 @@ export default {
|
|
|
insertSiMzFees(currentReceipts.value).then(() => {
|
|
|
currentRow.value.status = '1'
|
|
|
ElMessage({
|
|
|
- message: '已成功生成门特处方。',
|
|
|
+ message: '已成功生成医保处方。',
|
|
|
type: 'success',
|
|
|
duration: 2500,
|
|
|
showClose: true,
|
|
@@ -201,6 +308,8 @@ export default {
|
|
|
.catch(() => {})
|
|
|
}
|
|
|
|
|
|
+ const matnDises = ref([])
|
|
|
+ const showMatnDises = ref(false)
|
|
|
const spcChrDiseAccts = ref([])
|
|
|
const showSpcChrAccts = ref(false)
|
|
|
const qrySpcChrDiseAcct = () => {
|
|
@@ -217,14 +326,28 @@ export default {
|
|
|
patNo: patNo.value,
|
|
|
times: currentRow.value.times,
|
|
|
}
|
|
|
- querySpecialChronicDiseasesAccreditation(param).then((res) => {
|
|
|
- spcChrDiseAccts.value = res
|
|
|
- showSpcChrAccts.value = true
|
|
|
- })
|
|
|
+ if (medType.value === '51') {
|
|
|
+ queryMzMatnDises().then((res) => {
|
|
|
+ matnDises.value = res
|
|
|
+ showMatnDises.value = true
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ querySpecialChronicDiseasesAccreditation(param).then((res) => {
|
|
|
+ spcChrDiseAccts.value = res
|
|
|
+ showSpcChrAccts.value = true
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
const uploadFees = (row) => {
|
|
|
+ if (medType.value === '51') {
|
|
|
+ row.patNo = patNo.value
|
|
|
+ row.times = currentRow.value.times
|
|
|
+ row.opspDiseCode = row.code
|
|
|
+ row.opspDiseName = row.name
|
|
|
+ }
|
|
|
uploadOutpatientFeeDetails(row).then((res) => {
|
|
|
+ showMatnDises.value = false
|
|
|
showSpcChrAccts.value = false
|
|
|
mzPreSetl()
|
|
|
})
|
|
@@ -299,6 +422,7 @@ export default {
|
|
|
duration: 2000,
|
|
|
showClose: true,
|
|
|
})
|
|
|
+ currentReceipts.value = []
|
|
|
fetchHistoryReceipts()
|
|
|
})
|
|
|
}
|
|
@@ -348,43 +472,58 @@ export default {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+ const settlement = (command) => {
|
|
|
+ if (command === 'pre') {
|
|
|
+ mzPreSetl()
|
|
|
+ } else if (command == 'fin') {
|
|
|
+ mzSettle()
|
|
|
+ } else {
|
|
|
+ revokeMzSettle()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const clearinfo = () => {
|
|
|
+ patNo.value = ''
|
|
|
+ medType.value = ''
|
|
|
+ historyReceipts.value = []
|
|
|
+ currentRow.value = {}
|
|
|
+ currentReceipts.value = []
|
|
|
+ }
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ getMedTypesByFlag('clinic').then((res) => {
|
|
|
+ medTypes.value = res
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
return {
|
|
|
patNo,
|
|
|
+ medType,
|
|
|
+ medTypes,
|
|
|
tableHeight,
|
|
|
receiptBoxStyle,
|
|
|
historyReceipts,
|
|
|
currentRow,
|
|
|
currentReceipts,
|
|
|
+ matnDises,
|
|
|
+ showMatnDises,
|
|
|
+ insuinfo,
|
|
|
+ showInsuinfo,
|
|
|
+ spcChrDiseAccts,
|
|
|
+ showSpcChrAccts,
|
|
|
+ shortcuts,
|
|
|
+ dateRange,
|
|
|
colorStatus,
|
|
|
fetchHistoryReceipts,
|
|
|
fetchHistoryReceiptDetail,
|
|
|
- insuinfo,
|
|
|
- showInsuinfo,
|
|
|
registor,
|
|
|
handleClickInsuinfo,
|
|
|
- markMzFees,
|
|
|
- spcChrDiseAccts,
|
|
|
- showSpcChrAccts,
|
|
|
- qrySpcChrDiseAcct,
|
|
|
+ receiptsOpts,
|
|
|
uploadFees,
|
|
|
- mzPreSetl,
|
|
|
- revokeFees,
|
|
|
- deleteMtFees,
|
|
|
- mzSettle,
|
|
|
+ settlement,
|
|
|
revokeMzSettle,
|
|
|
+ clearinfo,
|
|
|
}
|
|
|
},
|
|
|
}
|
|
|
</script>
|
|
|
-
|
|
|
-<style scoped>
|
|
|
-.receipt-item {
|
|
|
- display: flex;
|
|
|
-}
|
|
|
-.receipt-tips {
|
|
|
- margin: 0 0 10px 100px;
|
|
|
-}
|
|
|
-.receipt-tips > span {
|
|
|
- margin-right: 15px;
|
|
|
-}
|
|
|
-</style>
|