costComparison.vue 38KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962
  1. <template>
  2. <div class="main-contain incomeStatistics">
  3. <div class="position">
  4. <bread-crumb :crumbs='crumbs'></bread-crumb>
  5. </div>
  6. <div class="app-container">
  7. <div style="display: flex;justify-content: space-between;margin-bottom:10px;">
  8. <div>
  9. <el-input size="small" style="width:130px;" v-model="keywords" class="filter-item" />
  10. <el-button size="small" style="margin-left:10px;" class="filter-item" type="primary" @click="searchAction">
  11. 搜索
  12. </el-button>
  13. <el-date-picker v-model="query_start_time" prefix-icon="el-icon-date" @change="handleStartTimeChange"
  14. :editable="false" :clearable="false" style="width: 130px;" type="date" placeholder="选择开始日期"
  15. format="yyyy-MM-dd" value-format="yyyy-MM-dd" align="right"></el-date-picker>
  16. -
  17. <el-date-picker v-model="query_end_time" prefix-icon="el-icon-date" @change="handleEndTimeChange"
  18. :editable="false" :clearable="false" style="width: 130px;margin-right:10px;" type="date"
  19. placeholder="选择结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd" align="right"></el-date-picker>
  20. <label class="title">险种<span class="name"></span> : </label>
  21. <el-select v-model="query_insutype" style="width:140px;margin-right:10px;" placeholder="请选择"
  22. @change="changeInsutype">
  23. <el-option v-for="item in insutypes" :key="item.value" :label="item.label" :value="item.value">
  24. </el-option>
  25. </el-select>
  26. <label class="title">清算类别<span class="name"></span> : </label>
  27. <el-select v-model="query_clr_type" style="width:100px;margin-right:10px;" placeholder="请选择"
  28. @change="changeClrType">
  29. <el-option v-for="item in clrOptions" :key="item.value" :label="item.label" :value="item.value">
  30. </el-option>
  31. </el-select>
  32. </div>
  33. </div>
  34. <div style="float: right;margin-bottom: 10px">
  35. <el-button size="small" type="primary" @click="dialogFormVisible = true">医保对账</el-button>
  36. <el-button size="small" type="primary" @click="getFormData">下载对账报表</el-button>
  37. <el-button size="small" type="primary" @click="detail_derive" v-if="org_id==10726 || org_id ==0">明细</el-button>
  38. <el-button size="small" type="primary" @click="collect_derive" v-if="org_id==10726 || org_id ==0">汇总</el-button>
  39. <el-button size="small" type="primary" @click="Medical_derive" v-if="org_id==10697 || org_id ==0">医保汇总</el-button>
  40. </div>
  41. <el-table :data="tableData" border style="width: 100%;" :row-style="{ color: '#303133' }"
  42. :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)', color: '#606266' }" highlight-current-row
  43. @select="selectCostInfo" @selection-change="changeCostInfoTableData" @select-all="changeAllCostInfoTableData"
  44. row-key="row_key" ref="multipleTable">
  45. <el-table-column align="center" type="selection" width="55"></el-table-column>
  46. <el-table-column prop="date" label="序号" width="60" align="center" type="index">
  47. </el-table-column>
  48. <el-table-column align="center" prop="name" label="对账日期">
  49. <template slot-scope="scope">{{ getTimes(scope.row.ctime) }}</template>
  50. </el-table-column>
  51. <el-table-column align="center" prop="name" label="对账结果">
  52. <template slot-scope="scope">{{ '平' }}</template>
  53. </el-table-column>
  54. <el-table-column align="center" prop="name" label="操作机构">
  55. <!--<template slot-scope="scope">{{// this.$store.getters.xt_user.org.org_name}}</template>-->
  56. </el-table-column>
  57. <el-table-column align="center" prop="name" label="对账申请人">
  58. <template slot-scope="scope">{{ getName(scope.row.creator) }}</template>
  59. </el-table-column>
  60. <el-table-column align="center" prop="name" label="开始时间">
  61. <template slot-scope="scope">{{ getTimes(scope.row.start_time) }}</template>
  62. </el-table-column>
  63. <el-table-column align="center" prop="name" label="结束时间">
  64. <template slot-scope="scope">{{ getTimes(scope.row.end_time) }}</template>
  65. </el-table-column>
  66. <el-table-column align="center" prop="name" label="险种类型">
  67. <template slot-scope="scope">
  68. <div v-if="scope.row.insutype == '310'">职工基本医疗保险</div>
  69. <div v-if="scope.row.insutype == '320'">公务员医疗补助</div>
  70. <div v-if="scope.row.insutype == '330'">大额医疗费用补助</div>
  71. <div v-if="scope.row.insutype == '340'">离休人员医疗保障</div>
  72. <div v-if="scope.row.insutype == '390'">城乡居民基本医疗保险</div>
  73. <div v-if="scope.row.insutype == '392'">城乡居民大病医疗保险</div>
  74. <div v-if="scope.row.insutype == '510'">生育保险</div>
  75. </template>
  76. </el-table-column>
  77. <el-table-column align="center" prop="name" label="对账类型">
  78. <template slot-scope="scope">
  79. <div v-if="scope.row.check_type == 1">总账</div>
  80. <div v-if="scope.row.check_type == 2">明细</div>
  81. </template>
  82. </el-table-column>
  83. <el-table-column align="center" prop="name" label="清算经办机构">
  84. <template slot-scope="scope">{{ getName(scope.row.creator) }}</template>
  85. </el-table-column>
  86. <el-table-column align="center" prop="name" label="定点医药机构医疗费总额(元)">
  87. <template slot-scope="scope">{{ scope.row.cost_total }}</template>
  88. </el-table-column>
  89. <el-table-column align="center" prop="name" label="医保中心医疗费总额(元)">
  90. <template slot-scope="scope">{{ scope.row.cost_total }}</template>
  91. </el-table-column>
  92. <el-table-column align="center" prop="name" label="定点医药机构基金总额(元)">
  93. <template slot-scope="scope">{{ scope.row.func_total }}</template>
  94. </el-table-column>
  95. <el-table-column align="center" prop="name" label="医保中心基金总额(元)">
  96. <template slot-scope="scope">{{ scope.row.func_total }}</template>
  97. </el-table-column>
  98. <el-table-column align="center" prop="name" label="定点医药机构个人账号总额(元)">
  99. <template slot-scope="scope">{{ scope.row.psn_pay }}</template>
  100. </el-table-column>
  101. <el-table-column align="center" prop="name" label="医保中心个人账号总额(元)">
  102. <template slot-scope="scope">{{ scope.row.psn_pay }}</template>
  103. </el-table-column>
  104. <el-table-column align="center" prop="name" label="定点医药机构结算笔数">
  105. <template slot-scope="scope">{{ scope.row.num }}</template>
  106. </el-table-column>
  107. <el-table-column align="center" prop="name" label="医保中心结算笔数">
  108. <template slot-scope="scope">{{ scope.row.num }}</template>
  109. </el-table-column>
  110. </el-table>
  111. <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[10, 50, 100]"
  112. :page-size="10" background style="margin-top:20px;float: right" layout="total, sizes, prev, pager, next, jumper"
  113. :total="total">
  114. </el-pagination>
  115. <el-dialog title="医保对账" :visible.sync="dialogFormVisible">
  116. <el-form :model="form" label-width="100px">
  117. <el-form-item label="时间" label-width="100px">
  118. <el-date-picker v-model="start_time" prefix-icon="el-icon-date" :editable="false" :clearable="false"
  119. style="width: 200px;" type="date" placeholder="选择开始日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
  120. align="right"></el-date-picker>
  121. -
  122. <el-date-picker v-model="end_time" prefix-icon="el-icon-date" :editable="false" :clearable="false"
  123. style="width: 200px;margin-right:10px;" type="date" placeholder="选择结束日期" format="yyyy-MM-dd"
  124. value-format="yyyy-MM-dd" align="right"></el-date-picker>
  125. </el-form-item>
  126. <el-form-item label="险种类型" :label-width="formLabelWidth">
  127. <el-select v-model="insutype" placeholder="请选择" style="width: 200px;">
  128. <el-option v-for="item in insutypes" :key="item.value" :label="item.label" :value="item.value">
  129. </el-option>
  130. </el-select>
  131. </el-form-item>
  132. <el-form-item label="对账类型" :label-width="formLabelWidth">
  133. <el-select v-model="check_type" placeholder="请选择" style="width: 200px;">
  134. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
  135. </el-option>
  136. </el-select>
  137. </el-form-item>
  138. <el-form-item label="清算机构" :label-width="formLabelWidth" v-if="this.$store.getters.xt_user.org.id == 10106">
  139. <el-select v-model="query_clr_org" placeholder="请选择" style="width: 200px;">
  140. <el-option v-for="item in clrOrgOptions" :key="item.value" :label="item.label" :value="item.value">
  141. </el-option>
  142. </el-select>
  143. </el-form-item>
  144. <el-form-item label="清算类别" :label-width="formLabelWidth">
  145. <el-select v-model="clr_type" placeholder="请选择" style="width: 200px;">
  146. <el-option v-for="item in clrOptions" :key="item.value" :label="item.label" :value="item.value">
  147. </el-option>
  148. </el-select>
  149. </el-form-item>
  150. </el-form>
  151. <div slot="footer" class="dialog-footer">
  152. <el-button @click="dialogFormVisible = false">取 消</el-button>
  153. <el-button type="primary" @click="confirm">确 定</el-button>
  154. </div>
  155. </el-dialog>
  156. </div>
  157. </div>
  158. </template>
  159. <script>
  160. import BreadCrumb from '@/xt_pages/components/bread-crumb'
  161. import {
  162. getCheckAccountFormData,
  163. getDoctorList,
  164. getExportConsumeDetailList,
  165. getHisOrderList,
  166. getList,
  167. getInitData,exportdetail,exportsummary,summary2
  168. } from '@/api/his/his'
  169. import XLSX from 'xlsx';
  170. import { uParseTime } from '@/utils/tools'
  171. import { fetchAllAdminUsers } from '@/api/doctor'
  172. import axios from 'axios'
  173. export default {
  174. components: {
  175. BreadCrumb
  176. },
  177. data() {
  178. return {
  179. form: {},
  180. crumbs: [
  181. { path: false, name: '门诊收费' },
  182. { path: false, name: '医保费用对照' }
  183. ],
  184. tableData: [],
  185. diagnoses: [],
  186. limit: 10,
  187. page: 1,
  188. dialogFormVisible: false,
  189. total: 0,
  190. adminUserOptions: [],
  191. start_time: '',
  192. end_time: '',
  193. insutype: '',
  194. check_type: '',
  195. keywords: '',
  196. query_start_time: '',
  197. query_end_time: '',
  198. selection: [],
  199. query_insutype: '',
  200. query_clr_type: '',
  201. query_clr_org: '',
  202. clr_type: '',
  203. fromData: [],
  204. options: [
  205. {
  206. value: 1,
  207. label: '总账'
  208. }, {
  209. value: 2,
  210. label: '明细'
  211. }
  212. ], clrOrgOptions: [
  213. {
  214. value: '440781',
  215. label: '台山'
  216. }, {
  217. value: '440783',
  218. label: '开平'
  219. },
  220. ],
  221. clrOptions: [
  222. {
  223. value: '11',
  224. label: '门诊'
  225. }, {
  226. value: '21',
  227. label: '住院'
  228. }, {
  229. value: '41',
  230. label: '药店购药'
  231. }, {
  232. value: '99',
  233. label: '其他'
  234. }, {
  235. value: '9903',
  236. label: '异地(9903)'
  237. },{
  238. value: '9901',
  239. label: '异地(9901)'
  240. }
  241. ],
  242. insutypes: [
  243. {
  244. value: '310',
  245. label: '职工基本医疗保险'
  246. },
  247. // {
  248. // value: '320',
  249. // label: '公务员医疗补助'
  250. // }, {
  251. // value: '330',
  252. // label: '大额医疗费用补助'
  253. // }, {
  254. // value: '340',
  255. // label: '离休人员医疗保障'
  256. // },
  257. {
  258. value: '390',
  259. label: '城乡居民基本医疗保险'
  260. },
  261. // {
  262. // value: '392',
  263. // label: '城乡居民大病医疗保险'
  264. // }, {
  265. // value: '510',
  266. // label: '生育保险'
  267. // }
  268. // 1617724800
  269. ],
  270. org_id:'',
  271. detail_table:'',
  272. collect_table:'',
  273. }
  274. },
  275. methods: {
  276. changeInsutype() {
  277. let params = {
  278. 'page': 1,
  279. 'limit': 10,
  280. 'keywords': this.keywords,
  281. 'insutype': this.query_insutype,
  282. 'clr_type': "11",
  283. 'start_time': this.query_start_time,
  284. 'end_time': this.query_end_time,
  285. }
  286. this.tableData = []
  287. getList(params).then(response => {
  288. if (response.data.state == 0) {
  289. this.$message.error(response.data.msg)
  290. return false
  291. } else {
  292. this.tableData = response.data.data.list
  293. this.total = response.data.data.total
  294. }
  295. })
  296. }, changeClrType(val) {
  297. if (val != "11") {
  298. this.tableData = []
  299. this.total = 0
  300. } else {
  301. let params = {
  302. 'page': 1,
  303. 'limit': 10,
  304. 'keywords': this.keywords,
  305. 'insutype': this.query_insutype,
  306. 'clr_type': "11",
  307. 'start_time': this.query_start_time,
  308. 'end_time': this.query_end_time,
  309. }
  310. this.tableData = []
  311. getList(params).then(response => {
  312. if (response.data.state == 0) {
  313. this.$message.error(response.data.msg)
  314. return false
  315. } else {
  316. this.tableData = response.data.data.list
  317. this.total = response.data.data.total
  318. }
  319. })
  320. }
  321. },
  322. handleStartTimeChange() {
  323. let params = {
  324. 'page': 1,
  325. 'limit': 10,
  326. 'keywords': this.keywords,
  327. 'insutype': "",
  328. 'clr_type': "11",
  329. 'start_time': this.query_start_time,
  330. 'end_time': this.query_end_time,
  331. }
  332. this.tableData = []
  333. getList(params).then(response => {
  334. if (response.data.state == 0) {
  335. this.$message.error(response.data.msg)
  336. return false
  337. } else {
  338. this.tableData = response.data.data.list
  339. this.total = response.data.data.total
  340. }
  341. })
  342. }, handleEndTimeChange() {
  343. let params = {
  344. 'page': 1,
  345. 'limit': 10,
  346. 'keywords': this.keywords,
  347. 'insutype': "",
  348. 'clr_type': "11",
  349. 'start_time': this.query_start_time,
  350. 'end_time': this.query_end_time,
  351. }
  352. this.tableData = []
  353. getList(params).then(response => {
  354. if (response.data.state == 0) {
  355. this.$message.error(response.data.msg)
  356. return false
  357. } else {
  358. this.tableData = response.data.data.list
  359. this.total = response.data.data.total
  360. }
  361. })
  362. },
  363. searchAction() {
  364. let params = {
  365. 'page': 1,
  366. 'limit': 10,
  367. 'keywords': this.keywords,
  368. 'insutype': "",
  369. 'clr_type': "11",
  370. 'start_time': "",
  371. 'end_time': "",
  372. }
  373. this.tableData = []
  374. getList(params).then(response => {
  375. if (response.data.state == 0) {
  376. this.$message.error(response.data.msg)
  377. return false
  378. } else {
  379. this.tableData = response.data.data.list
  380. this.total = response.data.data.total
  381. }
  382. })
  383. },
  384. selectCostInfo(selection, row) {
  385. this.selection = selection
  386. }, changeCostInfoTableData(val) {
  387. this.selection = val
  388. }, changeAllCostInfoTableData(selection) {
  389. this.selection = selection
  390. }, confirm() {
  391. if (this.check_type == 1) {
  392. let params = {
  393. start_time: this.start_time,
  394. end_time: this.end_time,
  395. insutype: this.insutype,
  396. clr_type: this.clr_type,
  397. clr_optins: this.query_clr_org,
  398. admin_user_id: this.$store.getters.xt_user.user.id,
  399. }
  400. var that = this
  401. axios.get('http://127.0.0.1:9532/api/checkaccount/get', {
  402. params: params
  403. })
  404. .then(function (response) {
  405. if (response.data.state == 0) {
  406. that.$message.error(response.data.msg)
  407. return false
  408. } else {
  409. var result_desc = ''
  410. if (response.data.data.stmt_rslt == 0) {
  411. result_desc = '对账平'
  412. } else if (response.data.data.stmt_rslt == 1) {
  413. result_desc = '中心多' + '\n' + response.data.data.stmt_rslt_dscr
  414. } else if (response.data.data.stmt_rslt == 2) {
  415. result_desc = '机构多' + '\n' + response.data.data.stmt_rslt_dscr
  416. }
  417. that.$alert(result_desc, '对账结果', {
  418. confirmButtonText: '确定',
  419. callback: action => {
  420. that.dialogFormVisible = false
  421. }
  422. })
  423. that.page = 1
  424. that.limit = 10
  425. that.keywords = ''
  426. that.query_start_time = ''
  427. that.query_end_time = ''
  428. that.query_insutype = ''
  429. that.query_clr_type = ''
  430. that.getList()
  431. }
  432. })
  433. .catch(function (error) {
  434. })
  435. } else {
  436. let params = {
  437. start_time: this.start_time,
  438. end_time: this.end_time
  439. }
  440. var that = this
  441. axios.get('http://127.0.0.1:9532/api/checkdetailaccount/get', {
  442. params: params
  443. })
  444. .then(function (response) {
  445. if (response.data.state == 0) {
  446. that.$message.error(response.data.msg)
  447. return false
  448. } else {
  449. this.page = 1
  450. this.limit = 10
  451. this.keywords = ''
  452. this.getList()
  453. }
  454. })
  455. .catch(function (error) {
  456. })
  457. }
  458. },
  459. getInsutype(type) {
  460. },
  461. fetchAllAdminUsers() {
  462. fetchAllAdminUsers().then(response => {
  463. if (response.data.state == 1) {
  464. this.adminUserOptions = response.data.data.users
  465. }
  466. })
  467. },
  468. getName(admin_user_id) {
  469. for (let i = 0; i < this.adminUserOptions.length; i++) {
  470. if (this.adminUserOptions[i].id == admin_user_id) {
  471. return this.adminUserOptions[i].name
  472. }
  473. }
  474. },
  475. getTimes(time) {
  476. return uParseTime(time, '{y}-{m}-{d}')
  477. },
  478. getList() {
  479. let params = {
  480. 'page': this.page,
  481. 'limit': this.limit,
  482. 'keywords': this.keywords,
  483. 'insutype': this.query_insutype,
  484. 'clr_type': this.query_clr_type,
  485. 'start_time': this.query_start_time,
  486. 'end_time': this.query_end_time
  487. }
  488. this.tableData = []
  489. getList(params).then(response => {
  490. if (response.data.state == 0) {
  491. this.$message.error(response.data.msg)
  492. return false
  493. } else {
  494. this.tableData = response.data.data.list
  495. this.total = response.data.data.total
  496. }
  497. })
  498. },
  499. handleSizeChange(limit) {
  500. this.limit = limit
  501. this.getList()
  502. },
  503. handleCurrentChange(page) {
  504. this.page = page
  505. this.getList()
  506. }, getFormData() {
  507. if (this.selection.length == 0) {
  508. this.$message.error('请选择要下载的对账记录')
  509. return
  510. }
  511. let params = {
  512. 'start_time': this.getTimes(this.selection[0].start_time),
  513. 'end_time': this.getTimes(this.selection[0].end_time),
  514. 'insutype': this.selection[0].insutype,
  515. 'clr_type': this.selection[0].clr_type,
  516. }
  517. getCheckAccountFormData(params).then(response => {
  518. if (response.data.state == 0) {
  519. this.$message.error(response.data.msg)
  520. return false
  521. } else {
  522. this.fromData = response.data.data.list
  523. if (this.selection[0].insutype == "310") {
  524. var list = []
  525. for (let i = 0; i < this.fromData.length; i++) {
  526. // var hifmi_pay = 0.00;
  527. //
  528. // if(this.fromData[i].setl_detail.length > 0){
  529. // var jsonObj = JSON.parse(this.fromData[i].setl_detail);
  530. // for (let i = 0; i < jsonObj.length; i++) {
  531. // if (order.fund_pay_type == '310300') {
  532. // hifmi_pay = jsonObj[i].fund_payamt
  533. // }
  534. // }
  535. // }
  536. let obj = {
  537. '序号': i + 1,
  538. '姓名': this.fromData[i].psn_name,
  539. '单位名称': this.fromData[i].psn_name,
  540. '个人编号': this.fromData[i].psn_no,
  541. '门诊流水号': this.fromData[i].mdtrt_id,
  542. '挂号日期': this.getTimes(this.fromData[i].settle_accounts_date),
  543. '科室名称': "血透室",
  544. '门诊费用': this.fromData[i].medfee_sumamt,
  545. '医保支付': this.fromData[i].fund_pay_sumamt,
  546. '自费': this.fromData[i].psn_cash_pay,
  547. '起付线I': this.fromData[i].act_pay_dedc,
  548. '按比例自付II': this.fromData[i].psn_cash_pay,
  549. '小计I+II': this.fromData[i].act_pay_dedc + this.fromData[i].psn_cash_pay,
  550. '基本统筹基金': this.fromData[i].hifp_pay,
  551. '公务员补助': this.fromData[i].cvlserv_pay,
  552. '单位补充保险': this.fromData[i].hifmi_pay,
  553. '煤矿补充保险': "0.00",
  554. "超封顶线费用": "0.00",
  555. '大额医疗保险应付': this.fromData[i].hifob_pay,
  556. '透析补助': "0.00",
  557. '大额合计': "0.00",
  558. '实账支付额': "0.00",
  559. '诊断': this.GetDiagnosisName(this.fromData[i].diagnosis_id),
  560. "血透次数": this.fromData[i].DialysisCount,
  561. "置留管数量": 0,
  562. "备注": "",
  563. }
  564. list.push(obj)
  565. }
  566. var insutype_name = ''
  567. if (this.query_insutype == '310') {
  568. insutype_name = '职工基本医疗保险'
  569. } else if (this.query_insutype == '390') {
  570. insutype_name = '城乡居民基本医疗保险'
  571. }
  572. import('@/vendor/Export2Excel').then(excel => {
  573. const tHeader = ['序号', '姓名', '单位名称', '个人编号', '门诊流水号', '挂号日期', '科室名称', '门诊费用', '医保支付', '自费', '起付线I', '按比例自付II', '小计I+II', '基本统筹基金', '公务员补助', '单位补充保险', '煤矿补充保险', '超封顶线费用', '大额医疗保险应付', '透析补助', '大额合计', '实账支付额', '诊断', '血透次数', '置留管数量', '备注']
  574. const filterVal = ['序号', '姓名', '单位名称', '个人编号', '门诊流水号', '挂号日期', '科室名称', '门诊费用', '医保支付', '自费', '起付线I', '按比例自付II', '小计I+II', '基本统筹基金', '公务员补助', '单位补充保险', '煤矿补充保险', '超封顶线费用', '大额医疗保险应付', '透析补助', '大额合计', '实账支付额', '诊断', '血透次数', '置留管数量', '备注']
  575. // const filterVal = [ '姓名', '身份证', '个人编号', '门诊流水号', '挂号日期', '起付线', '统筹基金', '个人支付', '个账支付', '现金支付', '总费用', '冲销标志']
  576. const merges = ['A1:A2', 'B1:B2', 'C1:E1', 'F1:H1', 'I1:K1', 'L1:N1', 'O1:Q1', 'R1:T1', 'U1:W1', 'X1:Z1', 'AA1:AC1', 'AD1:AF1', 'AG1:AI1', 'AJ1:AL1', 'AM1:AO1', 'AP1:AR1', 'AS1:AU1', 'AV1:AX1', 'AY1:BA1', 'BB1:BD1', 'BE1:BG1', 'BH1:BJ1', 'BK1:BM1']
  577. const data = this.formatJson(filterVal, list)
  578. excel.export_json_to_excel({
  579. header: tHeader,
  580. data,
  581. filename: this.getTimes(this.selection[0].start_time) + '~' + this.getTimes(this.selection[0].end_time) + insutype_name + '对账报表'
  582. })
  583. })
  584. } else {
  585. var list = []
  586. for (let i = 0; i < this.fromData.length; i++) {
  587. let obj = {
  588. '序号': i + 1,
  589. '姓名': this.fromData[i].psn_name,
  590. '个人编号': this.fromData[i].psn_no,
  591. '门诊号': this.fromData[i].mdtrt_id,
  592. '挂号日期': this.getTimes(this.fromData[i].settle_accounts_date),
  593. '诊断': this.GetDiagnosisName(this.fromData[i].diagnosis_id),
  594. '挂号科室': "血透室",
  595. '门诊费用': this.fromData[i].medfee_sumamt,
  596. '医保支付': this.fromData[i].fund_pay_sumamt,
  597. '自费': this.fromData[i].psn_cash_pay,
  598. '起付线I': this.fromData[i].act_pay_dedc ? this.fromData[i].act_pay_dedc : "0.00",
  599. '按比例自付II': this.fromData[i].psn_cash_pay ? this.fromData[i].psn_cash_pay : "0.00",
  600. "超封顶线费用": "0.00",
  601. "合计": parseFloat(this.fromData[i].act_pay_dedc) + parseFloat(this.fromData[i].psn_cash_pay),
  602. '基本统筹基金': this.fromData[i].hifp_pay,
  603. '大病保险': this.fromData[i].hifmi_pay,
  604. '医疗救助': this.fromData[i].maf_pay,
  605. '实账支付额': "0.00",
  606. "血透次数": this.fromData[i].DialysisCount,
  607. "置留管数量": 0,
  608. "备注": "",
  609. }
  610. list.push(obj)
  611. }
  612. var insutype_name = ''
  613. if (this.query_insutype == '310') {
  614. insutype_name = '职工基本医疗保险'
  615. } else if (this.query_insutype == '390') {
  616. insutype_name = '城乡居民基本医疗保险'
  617. }
  618. import('@/vendor/Export2Excel').then(excel => {
  619. const tHeader = ['序号', '姓名', '个人编号', '门诊号', '挂号日期', '诊断', '挂号科室', '门诊费用', '医保支付', '自费', '起付线I', '按比例自付II', '超封顶线费用', '合计', '基本统筹基金', '大病保险', '医疗救助', '实账支付额', '血透次数', '置留管数量', '备注']
  620. const filterVal = ['序号', '姓名', '个人编号', '门诊号', '挂号日期', '诊断', '挂号科室', '门诊费用', '医保支付', '自费', '起付线I', '按比例自付II', '超封顶线费用', '合计', '基本统筹基金', '大病保险', '医疗救助', '实账支付额', '血透次数', '置留管数量', '备注']
  621. // const filterVal = [ '姓名', '身份证', '个人编号', '门诊流水号', '挂号日期', '起付线', '统筹基金', '个人支付', '个账支付', '现金支付', '总费用', '冲销标志']
  622. const merges = ['A1:A2', 'B1:B2', 'C1:E1', 'F1:H1', 'I1:K1', 'L1:N1', 'O1:Q1', 'R1:T1', 'U1:W1', 'X1:Z1', 'AA1:AC1', 'AD1:AF1', 'AG1:AI1', 'AJ1:AL1', 'AM1:AO1', 'AP1:AR1', 'AS1:AU1', 'AV1:AX1', 'AY1:BA1', 'BB1:BD1', 'BE1:BG1', 'BH1:BJ1', 'BK1:BM1']
  623. const data = this.formatJson(filterVal, list)
  624. excel.export_json_to_excel({
  625. header: tHeader,
  626. data,
  627. filename: this.getTimes(this.selection[0].start_time) + '~' + this.getTimes(this.selection[0].end_time) + insutype_name + '对账报表'
  628. })
  629. })
  630. }
  631. }
  632. })
  633. }, formatJson(filterVal, jsonData) {
  634. return jsonData.map(v => filterVal.map(j => v[j]))
  635. }, GetDiagnosisName(id) {
  636. for (let i = 0; i < this.diagnoses.length; i++) {
  637. if (this.diagnoses[i].id == id) {
  638. return this.diagnoses[i].class_name
  639. }
  640. }
  641. return ""
  642. }, getInitData() {
  643. getInitData().then(response => {
  644. if (response.data.state == 0) {
  645. this.$message.error(response.data.msg)
  646. return false
  647. } else {
  648. this.diagnoses = response.data.data.diagnose
  649. }
  650. })
  651. },
  652. detail_derive(){
  653. if(this.query_start_time !='' && this.query_end_time != ''){
  654. const params={
  655. start_time:this.query_start_time,
  656. end_time:this.query_end_time
  657. }
  658. exportdetail(params).then(response=>{
  659. console.log('response',response);
  660. if(response.data.state==1){
  661. const table_list = response.data.data.result
  662. let tableData = [
  663. ['序号', '医疗区划', '证件号码', '姓名','性别', '职业','医疗类别', '入院时间', '出院时间', '结算时间',
  664. '出院诊断','住院天数', '医疗费总额','统筹支付金额','起付线', '职工大额基金支付', '居民大病基金支出',
  665. '企业补充','公务员补助', '医疗救助','其他支付','医院负担', '个账支付', '共济支付','基金支付金额','现金支付']//导出表头
  666. ]
  667. table_list.forEach((item,index) =>{
  668. let rowdata=[]
  669. rowdata=[
  670. (index*1)+1,item.MedicalArea,item.CertNo,item.PsnName,
  671. item.Gender,item.Occupation,item.MedicalType,item.AdmissionTime,
  672. item.DischargeTime,item.SettlementTime,item.DischargeDiagnosis,item.InpatientDays,
  673. item.MedicalFeeTotal,item.HifpPay,item.ActPayDedc,item.HifobPay,item.HifmiPay,
  674. item.HifesPay,item.CvlseryPay,item.MafPay,item.OthPay,item.HospPartAmt,
  675. item.AcctPay,item.AcctMulaidPay,item.FundPaySumamt,item.PsnCashPay
  676. ]
  677. tableData.push(rowdata)
  678. })
  679. let workSheet = XLSX.utils.aoa_to_sheet(tableData);
  680. let bookNew = XLSX.utils.book_new();
  681. XLSX.utils.book_append_sheet(bookNew, workSheet, '明细') // 工作簿名称
  682. let name = '明细'+ '.xlsx'
  683. XLSX.writeFile(bookNew, name) // 保存的文件名
  684. }
  685. })
  686. }else{
  687. this.$message({
  688. message: '请选择开始时间和结束时间',
  689. type: 'warning'
  690. });
  691. }
  692. },
  693. collect_derive(){
  694. if(this.query_start_time !='' && this.query_end_time != ''){
  695. const params={
  696. start_time:this.query_start_time,
  697. end_time:this.query_end_time
  698. }
  699. exportsummary(params).then(response=>{
  700. console.log('exportsummary11111',response);
  701. if(response.data.state==1){
  702. const collect = response.data.data.result
  703. const people=0
  704. const Visit=0
  705. const Total=0
  706. const pool =0
  707. const Big=0
  708. const Public =0
  709. const Other =0
  710. const Acct =0
  711. const Mutual =0
  712. const Cash =0
  713. const Medical = 0
  714. for(let i in collect){
  715. var obj={
  716. InsuranceType:'合计',
  717. MedicalArea:'',
  718. SettlementCategory:'',
  719. PeopleCount:people+collect[i].PeopleCount,
  720. VisitCount:Visit+collect[i].VisitCount,
  721. TotalMedicalFee:Total+collect[i].TotalMedicalFee,
  722. PoolFundPay:pool+collect[i].PoolFundPay,
  723. BigDiseaseFundPay:Big+collect[i].BigDiseaseFundPay,
  724. PublicServantPay:Public+collect[i].PublicServantPay,
  725. MedicalAssistance:Medical+collect[i].MedicalAssistance,
  726. OtherPay:Other+collect[i].OtherPay,
  727. AcctPay:Acct+collect[i].AcctPay,
  728. MutualAidPay:Mutual+collect[i].MutualAidPay,
  729. CashPay:Cash+collect[i].CashPay
  730. }
  731. }
  732. collect.push(obj)
  733. let tableData = [
  734. ['险种类型','统筹区','清算类别','人数','人次','医疗费用合计','统筹基金支付','大病基金支付',
  735. '公务员补助','医疗救助','其他支付','个账支付','其中共济账户支出','现金支付']//导出表头
  736. ]
  737. collect.forEach((item,index) =>{
  738. let rowdata=[]
  739. rowdata=[
  740. item.InsuranceType,item.MedicalArea,item.SettlementCategory,
  741. item.PeopleCount,item.VisitCount,item.TotalMedicalFee,item.PoolFundPay,
  742. item.BigDiseaseFundPay,item.PublicServantPay,item.MedicalAssistance,item.OtherPay,
  743. item.AcctPay,item.MutualAidPay,item.CashPay
  744. ]
  745. tableData.push(rowdata)
  746. })
  747. let workSheet = XLSX.utils.aoa_to_sheet(tableData);
  748. let bookNew = XLSX.utils.book_new();
  749. XLSX.utils.book_append_sheet(bookNew, workSheet, '汇总') // 工作簿名称
  750. let name = '汇总'+ '.xlsx'
  751. XLSX.writeFile(bookNew, name) // 保存的文件名
  752. }
  753. })
  754. }else{
  755. this.$message({
  756. message: '请选择开始时间和结束时间',
  757. type: 'warning'
  758. });
  759. }
  760. },
  761. Medical_derive(){
  762. if(this.query_start_time !='' && this.query_end_time != '' && this.query_insutype!=''){
  763. const params={
  764. start_time:this.query_start_time,
  765. end_time:this.query_end_time,
  766. ins:this.query_insutype,
  767. }
  768. summary2(params).then(response =>{
  769. console.log('summary2',response);
  770. if(response.data.state==1){
  771. const table=response.data.data.result
  772. var list = []
  773. const bed=0
  774. const West=0
  775. const Chinese=0
  776. const Exam=0
  777. const Trea=0
  778. const Labor=0
  779. const Heal=0
  780. const Other=0
  781. const Total=0
  782. const Self=0
  783. const Acct=0
  784. const Mutua=0
  785. const Public=0
  786. const Pool=0
  787. const Medical=0
  788. const Big=0
  789. const Enter=0
  790. const Major=0
  791. const Other2=0
  792. const zhenca=0
  793. var obj2 = {}
  794. for(let i in table){
  795. let obj={
  796. '序号': i + 1,
  797. "医疗保险号":table[i].MedicalInsuranceNo,
  798. '姓名':table[i].PsnName,
  799. '床位':table[i].BedsFee,
  800. '西药':table[i].WesternMedicineFee,
  801. '中药':table[i].ChinesePatentMedicineFee,
  802. '检查':table[i].ExaminationFee,
  803. '治疗':table[i].TreatmentFee,
  804. '手术':0,
  805. '化验':table[i].LaboratoryFee,
  806. '材料':table[i].HealthMaterialsFee,
  807. '诊查':zhenca + table[i].ConsultationFee,
  808. '其它':table[i].OtherFee,
  809. '医疗费总额':table[i].TotalMedicalFee,
  810. '个人自付金额':table[i].SelfPay,
  811. '基本账户支付':table[i].AcctPay,
  812. '共济账户支付':table[i].MutualAidAcctPay,
  813. '公务员补助':table[i].PublicServantPay,
  814. '统筹支付金额':table[i].PoolFundPay,
  815. '医疗救助':table[i].MedicalAssistance,
  816. '大病支付':table[i].BigDiseasePay,
  817. '企业补充支付':table[i].EnterpriseSupplement,
  818. '重大疾病补充':table[i].MajorDiseaseSupplement,
  819. '其它支付':table[i].OtherPayment,
  820. }
  821. obj2={
  822. '序号': '合计',
  823. "医疗保险号":'',
  824. '姓名':'',
  825. '床位':bed + table[i].BedsFee,
  826. '西药':West + table[i].WesternMedicineFee,
  827. '中药':Chinese + table[i].ChinesePatentMedicineFee,
  828. '检查':Exam + table[i].ExaminationFee,
  829. '治疗':Trea + table[i].TreatmentFee,
  830. '手术':0,
  831. '化验':Labor + table[i].LaboratoryFee,
  832. '材料':Heal + table[i].HealthMaterialsFee,
  833. '诊查':zhenca + table[i].ConsultationFee,
  834. '其它':Other + table[i].OtherFee,
  835. '医疗费总额':Total + table[i].TotalMedicalFee,
  836. '个人自付金额':Self + table[i].SelfPay,
  837. '基本账户支付':Acct + table[i].AcctPay,
  838. '共济账户支付':Mutua + table[i].MutualAidAcctPay,
  839. '公务员补助':Public + table[i].PublicServantPay,
  840. '统筹支付金额':Pool + table[i].PoolFundPay,
  841. '医疗救助':Medical + table[i].MedicalAssistance,
  842. '大病支付':Big + table[i].BigDiseasePay,
  843. '企业补充支付':Enter + table[i].EnterpriseSupplement,
  844. '重大疾病补充':Major + table[i].MajorDiseaseSupplement,
  845. '其它支付':Other2+table[i].OtherPayment,
  846. }
  847. list.push(obj)
  848. }
  849. list.push(obj2)
  850. }
  851. import('@/vendor/Export2Excel').then(excel => {
  852. const multiHeader =[['序号','医疗保险号','姓名','医疗费项目','','','','','','','','','医疗费总额','个人自付金额','基本账户支付','共济账户支付','公务员补助','统筹支付金额','医疗救助','大病支付','企业补充支付','重大疾病补充','其它支付']]
  853. const tHeader = ['','','','床位','西药','中药','检查','治疗','手术','化验', '材料','诊查', '其它','','','','','','','','','','','']
  854. const filterVal = ['序号','医疗保险号','姓名', '床位','西药','中药','检查','治疗','手术','化验', '材料','诊查', '其它','医疗费总额','个人自付金额','基本账户支付','共济账户支付','公务员补助','统筹支付金额','医疗救助','大病支付','企业补充支付','重大疾病补充','其它支付']
  855. const merges = ['A1:A2', 'B1:B2', 'C1:C2', 'D1:L1', 'M1:M2', 'N1:N2', 'O1:O2', 'P1:P2', 'Q1:Q2', 'R1:R2', 'S1:S2', 'T1:T2', 'U1:U2', 'V1:V2', 'W1:W2','X1:X2']
  856. const data = this.formatJson(filterVal, list)
  857. excel.export_json_to_excel({
  858. multiHeader:multiHeader,
  859. header: tHeader,
  860. data,
  861. merges,
  862. filename: this.getinsutype(this.query_insutype)+'汇总'
  863. })
  864. })
  865. })
  866. }else{
  867. this.$message({
  868. message: '请选择开始时间,结束时间和险种',
  869. type: 'warning'
  870. });
  871. }
  872. },
  873. getinsutype(val){
  874. if(val==''){
  875. this.$message({message:'请选择险种',type: 'warning'})
  876. }else{
  877. for(let i in this.insutypes){
  878. if(val == this.insutypes[i].value){
  879. return this.insutypes[i].label
  880. }
  881. }
  882. }
  883. },
  884. },
  885. created() {
  886. this.org_id = this.$store.getters.xt_user.org.id
  887. this.getList()
  888. this.fetchAllAdminUsers()
  889. this.getInitData()
  890. }
  891. }
  892. </script>