123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573 |
- <template>
- <el-container>
- <el-header>
- <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
- style="width: 200px"
- v-model="dateRange"
- type="daterange"
- :shortcuts="shortcuts"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- ></el-date-picker>
- <el-divider direction="vertical"></el-divider>
- <el-button type="primary" @click="fetchHistoryReceipts">历史处方</el-button>
- <ReadCard :pat-no="patNo" @success="afterReadCard" />
- <el-dropdown trigger="click" @command="registor">
- <el-button type="primary">
- 登记 <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-menu>
- </template>
- </el-dropdown>
- <el-dropdown trigger="click" @command="receiptsOpts" style="margin-left: 8px">
- <el-button type="primary">
- 处方 <el-icon><ArrowDown /></el-icon>
- </el-button>
- <template #dropdown>
- <el-dropdown-menu>
- <el-dropdown-item icon="Document" command="insert">生成医保处方</el-dropdown-item>
- <el-dropdown-item icon="Delete" command="delete">删除已生成处方</el-dropdown-item>
- <el-dropdown-item icon="Upload" command="upload">医保处方上传</el-dropdown-item>
- <el-dropdown-item icon="RefreshLeft" 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">
- 结算 <el-icon><ArrowDown /></el-icon>
- </el-button>
- <template #dropdown>
- <el-dropdown-menu>
- <el-dropdown-item icon="SetUp" command="pre">试算</el-dropdown-item>
- <el-dropdown-item icon="Stamp" command="fin">结算</el-dropdown-item>
- <el-dropdown-item icon="RefreshLeft" command="revoke">取消结算</el-dropdown-item>
- </el-dropdown-menu>
- </template>
- </el-dropdown>
- <el-button type="danger" icon="Refresh" @click="clearinfo" style="margin-left: 8px"> 重置 </el-button>
- </el-header>
- <el-container>
- <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">
- <template #default="scope">
- <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>
- <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 style="margin-bottom: 16px"></div>
- </div>
- </div>
- <el-dialog title="个人参保信息" v-model="showInsuinfo" width="65%">
- <el-table :data="insuinfo" @row-click="handleClickInsuinfo">
- <el-table-column property="balc" label="余额"></el-table-column>
- <el-table-column label="险种类型" prop="insutypeName"></el-table-column>
- <el-table-column label="人员类别" prop="psnTypeName"></el-table-column>
- <el-table-column label="参保状态" prop="psnInsuStasName"></el-table-column>
- <el-table-column property="psnInsuDate" label="个人参保日期"></el-table-column>
- <el-table-column property="pausInsuDate" label="暂停参保日期"></el-table-column>
- <el-table-column property="cvlservFlagName" label="公务员标志"></el-table-column>
- <el-table-column property="insuplcAdmdvs" label="参保地医保区划"></el-table-column>
- <el-table-column property="insuplcAdmdvsName" label="参保地名称"></el-table-column>
- <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>
- <el-table-column property="opspDiseName" label="病种名称"></el-table-column>
- <el-table-column property="begndate" label="生效日期"></el-table-column>
- <el-table-column property="enddate" label="失效日期"></el-table-column>
- </el-table>
- </el-dialog>
- <el-dialog title="请选择生育诊断" v-model="showMatnDises" width="50%">
- <el-table :data="matnDises" @row-click="uploadFees" stripe height="360" highlight-current-row>
- <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>
- </template>
- <script>
- import {
- deleteAllMzReceipts,
- getHistoryMzReceipts,
- getHistoryReceiptDetail,
- insertSiMzFees,
- outpatientPreSettlement,
- outpatientRegistration,
- revokeOutpatientFeeDetails,
- revokeOutpatientRegistration,
- uploadOutpatientFeeDetails,
- outpatientSettlement,
- revokeOutpatientSettlement,
- } from '@/api/medical-insurance/si-outpatient'
- import { obtainBasicPersonInfo, querySpecialChronicDiseasesAccreditation, queryMzMatnDises } from '@/api/medical-insurance/si-query'
- import { onMounted, ref } from 'vue'
- 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'
- import ReadCard from '@/components/medical-insurance/readcard/Index.vue'
- export default {
- components: {
- ReadCard,
- },
- setup() {
- const windowSize = store.state.app.windowSize
- const tableHeight = windowSize.h - 70
- const receiptBoxStyle = {
- height: tableHeight - 8 + 'px',
- marginTop: '8px',
- overflowY: 'auto',
- }
- const patNo = ref('')
- const medType = ref('')
- const medTypes = ref([])
- const historyReceipts = ref([])
- const currentRow = ref({})
- const currentReceipts = ref([])
- 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
- }
- clearReadCardData()
- historyReceipts.value = []
- currentRow.value = {}
- const dates = getDateRangeFormatDate(dateRange.value)
- getHistoryMzReceipts(patNo.value, dates.startTime, dates.endTime).then((res) => {
- historyReceipts.value = res
- })
- }
- const fetchHistoryReceiptDetail = (row) => {
- currentRow.value = row
- getHistoryReceiptDetail(row).then((res) => {
- currentReceipts.value = res
- })
- }
- const insuinfo = ref([])
- const showInsuinfo = ref(false)
- const registor = (command) => {
- if (!currentRow.value.times) {
- ElMessage({
- message: '请先选择历史处方。',
- type: 'warning',
- duration: 2000,
- showClose: true,
- })
- return
- }
- const param = {
- patNo: patNo.value,
- medType: medType.value,
- times: currentRow.value.times,
- needSaving: 1,
- }
- if (command === 'execute') {
- obtainBasicPersonInfo(param).then((res) => {
- insuinfo.value = res.insuinfo
- showInsuinfo.value = true
- })
- } else {
- revokeOutpatientRegistration(param).then((res) => {
- ElMessage({
- message: res,
- type: 'success',
- duration: 2000,
- showClose: true,
- })
- })
- }
- }
- const readCardData = reactive({
- mdtrtCertType: null,
- readCardResult: null,
- readCardBizType: null,
- })
- const clearReadCardData = () => {
- readCardData.mdtrtCertType = null
- readCardData.readCardResult = null
- readCardData.readCardBizType = null
- }
- const afterReadCard = (result) => {
- readCardData.mdtrtCertType = result.mdtrtCertType
- readCardData.readCardResult = result.readCardResult
- readCardData.readCardBizType = result.readCardBizType
- }
- const handleClickInsuinfo = (row) => {
- const param = {
- patNo: patNo.value,
- times: currentRow.value.times,
- insutype: row.insutype,
- psnType: row.psnType,
- insuplcAdmdvs: row.insuplcAdmdvs,
- empName: row.empName,
- mdtrtCertType: readCardData.mdtrtCertType,
- readCardResult: readCardData.readCardResult,
- readCardBizType: readCardData.readCardBizType,
- }
- outpatientRegistration(param).then((res) => {
- clearReadCardData()
- showInsuinfo.value = false
- ElMessage({
- message: res,
- type: 'success',
- duration: 2000,
- showClose: true,
- })
- })
- }
- 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({
- message: '请先选择要保存的处方!',
- type: 'warning',
- duration: 2500,
- showClose: true,
- })
- return
- }
- ElMessageBox.confirm('是否将选中处方生成医保处方?', '提示', {
- type: 'warning',
- confirmButtonText: '生成',
- cancelButtonText: '取消',
- })
- .then(() => {
- insertSiMzFees(currentReceipts.value).then(() => {
- currentRow.value.status = '1'
- ElMessage({
- message: '已成功生成医保处方。',
- type: 'success',
- duration: 2500,
- showClose: true,
- })
- })
- })
- .catch(() => {})
- }
- const matnDises = ref([])
- const showMatnDises = ref(false)
- const spcChrDiseAccts = ref([])
- const showSpcChrAccts = ref(false)
- const qrySpcChrDiseAcct = () => {
- if (!currentRow.value.times) {
- ElMessage({
- message: '请先选择历史处方。',
- type: 'warning',
- duration: 2000,
- showClose: true,
- })
- return
- }
- const param = {
- patNo: patNo.value,
- times: currentRow.value.times,
- }
- 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()
- })
- }
- const mzPreSetl = () => {
- if (!currentRow.value.times) {
- ElMessage({
- message: '请先选择历史处方。',
- type: 'warning',
- duration: 2000,
- showClose: true,
- })
- return
- }
- const param = {
- staffId: store.state.user.info.code,
- patNo: patNo.value,
- times: currentRow.value.times,
- mdtrtCertType: readCardData.mdtrtCertType,
- readCardResult: readCardData.readCardResult,
- readCardBizType: readCardData.readCardBizType,
- }
- outpatientPreSettlement(param).then((res) => {
- const message = '医保处方总费用:' + res.totalCost + ',医保报销金额:' + res.fundPay + '。'
- ElMessageBox.alert(message, '试算成功', {
- type: 'success',
- showCancelButton: false,
- }).then(() => {})
- })
- }
- const revokeFees = () => {
- if (!currentRow.value.times) {
- ElMessage({
- message: '请先选择历史处方。',
- type: 'warning',
- duration: 2000,
- showClose: true,
- })
- return
- }
- const param = {
- patNo: patNo.value,
- times: currentRow.value.times,
- }
- revokeOutpatientFeeDetails(param).then((res) => {
- ElMessage({
- message: res,
- type: 'success',
- duration: 2000,
- showClose: true,
- })
- })
- }
- const deleteMtFees = () => {
- if (!currentRow.value.times) {
- ElMessage({
- message: '请先选择历史处方。',
- type: 'warning',
- duration: 2000,
- showClose: true,
- })
- return
- }
- const param = {
- patNo: patNo.value,
- times: currentRow.value.times,
- }
- deleteAllMzReceipts(param).then((res) => {
- ElMessage({
- message: res,
- type: 'success',
- duration: 2000,
- showClose: true,
- })
- currentReceipts.value = []
- fetchHistoryReceipts()
- })
- }
- const mzSettle = () => {
- if (!currentRow.value.times) {
- ElMessage({
- message: '请先选择历史处方。',
- type: 'warning',
- duration: 2000,
- showClose: true,
- })
- return
- }
- const param = {
- patNo: patNo.value,
- times: currentRow.value.times,
- saved: 1,
- mdtrtCertType: readCardData.mdtrtCertType,
- readCardResult: readCardData.readCardResult,
- readCardBizType: readCardData.readCardBizType,
- }
- outpatientSettlement(param).then((res) => {
- clearReadCardData()
- const message = '医保处方总费用:' + res.totalCost + ',医保报销金额:' + res.fundPay + '。'
- ElMessageBox.alert(message, '结算成功', {
- type: 'success',
- showCancelButton: false,
- }).then(() => {})
- })
- }
- const revokeMzSettle = () => {
- if (!currentRow.value.times) {
- ElMessage({
- message: '请先选择历史处方。',
- type: 'warning',
- duration: 2000,
- showClose: true,
- })
- return
- }
- const param = {
- patNo: patNo.value,
- times: currentRow.value.times,
- }
- revokeOutpatientSettlement(param).then((res) => {
- ElMessageBox.alert('撤销门诊结算成功', '提示', {
- type: 'success',
- showCancelButton: false,
- })
- })
- }
- 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,
- afterReadCard,
- colorStatus,
- fetchHistoryReceipts,
- fetchHistoryReceiptDetail,
- registor,
- handleClickInsuinfo,
- receiptsOpts,
- uploadFees,
- settlement,
- revokeMzSettle,
- clearinfo,
- }
- },
- }
- </script>
|