batchPrint.vue 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  1. <template>
  2. <div>
  3. <div id='prescription-print'>
  4. <div class="prescription-print"
  5. style="position: relative; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.06) inset; page-break-after:always"
  6. v-for="(infos,index) in info" :key="index">
  7. <img style="width:100%;height:80px"
  8. v-if="$store.getters.xt_user.org_id == 10138 || $store.getters.xt_user.org_id == 0 || $store.getters.xt_user.org_id == 10342 || $store.getters.xt_user.org_id == 10341"
  9. src="https://kuyi.shengws.com/bailin/bltotle.jpg" alt="">
  10. <img style="width:100%;height:80px" v-if="$store.getters.xt_user.org_id==10278" src="https://kuyi.shengws.com/beierlog.png" alt="">
  11. <div class="printTitle" style="position: absolute;left: 40%;top: 50px;">门诊收费清单</div>
  12. <div style="display:flex;">
  13. <div>单据号:<span
  14. style="display:inline-block;width:200px;">{{infos.order.number ? infos.order.number : ''}}</span>
  15. </div>
  16. <div>透析号:<span style="display:inline-block;width:200px;">{{infos.patient.dialysis_no ? infos.patient.dialysis_no : ''}}</span>
  17. </div>
  18. <div style="margin-left:2px;">电脑号:<span
  19. style="display:inline-block;">{{infos.his.psn_no ? infos.his.psn_no : ''}}</span></div>
  20. </div>
  21. <div style="display:flex;justify-content: space-between;">
  22. <div style="display:flex;" >
  23. <div>姓名:<span style="display:inline-block;width:50px;">
  24. {{infos.patient.name ? infos.patient.name.indexOf('(') > -1 ? infos.patient.name.substring(0,infos.patient.name.indexOf('(')) : infos.patient.name : ''}}
  25. </span>
  26. </div>
  27. <div>性别:<span
  28. style="display:inline-block;width:30px;">{{infos.patient.gender == '1' ? '男' : '女'}}</span>
  29. </div>
  30. <div>年龄:<span
  31. style="display:inline-block;width:50px;">{{getAge(infos.patient)}}岁</span>
  32. </div>
  33. <div>费别:<span style="display:inline-block;min-width:80px;">医保</span>
  34. </div>
  35. <div>收费日期:<span style="display:inline-block;">{{infos.order.setl_time ? infos.order.setl_time.split(' ') : ''}}</span>
  36. </div>
  37. </div>
  38. <div style="float:right">金额单位:元</div>
  39. </div>
  40. <div style="min-height: 300px;">
  41. <table border='1' style="width:100%;" cellspacing="0">
  42. <tr>
  43. <td width="70">类别</td>
  44. <td>项目</td>
  45. <td min-width="180" style="min-width:60px;">规格</td>
  46. <td width="40">单位</td>
  47. <td width="40">数量</td>
  48. <td width="60">单价</td>
  49. <td width="70">总额</td>
  50. <td width="130">小计</td>
  51. </tr>
  52. <div v-for="(item,i) in infos.new_detail_list" :key="i" style="width:100%;display: table-row-group;">
  53. <tr v-for="(subItem,index) in item.details" :key="index">
  54. <td>
  55. <span v-if="item.type == 1">药品费</span>
  56. <span v-if="item.type == 2">诊疗费</span>
  57. <span v-if="item.type == 3">耗材费</span>
  58. <span v-if="item.type == 4">诊疗费</span>
  59. </td>
  60. <td>
  61. <span v-if="item.type == 1">{{ subItem.advice.advice_name }}</span>
  62. <span v-if="item.type == 2">{{ subItem.project.project.project_name }}</span>
  63. <span v-if="item.type == 3">{{ subItem.project.good_info.good_name }}</span>
  64. <span v-if="item.type == 4">{{ subItem.project.project.team_name }}</span>
  65. </td>
  66. <td>
  67. <span v-if="item.type == 1">
  68. <span v-if="subItem.advice.drug.min_unit != subItem.advice.drug.dose_unit">
  69. {{subItem.advice.drug.dose}}{{subItem.advice.drug.dose_unit}}&nbsp;* &nbsp;</span>{{subItem.advice.drug.min_number}}{{subItem.advice.drug.min_unit}}/{{subItem.advice.drug.max_unit}}
  70. </span>
  71. <span v-if="item.type == 2"></span>
  72. <span v-if="item.type == 3">{{ subItem.project.good_info.specification_name }}</span>
  73. <span v-if="item.type == 4"></span>
  74. </td>
  75. <td>
  76. <span v-if="item.type == 1">{{ subItem.advice.drug.prescribing_number_unit }}</span>
  77. <span v-if="item.type == 2">{{ subItem.project.unit }}</span>
  78. <span v-if="item.type == 3">{{ subItem.project.unit }}</span>
  79. <span v-if="item.type == 4"></span>
  80. </td>
  81. <td>
  82. <span v-if="item.type == 1">{{ subItem.advice.prescribing_number }}</span>
  83. <span v-if="item.type == 2">{{ subItem.project.count }}</span>
  84. <span v-if="item.type == 3">{{ subItem.project.count }}</span>
  85. <span v-if="item.type == 4"></span>
  86. </td>
  87. <td>
  88. <span v-if="item.type == 1">{{ subItem.pric.toFixed(2) }}</span>
  89. <span v-if="item.type == 2">{{ subItem.pric.toFixed(2) }}</span>
  90. <span v-if="item.type == 3">{{ subItem.pric.toFixed(2) }}</span>
  91. <span v-if="item.type == 4">{{subItem.Total}}</span>
  92. </td>
  93. <td>
  94. <span v-if="item.type == 1">{{ (subItem.advice.prescribing_number * subItem.pric).toFixed(2) }}</span>
  95. <span v-if="item.type == 2">{{ (subItem.project.count * subItem.pric).toFixed(2) }}</span>
  96. <span v-if="item.type == 3">{{ (subItem.project.count * subItem.pric).toFixed(2) }}</span>
  97. <span v-if="item.type == 4">{{subItem.Total}}</span>
  98. </td>
  99. <td :rowspan="item.details.length" v-if="index == 0"
  100. style="vertical-align: middle;text-align: center;">{{ item.total.toFixed(2) }}
  101. </td>
  102. </tr>
  103. </div>
  104. <tr>
  105. <td colspan="7">
  106. <div style="display:flex;flez-wrap:wrap;">
  107. <div style="width:33%;" v-for="(item,index) in infos.new_detail_list" :key="index">
  108. <span v-if="item.type == 1">药品费: {{ item.total.toFixed(2) }}</span>
  109. <span v-if="item.type == 2">诊疗费: {{ item.total.toFixed(2) }}</span>
  110. <span v-if="item.type == 3">耗材费: {{ item.total.toFixed(2) }}</span>
  111. <span v-if="item.type == 4">诊疗费: {{ item.total.toFixed(2) }}</span>
  112. </div>
  113. </div>
  114. </td>
  115. <td>合计: {{infos.order.medfee_sumamt}}元</td>
  116. </tr>
  117. <tr>
  118. <td colspan="7">
  119. <div style="display:flex;flez-wrap:wrap;margin-bottom:10px;font-size:16px;">
  120. <div style="width:33%;">医疗费总额:{{infos.order.medfee_sumamt}}元</div>
  121. <div style="width:33%;">基金支付金额:{{infos.order.hifp_pay}}元</div>
  122. <div style="width:33%;">个人账户支付金额:{{infos.order.acct_pay}}元</div>
  123. </div>
  124. <div style="display:flex;flez-wrap:wrap;font-size:16px;">
  125. <div style="width:33%;">医疗救助基金金额:{{infos.order.maf_pay}}元</div>
  126. <div style="width:33%;">个人支付金额:{{ infos.order.psn_pay }}元</div>
  127. <div style="width:33%;">个人账户金额:{{infos.order.balc}}元</div>
  128. </div>
  129. </td>
  130. <td style="font-size:16px;">合计:{{infos.order.medfee_sumamt}}元</td>
  131. </tr>
  132. </table>
  133. <div style="float:right;margin:5px 0;display:flex;">
  134. <div>操作人:<span style="width:100px;display:inline-block;">{{infos.printor_admin.user_name}}</span></div>
  135. <div>操作日期:<span style="width:100px;display:inline-block;">{{infos.order.setl_time ? infos.order.setl_time.split(' ')[0] : ''}}</span>
  136. </div>
  137. </div>
  138. </div>
  139. <img style="width:100%;" v-if="$store.getters.xt_user.org_id == 10138" src="https://kuyi.shengws.com/bailin/blend.jpg" alt="">
  140. <img style="width:100%;" v-if="$store.getters.xt_user.org_id == 10278" src="https://kuyi.shengws.com/bailinbeier.png" alt="">
  141. </div>
  142. </div>
  143. </div>
  144. </template>
  145. <script>
  146. import { getChargePrint } from '@/api/project/project'
  147. import { jsGetAge, uParseTime } from '@/utils/tools'
  148. export default {
  149. name: "batchPrint",
  150. data() {
  151. return {
  152. list: {},
  153. prescription: [],
  154. patient: {},
  155. orgname: '',
  156. result: {},
  157. org_code: '',
  158. patient_name: '',
  159. doctor_code: '',
  160. doctor_name: '',
  161. name_arr: [],
  162. spec_arr: [],
  163. count_arr: [],
  164. price_arr: [],
  165. total_arr: []
  166. }
  167. },
  168. props: {
  169. paramsObj: Object,
  170. info: Array,
  171. balanceAccounts: Object
  172. },
  173. methods: {
  174. getAge: function(val) {
  175. if (val.id_card_no) {
  176. var thisLen = val.id_card_no.length
  177. var birth = ''
  178. if (thisLen == 15) {
  179. birth = '19' + val.id_card_no.substr(6, 6)
  180. } else {
  181. birth = val.id_card_no.substr(6, 8)
  182. }
  183. var birthtwo =
  184. birth.substr(0, 4) +
  185. '-' +
  186. birth.substr(4, 2) +
  187. '-' +
  188. birth.substr(6, 2)
  189. var age = jsGetAge(birthtwo, '-')
  190. return age
  191. }
  192. },
  193. getName(list) {
  194. let new_list = []
  195. for (let i = 0; i < list.length; i++) {
  196. if (list[i].aac031 == '1') {
  197. new_list.push(list[i])
  198. }
  199. }
  200. switch (new_list[0].bcc334) {
  201. case 'A31001':
  202. return '深圳医保1档'
  203. break
  204. case 'A31002':
  205. return '深圳医保2档'
  206. break
  207. case 'A31003':
  208. return '深圳医保3档'
  209. break
  210. case 'A31004':
  211. return '二档(少儿)'
  212. break
  213. case 'A31005':
  214. return '学生二档'
  215. break
  216. case 'A31006':
  217. return '大学生二档'
  218. break
  219. case 'A32001':
  220. return '在职公务员'
  221. break
  222. case 'A32002':
  223. return '在职驻深公务员'
  224. break
  225. case 'A39301':
  226. return '家属统筹医疗'
  227. break
  228. case 'A41001':
  229. return '工伤在职'
  230. break
  231. case 'A51001':
  232. return '生育在职'
  233. break
  234. case 'A52001':
  235. return '生育医疗一档'
  236. break
  237. case 'A52002':
  238. return '生育医疗一档'
  239. break
  240. case 'C31001':
  241. return '一档医疗退休'
  242. break
  243. case 'C31002':
  244. return '二档医疗退休'
  245. break
  246. }
  247. },
  248. getValue(item) {
  249. return this.getItemName(item.aka111) + ': ' + item.bka058 + '元'
  250. },
  251. getItemName(number) {
  252. switch (number) {
  253. case '01':
  254. return '床位费'
  255. break
  256. case '02':
  257. return '西药费'
  258. break
  259. case '03':
  260. return '中药费'
  261. break
  262. case '04':
  263. return '中成药费'
  264. break
  265. case '05':
  266. return '中草药费'
  267. break
  268. case '06':
  269. return '检查费'
  270. break
  271. case '07':
  272. return '治疗费'
  273. break
  274. case '08':
  275. return '放射费'
  276. break
  277. case '09':
  278. return '手术费'
  279. break
  280. case '10':
  281. return '化验费'
  282. break
  283. case '11':
  284. return '输血费'
  285. break
  286. case '12':
  287. return '输氧费'
  288. break
  289. case '13':
  290. return '其它费'
  291. break
  292. case '14':
  293. return '麻醉费'
  294. break
  295. case '15':
  296. return '材料费'
  297. break
  298. case '16':
  299. return '特殊检查费'
  300. break
  301. case '17':
  302. return '特殊治疗费'
  303. break
  304. case '18':
  305. return '诊疗费(诊查费)'
  306. break
  307. case '19':
  308. return '护理费'
  309. break
  310. case '20':
  311. return '诊金'
  312. break
  313. case '21':
  314. return '检查费(CT)'
  315. break
  316. case '22':
  317. return '检查费(MRT)'
  318. break
  319. case '23':
  320. return '检查费(其他)'
  321. break
  322. case '24':
  323. return '特需服务费'
  324. break
  325. case '25':
  326. return '杂费'
  327. break
  328. case '26':
  329. return '挂号费'
  330. break
  331. case '99':
  332. return '诊疗费'
  333. break
  334. }
  335. },
  336. getChargePrint(record_date, patient_id, prescription_id) {
  337. var params = {
  338. record_date: record_date,
  339. patient_id: patient_id,
  340. prescription_id: prescription_id
  341. }
  342. console.log('params', params)
  343. getChargePrint(params).then(response => {
  344. if (response.data.state == 1) {
  345. var list = response.data.data.list
  346. console.log('list9999999999', list)
  347. this.list = list
  348. var prescription = response.data.data.prescription
  349. console.log('prescription', prescription)
  350. this.prescription = prescription
  351. var patient = response.data.data.patient
  352. console.log('patient', patient)
  353. this.patient = patient
  354. var histpatient = response.data.data.hisPatient
  355. console.log('hispatient', histpatient)
  356. }
  357. })
  358. },
  359. getTime(value, temp) {
  360. if (value != undefined) {
  361. return uParseTime(value, temp)
  362. }
  363. return ''
  364. }
  365. },
  366. mounted() {
  367. this.org_id = this.$store.getters.xt_user.org_id
  368. },
  369. watch: {
  370. paramsObj: {//深度监听,可监听到对象、数组的变化
  371. handler(val, oldVal) {
  372. this.paramsObj = val
  373. this.patient_id = this.paramsObj.patient_id
  374. var record_date = this.paramsObj.record
  375. this.record_date = record_date
  376. var prescription_id = this.paramsObj.prescription_id
  377. this.prescription_id = prescription_id
  378. },
  379. deep: true
  380. }
  381. }
  382. }
  383. </script>
  384. <style lang="scss" scoped>
  385. .prescription-print {
  386. -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 60px rgba(0, 0, 0, 0.06) inset;
  387. -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.06) inset;
  388. box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.06) inset;
  389. margin-bottom: 10px;
  390. padding: 20px 10px;
  391. }
  392. .printTitle {
  393. font-size: 22px;
  394. text-align: center;
  395. font-weight: bold;
  396. }
  397. .infoMain {
  398. display: flex;
  399. flex-wrap: wrap;
  400. padding: 0 10px;
  401. margin-top: 10px;
  402. }
  403. .infoMain .infoP {
  404. width: 33%;
  405. line-height: 24px;
  406. }
  407. .chargeBox {
  408. border: 1px solid #000;
  409. }
  410. .chargeUl {
  411. display: flex;
  412. justify-content: space-between;
  413. text-align: center;
  414. }
  415. .chargeUl p {
  416. height: 40px;
  417. line-height: 40px;
  418. }
  419. .chargeP {
  420. height: 40px;
  421. line-height: 40px;
  422. }
  423. .moneyBox {
  424. display: flex;
  425. justify-content: space-between;
  426. padding: 0 10px;
  427. background: #eee;
  428. height: 40px;
  429. align-items: center;
  430. border: 1px solid #000;
  431. border-top: none
  432. }
  433. .actionBar {
  434. display: flex;
  435. justify-content: space-between;
  436. line-height: 24px;
  437. padding: 0 10px;
  438. }
  439. .actionBar div {
  440. width: 150px;
  441. }
  442. table {
  443. td {
  444. padding: 10px 5px;
  445. }
  446. }
  447. </style>