123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- <template>
- <div class="component-box-wrapper__fullscreen layout_container" :style="{zIndex}">
- <div style="display: flex; margin-bottom: 20px">
- <div style="font-size: 18px !important;">
- 医保费用明细
- </div>
- </div>
- <div style="position: fixed; top: 12px; right: 20px; width: 120px; text-align: right">
- <el-button circle icon="Download" title="导出Excel" type="primary" @click="exportExcel"></el-button>
- <el-button circle icon="Close" title="关闭" type="danger" @click="close"></el-button>
- </div>
- <div class="layout_main layout_container layout-horizontal">
- <aside style="width: 360px">
- <div style="display: flex; height: 36px; align-items: center; font-weight: 600; padding: 0 12px">
- <div style="width: 20%">费用类别</div>
- <div style="width: 20%">总金额</div>
- <div style="width: 20%">甲类</div>
- <div style="width: 20%">乙类</div>
- <div style="width: 20%">丙类</div>
- </div>
- <div v-for="(val, key) in analyse" :key="key" :style="currentStyle(key)" class="fee-type"
- @click="handleClickChrgtype(key)">
- <div>
- <div style="width: 20%">{{ val[0] }}</div>
- <div style="width: 20%" class="fee-by-lv" @click.stop="handleClickChrgLv(key, '00')">{{ val[1] }}</div>
- <div style="width: 20%" class="fee-by-lv" @click.stop="handleClickChrgLv(key, '01')">{{ val[2] }}</div>
- <div style="width: 20%" class="fee-by-lv" @click.stop="handleClickChrgLv(key, '02')">{{ val[3] }}</div>
- <div style="width: 20%" class="fee-by-lv" @click.stop="handleClickChrgLv(key, '03')">{{ val[4] }}</div>
- </div>
- </div>
- </aside>
- <div class="layout_main layout_el-table">
- <div>
- <el-descriptions :column="4" border>
- <el-descriptions-item>
- <template #label> 姓名</template>
- {{ psninfo.psnName }}
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label> 住院号</template>
- {{ psninfo.patNo }}
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label> 住院次数</template>
- {{ psninfo.times }}
- </el-descriptions-item>
- <el-descriptions-item>
- <template #label> 账页号</template>
- {{ psninfo.ledgerSn }}
- </el-descriptions-item>
- </el-descriptions>
- </div>
- <el-table
- :data="cptFeedtle.slice(pageSize * (currentPage - 1), pageSize * currentPage)"
- stripe
- >
- <el-table-column label="流水号" prop="feedetlSn" width="60"></el-table-column>
- <el-table-column label="费用发生时间" prop="feeOcurTime"></el-table-column>
- <el-table-column label="院内码" prop="medinsListCodg"></el-table-column>
- <el-table-column label="收费名称" prop="medinsListName"></el-table-column>
- <el-table-column label="国家编码" prop="medListCodg"></el-table-column>
- <el-table-column label="国家名称" prop="medListName"></el-table-column>
- <el-table-column label="数量" prop="cnt" width="80"></el-table-column>
- <el-table-column label="单价" prop="pric" width="80"></el-table-column>
- <el-table-column label="金额" prop="detItemFeeSumamt" width="80"></el-table-column>
- <el-table-column label="全自费金额" prop="fulamtOwnpayAmt" sortable width="80"></el-table-column>
- <el-table-column label="超限价金额" prop="overlmtAmt" sortable width="80"></el-table-column>
- <el-table-column label="先行自付金额" prop="preselfpayAmt" sortable width="80"></el-table-column>
- <el-table-column label="符合政策范围金额" prop="inscpScpAmt" sortable width="80"></el-table-column>
- <el-table-column label="收费项目等级" prop="chrgitmLvName" width="80"></el-table-column>
- <el-table-column label="科室" prop="bilgDeptName"></el-table-column>
- <el-table-column label="医生" prop="bilgDrName"></el-table-column>
- </el-table>
- <el-pagination
- :current-page="currentPage"
- :page-size="pageSize"
- :page-sizes="[10, 30, 50, 100]"
- :total="cptFeedtle.length"
- layout="total, sizes, prev, pager, next, jumper"
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- ></el-pagination>
- </div>
- </div>
- </div>
- </template>
- <script setup>
- import {queryFeeDetails} from '@/api/medical-insurance/si-query'
- import {computed, onMounted, ref} from 'vue'
- import {useZIndex} from "element-plus";
- import {Export} from "@/utils/ExportExcel";
- const props = defineProps({
- setlStatus: {
- type: String,
- default: 'settled',
- },
- mdtrtId: {
- type: String,
- required: true,
- },
- setlType: {
- type: String,
- default: '21',
- },
- })
- const emits = defineEmits(['close'])
- const psninfo = ref({})
- const feedtle = ref([])
- const analyse = ref({})
- const currentChargeType = ref('zhj')
- const currentChargeLv = ref('00')
- const pageSize = ref(30)
- const currentPage = ref(1)
- const handleSizeChange = (val) => {
- pageSize.value = val
- }
- const handleCurrentChange = (val) => {
- currentPage.value = val
- }
- const cptFeedtle = computed(() => {
- return feedtle.value.filter((itm) => {
- if (currentChargeType.value === 'zhj') {
- return currentChargeLv.value === '00' ? true : itm.chrgitmLv === currentChargeLv.value
- }
- return currentChargeLv.value === '00' ? itm.medChrgitmType === currentChargeType.value :
- (itm.medChrgitmType === currentChargeType.value && itm.chrgitmLv === currentChargeLv.value)
- })
- })
- const currentStyle = (chrgtype) => {
- return {
- background: currentChargeType.value === chrgtype ? '#409EFF' : '',
- color: currentChargeType.value === chrgtype ? 'white' : '',
- }
- }
- const handleClickChrgtype = (key) => {
- currentChargeType.value = key
- currentChargeLv.value = '00'
- currentPage.value = 1
- }
- const handleClickChrgLv = (key, level) => {
- currentChargeType.value = key
- currentChargeLv.value = level
- }
- const fetchFeedtle = () => {
- const param = {
- mdtrtId: props.mdtrtId,
- setlStatus: props.setlStatus,
- setlType: props.setlType,
- }
- queryFeeDetails(param).then((res) => {
- psninfo.value = res.psninfo
- feedtle.value = res.feedtle
- analyse.value = res.analyse
- })
- }
- function exportExcel() {
- const field = {
- feedetlSn: '流水号',
- feeOcurTime: '费用发生时间',
- medinsListCodg: '院内码',
- medinsListName: '收费名称',
- medListCodg: '国家编码',
- medListName: '国家名称',
- cnt: '数量',
- pric: '单价',
- detItemFeeSumamt: '金额',
- fulamtOwnpayAmt: '全自费金额',
- overlmtAmt: '超限价金额',
- preselfpayAmt: '先行自付金额',
- inscpScpAmt: '符合政策范围金额',
- chrgitmLvName: '收费项目等级',
- bilgDeptName: '科室',
- bilgDrName: '医生',
- }
- const fileName = `医保费用明细(${psninfo.value.psnName}-${psninfo.value.patNo}_${psninfo.value.times}_${psninfo.value.ledgerSn})`
- Export(feedtle.value, field, fileName)
- }
- const close = () => {
- emits('close')
- }
- const zIndex = ref(0)
- onMounted(() => {
- zIndex.value = useZIndex().nextZIndex()
- if (props.mdtrtId) {
- fetchFeedtle()
- }
- })
- defineExpose({fetchFeedtle})
- </script>
- <style scoped>
- * {
- font-size: 12px !important;
- }
- .fee-type {
- width: 360px;
- display: flex;
- height: 36px;
- align-items: center;
- border-bottom: 1px solid rgb(230, 222, 222);
- }
- .fee-type :hover {
- cursor: pointer;
- background: #409eff;
- color: white;
- }
- .fee-type > div {
- width: 100%;
- padding: 0 12px;
- display: flex;
- height: 36px;
- align-items: center;
- }
- .fee-by-lv:hover {
- text-decoration: underline;
- color: darkred;
- }
- </style>
|