YiJiFeiYongLuRu.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <template>
  2. <el-container>
  3. <el-header style="margin-top: 8px">
  4. <el-tag effect="dark" size="medium">住院号: {{ patient.inpatientNo }}</el-tag>
  5. <el-tag effect="dark" size="medium" type="warning">患者姓名: {{ patient.name }}</el-tag>
  6. <el-tag effect="dark" size="medium"> 床号: {{ patient.bedNo }}</el-tag>
  7. <el-tag effect="dark" size="medium" type="warning">住院次数: {{ patient.admissTimes }}</el-tag>
  8. <el-tag effect="dark" size="medium">性别: {{ cptSex(patient.sex) }}</el-tag>
  9. <el-tag effect="dark" size="medium" type="warning">病房: {{ patient.wardName }}</el-tag>
  10. <el-tag effect="dark" size="medium">入院日期: {{ patient.admissDate }}</el-tag>
  11. <el-tag effect="dark" size="medium" type="warning">医保身份: {{ patient.responceTypeName }}</el-tag>
  12. <el-tag effect="dark" size="medium">总费用: {{ patient.totalCharge }}
  13. </el-tag
  14. >
  15. <br/>
  16. 住院号:
  17. <el-input style="width: 80px" v-model="queryTerm.inpatientNo" @keyup.enter="getHuanZheXinXiClick"></el-input>
  18. <span v-show="queryTerm.zaiHuanChuYuan === 1">
  19. 住院次数:<el-input-number :min="0" :precision="0" style="width: 60px" v-model="queryTerm.admissTimes"
  20. :controls="false"></el-input-number>
  21. </span>
  22. <el-divider direction="vertical"></el-divider>
  23. <el-switch active-color="#ff4949" inactive-color="#13ce66" active-text="出院" inactive-text="在院" :active-value="1"
  24. :inactive-value="0" v-model="queryTerm.zaiHuanChuYuan">
  25. </el-switch>
  26. <el-divider direction="vertical"></el-divider>
  27. 项目名称:
  28. <el-select v-model="queryTerm.chargeCode" remote filterable clearable :remote-method="remoteMethodChargeCode">
  29. <el-option v-for="item in chargeCodeNameData" :key="item.code" :label="item.name" :value="item.code">
  30. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  31. <el-divider direction="vertical"></el-divider>
  32. <span>{{ item.name }}</span>
  33. </el-option>
  34. </el-select>
  35. 录入日期:
  36. <el-date-picker
  37. type="daterange"
  38. v-model="queryTerm.dateRange"
  39. placeholder="选择日期"
  40. style="width: 200px"
  41. range-separator="至"
  42. start-placeholder="开始日期"
  43. end-placeholder="结束日期"
  44. :shortcuts="shortcuts"
  45. ></el-date-picker>
  46. <el-button
  47. @click="queryTerm.riQiPaiXu === 'DESC' ? (queryTerm.riQiPaiXu = 'ASC') : (queryTerm.riQiPaiXu = 'DESC')"
  48. type="success"
  49. :icon="queryTerm.riQiPaiXu === 'DESC' ? 'el-icon-caret-bottom' : 'el-icon-caret-top'"
  50. >{{ queryTerm.riQiPaiXu === 'DESC' ? '降序' : '升序' }}
  51. </el-button
  52. >
  53. <el-select style="width: 70px" v-model="queryTerm.feiYongLeiXingCode">
  54. <el-option v-for="item in feiYongLeiXing" :key="item.code" :label="item.name" :value="item.code">
  55. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  56. <el-divider direction="vertical"></el-divider>
  57. <span>{{ item.name }}</span>
  58. </el-option>
  59. </el-select>
  60. <el-select v-model="queryTerm.orderNo" style="width: 70px" @change="queryHuanZheFeiYong">
  61. <el-option v-for="item in yiZhuTuiFeiLeiXing" :key="item.code" :label="item.name" :value="item.code">
  62. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  63. <el-divider direction="vertical"></el-divider>
  64. <span>{{ item.name }}</span>
  65. </el-option>
  66. </el-select>
  67. <el-select v-model="queryTerm.tuiFeiFlag" style="width: 70px" @change="queryHuanZheFeiYong">
  68. <el-option v-for="item in tuiFeiLeiXin" :key="item.code" :label="item.name" :value="item.code">
  69. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  70. <el-divider direction="vertical"></el-divider>
  71. <span>{{ item.name }}</span>
  72. </el-option>
  73. </el-select>
  74. <el-button type="primary" @click="getHuanZheXinXiClick">查询</el-button>
  75. </el-header>
  76. <el-container>
  77. <el-main style="margin-top: 10px">
  78. <el-tabs v-model="elTabPane">
  79. <el-tab-pane label="已录入费用" name="ylrfy">
  80. <huan-zhe-fei-yong
  81. :init="tableDataHuanZheFeiYong"
  82. :patient="patient"
  83. @queryFeiYong="getHuanZheXinXiClick"
  84. @size="handleSizeChange"
  85. @current="handleCurrentChange"
  86. ></huan-zhe-fei-yong>
  87. </el-tab-pane>
  88. <el-tab-pane label="费用录入" name="fylr">
  89. <xiang-mu-lu-ru :patient="patient"></xiang-mu-lu-ru>
  90. </el-tab-pane>
  91. </el-tabs>
  92. </el-main>
  93. </el-container>
  94. </el-container>
  95. </template>
  96. <script>
  97. import {ref} from 'vue'
  98. import store from '@/store'
  99. import {getHuanZheXinXi} from '@/api/zhu-yuan-yi-ji/yi-ji-fei-yong-lu-ru'
  100. import {cptSex} from '@/utils/computed'
  101. import {getChargeCode} from '@/api/yibao/xiang-mu-lu-ru'
  102. import {getHuanZheFeiYong} from '@/api/yibao/xiang-mu-lu-ru'
  103. import HuanZheFeiYong from '@/components/med-tec-mod/HuanZheFeiYong.vue'
  104. import XiangMuLuRu from '@/components/med-tec-mod/YiJiXiangMuLuRu.vue'
  105. import {yiZhuTuiFeiLeiXing, feiYongLeiXing, tuiFeiLeiXin} from '@/data/index'
  106. import {shortcuts} from '@/data/shortcuts'
  107. import {getDateRangeFormatDate} from '@/utils/date'
  108. export default {
  109. components: {HuanZheFeiYong, XiangMuLuRu},
  110. name: 'yiJiFeiYongLuRu',
  111. setup() {
  112. const windowSize = store.state.app.windowSize
  113. const windowHeigth = windowSize.h
  114. const dangQianShiJian = new Date()
  115. const queryTerm = ref({
  116. inpatientNo: '',
  117. admissTimes: 0,
  118. zaiHuanChuYuan: '',
  119. dateRange: [dangQianShiJian, dangQianShiJian],
  120. riQiPaiXu: 'DESC',
  121. chargeCode: '',
  122. orderNo: 2,
  123. feiYongLeiXingCode: 0,
  124. dept: store.state.user.info.deptCode === '3100000' ? '' : store.state.user.info.deptCode,
  125. currentPage: 1,
  126. pageSize: 30,
  127. tuiFeiFlag: 0,
  128. })
  129. const total = ref(0)
  130. const elTabPane = ref('ylrfy')
  131. const patient = ref({})
  132. const tableDataHuanZheFeiYong = ref([])
  133. const getHuanZheXinXiClick = () => {
  134. if (queryTerm.value.zaiHuanChuYuan === 0) {
  135. queryTerm.value.admissTimes = 0
  136. }
  137. if (patient.inpatientNo === queryTerm.value.inpatientNo) {
  138. queryHuanZheFeiYong()
  139. } else {
  140. getHuanZheXinXi(queryTerm.value.inpatientNo, queryTerm.value.zaiHuanChuYuan, queryTerm.value.admissTimes)
  141. .then((res) => {
  142. patient.value = res
  143. patient.value.feiYongLeiXingCode = queryTerm.value.feiYongLeiXingCode
  144. queryTerm.value.admissTimes = res.admissTimes
  145. queryHuanZheFeiYong()
  146. })
  147. .catch(() => {
  148. patient.value = {}
  149. tableDataHuanZheFeiYong.value = []
  150. })
  151. }
  152. }
  153. const queryHuanZheFeiYong = () => {
  154. if (elTabPane.value !== 'ylrfy') return
  155. let dateRangeS = getDateRangeFormatDate(queryTerm.value.dateRange)
  156. queryTerm.value.startTime = dateRangeS.startTime
  157. queryTerm.value.endTime = dateRangeS.endTime
  158. queryTerm.value.currentPage = 1
  159. queryTerm.value.total = 0
  160. getHuanZheFeiYong(queryTerm.value)
  161. .then((res) => {
  162. total.value = res.total
  163. patient.value.total = total.value
  164. tableDataHuanZheFeiYong.value = res
  165. })
  166. .catch(() => {
  167. tableDataHuanZheFeiYong.value = []
  168. })
  169. }
  170. const handleHuanZheFeiYong = () => {
  171. if (elTabPane.value !== 'ylrfy') return
  172. let dateRangeS = getDateRangeFormatDate(queryTerm.value.dateRange)
  173. queryTerm.value.startTime = dateRangeS.startTime
  174. queryTerm.value.endTime = dateRangeS.endTime
  175. queryTerm.value.total = total.value
  176. getHuanZheFeiYong(queryTerm.value)
  177. .then((res) => {
  178. res.total = total.value
  179. tableDataHuanZheFeiYong.value = res
  180. })
  181. .catch(() => {
  182. tableDataHuanZheFeiYong.value = []
  183. })
  184. }
  185. // 根据项目名称来查询
  186. const chargeCodeNameData = ref([])
  187. /**
  188. * 远程搜索
  189. */
  190. const remoteMethodChargeCode = (val) => {
  191. if (val.length >= 2) {
  192. getChargeCode(val).then((res) => {
  193. chargeCodeNameData.value = res
  194. })
  195. }
  196. }
  197. // 分页
  198. const handleSizeChange = (val) => {
  199. queryTerm.value.pageSize = val.val
  200. patient.value.pageSize = val.val
  201. queryHuanZheFeiYong()
  202. }
  203. const handleCurrentChange = (val) => {
  204. queryTerm.value.currentPage = val.val
  205. handleHuanZheFeiYong()
  206. }
  207. return {
  208. windowHeigth,
  209. queryTerm,
  210. getHuanZheXinXiClick,
  211. tableDataHuanZheFeiYong,
  212. patient,
  213. cptSex,
  214. queryHuanZheFeiYong,
  215. chargeCodeNameData,
  216. remoteMethodChargeCode,
  217. elTabPane,
  218. yiZhuTuiFeiLeiXing,
  219. tuiFeiLeiXin,
  220. shortcuts,
  221. feiYongLeiXing,
  222. handleSizeChange,
  223. handleCurrentChange,
  224. }
  225. },
  226. }
  227. </script>
  228. <style></style>