Index.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <template>
  2. <div class="component-box-wrapper__fullscreen layout_container" :style="{zIndex}">
  3. <div style="font-size: 18px !important; margin-bottom: 20px">医保费用明细</div>
  4. <div style="position: fixed; top: 12px; right: 20px; width: 100%; text-align: right">
  5. <el-button circle icon="Close" title="关闭" type="danger" @click="close"></el-button>
  6. </div>
  7. <div class="layout_main layout_container layout-horizontal">
  8. <aside style="width: 360px">
  9. <div style="display: flex; height: 36px; align-items: center; font-weight: 600; padding: 0 12px">
  10. <div style="width: 20%">费用类别</div>
  11. <div style="width: 20%">总金额</div>
  12. <div style="width: 20%">甲类</div>
  13. <div style="width: 20%">乙类</div>
  14. <div style="width: 20%">丙类</div>
  15. </div>
  16. <div v-for="(val, key) in analyse" :key="key" :style="currentStyle(key)" class="fee-type"
  17. @click="handleClickChrgtype(key)">
  18. <div>
  19. <div style="width: 20%">{{ val[0] }}</div>
  20. <div style="width: 20%" class="fee-by-lv" @click.stop="handleClickChrgLv(key, '00')">{{ val[1] }}</div>
  21. <div style="width: 20%" class="fee-by-lv" @click.stop="handleClickChrgLv(key, '01')">{{ val[2] }}</div>
  22. <div style="width: 20%" class="fee-by-lv" @click.stop="handleClickChrgLv(key, '02')">{{ val[3] }}</div>
  23. <div style="width: 20%" class="fee-by-lv" @click.stop="handleClickChrgLv(key, '03')">{{ val[4] }}</div>
  24. </div>
  25. </div>
  26. </aside>
  27. <div class="layout_main layout_el-table">
  28. <div>
  29. <el-descriptions :column="4" border>
  30. <el-descriptions-item>
  31. <template #label> 姓名</template>
  32. {{ psninfo.psnName }}
  33. </el-descriptions-item>
  34. <el-descriptions-item>
  35. <template #label> 住院号</template>
  36. {{ psninfo.patNo }}
  37. </el-descriptions-item>
  38. <el-descriptions-item>
  39. <template #label> 住院次数</template>
  40. {{ psninfo.times }}
  41. </el-descriptions-item>
  42. <el-descriptions-item>
  43. <template #label> 账页号</template>
  44. {{ psninfo.ledgerSn }}
  45. </el-descriptions-item>
  46. </el-descriptions>
  47. </div>
  48. <el-table
  49. :data="cptFeedtle.slice(pageSize * (currentPage - 1), pageSize * currentPage)"
  50. stripe
  51. >
  52. <el-table-column label="流水号" prop="feedetlSn" width="60"></el-table-column>
  53. <el-table-column label="费用发生时间" prop="feeOcurTime"></el-table-column>
  54. <el-table-column label="院内码" prop="medinsListCodg"></el-table-column>
  55. <el-table-column label="收费名称" prop="medinsListName"></el-table-column>
  56. <el-table-column label="国家编码" prop="medListCodg"></el-table-column>
  57. <el-table-column label="国家名称" prop="medListName"></el-table-column>
  58. <el-table-column label="数量" prop="cnt" width="80"></el-table-column>
  59. <el-table-column label="单价" prop="pric" width="80"></el-table-column>
  60. <el-table-column label="金额" prop="detItemFeeSumamt" width="80"></el-table-column>
  61. <el-table-column label="全自费金额" prop="fulamtOwnpayAmt" sortable width="80"></el-table-column>
  62. <el-table-column label="超限价金额" prop="overlmtAmt" sortable width="80"></el-table-column>
  63. <el-table-column label="先行自付金额" prop="preselfpayAmt" sortable width="80"></el-table-column>
  64. <el-table-column label="符合政策范围金额" prop="inscpScpAmt" sortable width="80"></el-table-column>
  65. <el-table-column label="收费项目等级" prop="chrgitmLvName" width="80"></el-table-column>
  66. <el-table-column label="科室" prop="bilgDeptName"></el-table-column>
  67. <el-table-column label="医生" prop="bilgDrName"></el-table-column>
  68. </el-table>
  69. <el-pagination
  70. :current-page="currentPage"
  71. :page-size="pageSize"
  72. :page-sizes="[10, 30, 50, 100]"
  73. :total="cptFeedtle.length"
  74. layout="total, sizes, prev, pager, next, jumper"
  75. @size-change="handleSizeChange"
  76. @current-change="handleCurrentChange"
  77. ></el-pagination>
  78. </div>
  79. </div>
  80. </div>
  81. </template>
  82. <script setup>
  83. import {queryFeeDetails} from '@/api/medical-insurance/si-query'
  84. import {computed, onMounted, ref} from 'vue'
  85. import {useZIndex} from "element-plus";
  86. const props = defineProps({
  87. type: {
  88. type: String,
  89. default: 'settled',
  90. },
  91. mdtrtId: {
  92. type: String,
  93. required: true,
  94. }
  95. })
  96. const emits = defineEmits(['close'])
  97. const psninfo = ref({})
  98. const feedtle = ref([])
  99. const analyse = ref({})
  100. const currentChargeType = ref('zhj')
  101. const currentChargeLv = ref('00')
  102. const pageSize = ref(30)
  103. const currentPage = ref(1)
  104. const handleSizeChange = (val) => {
  105. pageSize.value = val
  106. }
  107. const handleCurrentChange = (val) => {
  108. currentPage.value = val
  109. }
  110. const cptFeedtle = computed(() => {
  111. return feedtle.value.filter((itm) => {
  112. if (currentChargeType.value === 'zhj') {
  113. return currentChargeLv.value === '00' ? true : itm.chrgitmLv === currentChargeLv.value
  114. }
  115. return currentChargeLv.value === '00' ? itm.medChrgitmType === currentChargeType.value :
  116. (itm.medChrgitmType === currentChargeType.value && itm.chrgitmLv === currentChargeLv.value)
  117. })
  118. })
  119. const currentStyle = (chrgtype) => {
  120. return {
  121. background: currentChargeType.value === chrgtype ? '#409EFF' : '',
  122. color: currentChargeType.value === chrgtype ? 'white' : '',
  123. }
  124. }
  125. const handleClickChrgtype = (key) => {
  126. currentChargeType.value = key
  127. currentChargeLv.value = '00'
  128. currentPage.value = 1
  129. }
  130. const handleClickChrgLv = (key, level) => {
  131. currentChargeType.value = key
  132. currentChargeLv.value = level
  133. }
  134. const fetchFeedtle = () => {
  135. const param = {
  136. mdtrtId: props.mdtrtId,
  137. type: props.type,
  138. }
  139. queryFeeDetails(param).then((res) => {
  140. psninfo.value = res.psninfo
  141. feedtle.value = res.feedtle
  142. analyse.value = res.analyse
  143. })
  144. }
  145. const close = () => {
  146. emits('close')
  147. }
  148. const zIndex = ref(0)
  149. onMounted(() => {
  150. zIndex.value = useZIndex().nextZIndex()
  151. fetchFeedtle()
  152. })
  153. </script>
  154. <style scoped>
  155. * {
  156. font-size: 12px !important;
  157. }
  158. .fee-type {
  159. width: 360px;
  160. display: flex;
  161. height: 36px;
  162. align-items: center;
  163. border-bottom: 1px solid rgb(230, 222, 222);
  164. }
  165. .fee-type :hover {
  166. cursor: pointer;
  167. background: #409eff;
  168. color: white;
  169. }
  170. .fee-type > div {
  171. width: 100%;
  172. padding: 0 12px;
  173. display: flex;
  174. height: 36px;
  175. align-items: center;
  176. }
  177. .fee-by-lv:hover {
  178. text-decoration: underline;
  179. color: darkred;
  180. }
  181. </style>