allListPrint.vue 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681
  1. <template>
  2. <div>
  3. <template>
  4. <el-button
  5. style="position:fixed;right:25px;z-index:999"
  6. size="small"
  7. icon="el-icon-printer"
  8. @click="printThisPage"
  9. type="primary"
  10. >打印
  11. </el-button
  12. >
  13. </template>
  14. <div class='dialysisPage' style="padding-top:40px;">
  15. <printOne v-if="org_id != 10215 && org_id !=9671&&org_id !=9675&& org_id !=10515" :list="list" :patient="patient" :order="order" :admin="admin" :hospital="his_hospital"></printOne>
  16. <summary-print v-if="org_id == 10215|| org_id ==9671 ||org_id ==9675" :list="list" :patient="patient" :order="order" :admin="admin" :hospital="his_hospital"></summary-print>
  17. <printTwo v-if="org_id==10515 || org_id==0" :list="list" :patient="patient" :order="order" :admin="admin" :hospital="his_hospital"></printTwo>
  18. <!-- <list-print-two :list="list" :patient="patient" :order="order" :admin="admin" :hospital="his_hospital"></list-print-two>-->
  19. </div>
  20. </div>
  21. </template>
  22. <script>
  23. import { getHisOrderDetailCollect } from '@/api/his/his'
  24. import { uParseTime } from '@/utils/tools'
  25. import printOne from './allListTemplate/printOne'
  26. import ListPrintTwo from './listTemplate/listPrintTwo'
  27. import SummaryPrint from './allListTemplate/summaryPrint'
  28. import printTwo from './allListTemplate/printTwo'
  29. export default {
  30. name: 'allListPrint',
  31. components: {
  32. SummaryPrint,
  33. ListPrintTwo,
  34. printOne,
  35. printTwo
  36. },
  37. props: {
  38. paramsObj: Object
  39. },
  40. data() {
  41. return {
  42. list: [],
  43. patient: {},
  44. order: {},
  45. admin: {},
  46. his_hospital:{},
  47. org_id:0,
  48. }
  49. },
  50. created() {
  51. this.getInfo(this.paramsObj.id)
  52. this.org_id = this.$store.getters.xt_user.org_id
  53. },
  54. methods: {
  55. getTimes(time) {
  56. return uParseTime(time, '{y}-{m}-{d} {h}:{i}')
  57. },
  58. getInfo(order_id) {
  59. let params = {
  60. id: order_id
  61. }
  62. getHisOrderDetailCollect(params).then(response => {
  63. if (response.data.state == 0) {
  64. this.$message.error(response.data.msg)
  65. return false
  66. } else {
  67. this.order = response.data.data.order
  68. this.order['bedCostTotal'] = response.data.data.bedCostTotal
  69. this.order['operationCostTotal'] = response.data.data.operationCostTotal
  70. this.order['otherCostTotal'] = response.data.data.otherCostTotal
  71. this.order['materialCostTotal'] = response.data.data.materialCostTotal
  72. this.order['westernMedicineCostTotal'] = response.data.data.westernMedicineCostTotal
  73. this.order['chineseTraditionalMedicineCostTotal'] = response.data.data.chineseTraditionalMedicineCostTotal
  74. this.order['checkCostTotal'] = response.data.data.checkCostTotal
  75. this.order['zhenChaCostTotal'] = response.data.data.zhenChaCostTotal
  76. this.order['laboratoryCostTotal'] = response.data.data.laboratoryCostTotal
  77. this.order['treatCostTotal'] = response.data.data.treatCostTotal
  78. console.log("~~~~~",response.data.data)
  79. this.patient = response.data.data.patient
  80. this.admin = response.data.data.admin_info
  81. this.his_hospital = response.data.data.his_hospital
  82. var order_info = response.data.data.order_info
  83. if(this.$store.getters.xt_user.org_id == 10215){
  84. //获取所有项目类型进行去重
  85. let med_chrgitm_types = []
  86. for (let i = 0; i < order_info.length; i++) {
  87. med_chrgitm_types.push(order_info[i].med_chrgitm_type)
  88. }
  89. const obj = {}
  90. med_chrgitm_types = med_chrgitm_types.reduce((cur, next) => {
  91. obj[next] ? '' : obj[next] = true && cur.push(next)
  92. return cur
  93. }, []) // 设置cur默认类型为数组,并且初始值为空的数组
  94. let tempOrderInfo = []
  95. for (let i = 0; i < med_chrgitm_types.length; i++) {
  96. let obj = {
  97. total: 0,
  98. details: [],
  99. is_total:0,
  100. }
  101. let tempDetails = []
  102. for (let b = 0; b < order_info.length; b++) {
  103. if (med_chrgitm_types[i] == order_info[b].med_chrgitm_type) {
  104. tempDetails.push(order_info[b])
  105. }
  106. }
  107. // console.log("~~~~~~~~")
  108. // console.log(tempDetails)
  109. // console.log("1111="+tempDetails)
  110. obj.details = this.setNewData(tempDetails)
  111. // console.log("22222="+obj.details)
  112. this.list = this.list.concat(obj.details)
  113. console.log("222233332=",this.list)
  114. }
  115. let newobj = {}
  116. newobj['total'] = this.order.medfee_sumamt
  117. newobj['is_total'] = 1
  118. this.list.push(newobj)
  119. }else{
  120. //获取所有项目类型进行去重
  121. let med_chrgitm_types = []
  122. let chrgitm_lvs = []
  123. let advice = []
  124. let good = []
  125. let project = []
  126. for (let i = 0; i < order_info.length; i++) {
  127. if(order_info[i].advice.advice_name !=''){
  128. const adv={
  129. advice_name:order_info[i].advice.advice_name,
  130. // good_name:order_info[i].project.good_info.good_name,
  131. // project_name:order_info[i].project.project.project_name,
  132. chrgitm_lv:order_info[i].chrgitm_lv,
  133. }
  134. advice.push(adv)
  135. }
  136. if(order_info[i].project.good_info.good_name !=''){
  137. const god={
  138. // advice_name:order_info[i].advice.advice_name,
  139. good_name:order_info[i].project.good_info.good_name,
  140. // project_name:order_info[i].project.project.project_name,
  141. chrgitm_lv:order_info[i].chrgitm_lv,
  142. }
  143. good.push(god)
  144. }
  145. if(order_info[i].project.project.project_name !=''){
  146. const pro={
  147. // advice_name:order_info[i].advice.advice_name,
  148. // good_name:order_info[i].project.good_info.good_name,
  149. project_name:order_info[i].project.project.project_name,
  150. chrgitm_lv:order_info[i].chrgitm_lv,
  151. }
  152. project.push(pro)
  153. }
  154. // chrgitm_lvs.push(arr)
  155. // chrgitm_lvs.push(order_info[i].chrgitm_lv)
  156. med_chrgitm_types.push(order_info[i].med_chrgitm_type)
  157. }
  158. const obj = {}
  159. med_chrgitm_types = med_chrgitm_types.reduce((cur, next) => {
  160. obj[next] ? '' : obj[next] = true && cur.push(next)
  161. return cur
  162. }, []) // 设置cur默认类型为数组,并且初始值为空的数组
  163. let tempOrderInfo = []
  164. for (let i = 0; i < med_chrgitm_types.length; i++) {
  165. let obj = {
  166. total: 0,
  167. details: []
  168. }
  169. let tempDetails = []
  170. for (let b = 0; b < order_info.length; b++) {
  171. if (med_chrgitm_types[i] == order_info[b].med_chrgitm_type) {
  172. tempDetails.push(order_info[b])
  173. }
  174. }
  175. obj.details = this.setNewData(tempDetails)
  176. obj.total = this.getTotal(obj.details)
  177. obj.details.push({
  178. total: obj.total,
  179. is_total: 1,
  180. })
  181. // console.log("23323223323232332323322332",obj.details)
  182. this.list = this.list.concat(obj.details)
  183. // console.log("23323223323232332323322332",this.list)
  184. }
  185. for(let i=0;i<advice.length;i++){
  186. for(let j=i+1;j<advice.length;j++){
  187. if(advice[i].advice_name == advice[j].advice_name){
  188. advice.splice(j,1)
  189. j--
  190. }
  191. }
  192. }
  193. for(let i=0;i<good.length;i++){
  194. for(let j=i+1;j<good.length;j++){
  195. if(good[i].good_name == good[j].good_name){
  196. good.splice(j,1)
  197. j--
  198. }
  199. }
  200. }
  201. for(let i=0;i<project.length;i++){
  202. for(let j=i+1;j<project.length;j++){
  203. if(project[i].project_name == project[j].project_name){
  204. project.splice(j,1)
  205. j--
  206. }
  207. }
  208. }
  209. chrgitm_lvs = [...advice,...good,...project]
  210. console.log('yyyyyyyyyyyy',chrgitm_lvs);
  211. for(let i in this.list){
  212. for(let j in chrgitm_lvs){
  213. if(this.list[i].is_total ==2){
  214. if(this.list[i].name == chrgitm_lvs[j].advice_name ||
  215. this.list[i].name == chrgitm_lvs[j].good_name ||
  216. this.list[i].name == chrgitm_lvs[j].project_name
  217. ){
  218. this.list[i]['chrgitm_lv'] = chrgitm_lvs[j].chrgitm_lv
  219. }
  220. }
  221. }
  222. }
  223. console.log('tttttttttttt',this.list);
  224. }
  225. }
  226. })
  227. },
  228. getquchong(arr){
  229. for(let i=0;i<arr.length;i++){
  230. for(let j=i+1;j<arr.length;j++){
  231. if(arr[i] == arr[j]){
  232. arr.splice(j,1)
  233. j--
  234. }
  235. }
  236. }
  237. return arr
  238. },
  239. getTotal:function(items){
  240. let total = 0
  241. for(let i = 0; i < items.length; i++){
  242. total = Number(total) + Number((parseFloat(items[i].count) * parseFloat(items[i].price)).toFixed(2))
  243. }
  244. return total.toFixed(2)
  245. },setNewData(details) {
  246. let drug_ids = []
  247. let project_ids = []
  248. for (let i = 0; i < details.length; i++) {
  249. if (details[i].advice && details[i].advice.id > 0 && details[i].advice.prescription && details[i].advice.prescription.type == 1) { //药品
  250. let obj = {
  251. id: details[i].advice.drug_id,
  252. price: details[i].advice.price
  253. }
  254. drug_ids.push(obj)
  255. } else if (details[i].project && details[i].project.id > 0 && details[i].project.prescription && details[i].project.prescription.type == 2) { //项目
  256. let obj = {
  257. id: details[i].project.project_id,
  258. price: details[i].project.price
  259. }
  260. project_ids.push(obj)
  261. }
  262. }
  263. //
  264. // console.log('old ids')
  265. // console.log(drug_ids)
  266. // console.log(project_ids)
  267. // console.log('old ids')
  268. let new_drug_ids = this.unique(drug_ids)
  269. let new_project_ids = this.unique(project_ids)
  270. let list = []
  271. // console.log('ids')
  272. // console.log(new_drug_ids)
  273. // console.log(new_project_ids)
  274. // console.log('ids')
  275. if (new_drug_ids.length > 0 && new_project_ids.length == 0) {
  276. for (let i = 0; i < new_drug_ids.length; i++) {
  277. let obj = {}
  278. let count = 0
  279. for (let a = 0; a < details.length; a++) {
  280. if (new_drug_ids[i].id == details[a].advice.drug_id && new_drug_ids[i].price == details[a].advice.price) {
  281. obj['name'] = details[a].advice.advice_name
  282. // obj['spec'] = details[a].advice.drug.drug_spec
  283. obj['spec'] = details[a].advice.drug.dose + details[a].advice.drug.dose_unit+"*" + details[a].advice.drug.min_number + details[a].advice.drug.min_unit+"/"+ details[a].advice.drug.max_unit
  284. obj['unit'] = details[a].advice.prescribing_number_unit
  285. obj['medicine_insurance_kind'] = this.getMedicineInsuranceType(details[a].chrgitm_lv)
  286. obj['med_chrgitm_type'] = this.getType(details[a].med_chrgitm_type)
  287. obj['price'] = parseFloat(details[a].pric)
  288. obj['is_total'] = 2
  289. count = count + details[a].cnt
  290. }
  291. }
  292. obj['count'] = count
  293. list.push(obj)
  294. }
  295. }
  296. if (new_drug_ids.length == 0 && new_project_ids.length > 0) {
  297. for (let i = 0; i < new_project_ids.length; i++) {
  298. let obj = {}
  299. let count = 0
  300. for (let a = 0; a < details.length; a++) {
  301. if (new_project_ids[i].id == details[a].project.project_id && new_project_ids[i].price == details[a].project.price) {
  302. if( details[a].project.type == 2){
  303. obj['name'] = details[a].project.project.project_name
  304. obj['spec'] = ''
  305. obj['unit'] = details[a].project.project.unit
  306. }else if(details[a].project.type == 3){
  307. obj['name'] = details[a].project.good_info.good_name
  308. obj['spec'] = ''
  309. obj['unit'] = details[a].project.good_info.packing_unit
  310. }
  311. obj['medicine_insurance_kind'] = this.getMedicineInsuranceType(details[a].chrgitm_lv)
  312. obj['med_chrgitm_type'] = this.getType(details[a].med_chrgitm_type)
  313. obj['price'] = parseFloat(details[a].pric)
  314. obj['is_total'] = 2
  315. count = count + details[a].cnt
  316. }
  317. }
  318. obj['count'] = count
  319. list.push(obj)
  320. }
  321. }
  322. return list
  323. }, getGoodUnit(id) {
  324. var goodUnit = this.$store.getters.good_unit
  325. for (let i = 0; i < goodUnit.length; i++) {
  326. if (goodUnit[i].id == id) {
  327. return goodUnit[i].name
  328. }
  329. }
  330. },
  331. unique(array) {
  332. // res用来存储结果
  333. var res = []
  334. for (var i = 0, arrayLen = array.length; i < arrayLen; i++) {
  335. for (var j = 0, resLen = res.length; j < resLen; j++) {
  336. if (array[i].id === res[j].id && array[i].price === res[j].price) {
  337. break
  338. }
  339. }
  340. // 如果array[i]是唯一的,那么执行完循环,j等于resLen
  341. if (j === resLen) {
  342. res.push(array[i])
  343. }
  344. }
  345. return res
  346. },
  347. getType(med_chrgitm_type){
  348. switch (med_chrgitm_type) {
  349. case '01':
  350. return '床位费'
  351. break
  352. case '02':
  353. return '诊察费'
  354. break
  355. case '03':
  356. return '检查费'
  357. break
  358. case '04':
  359. return '化验费'
  360. break
  361. case '05':
  362. return '治疗费'
  363. break
  364. case '06':
  365. return '手术费'
  366. break
  367. case '07':
  368. return '护理费'
  369. break
  370. case '08':
  371. return '材料费'
  372. break
  373. case '09':
  374. return '西药费'
  375. break
  376. case '10':
  377. return '中药饮片费'
  378. break
  379. case '11':
  380. return '中成药费'
  381. break
  382. case '12':
  383. return '一般诊疗费'
  384. break
  385. case '13':
  386. return '挂号费'
  387. break
  388. case '14':
  389. return '其他费'
  390. break
  391. }
  392. },
  393. getMedicineInsuranceType(type) {
  394. switch (type) {
  395. case "01":
  396. return '甲类'
  397. break
  398. case "02":
  399. return '乙类'
  400. break
  401. case "03":
  402. return '自费'
  403. break
  404. }
  405. },
  406. printThisPage() {
  407. const style =
  408. '@media print {.allListTitle{font-size: 24px;text-align: center;font-weight: bold;margin-bottom: 10px;}.allListInfo{display: flex;font-size: 16px;justify-content: space-between;margin: 10px 0;} .allListTable{width: 100%;text-align: center;border-collapse: collapse;line-height: 20px;font-size: 14px;border-color: #000;text-align:left;}.allListTable tr td {padding: 0 5px;}.tableBottom{font-size: 16px;display: flex;margin-top: 20px;}.tableBottomOne{margin-right: 40px;}}'
  409. const style1 =
  410. '@media print {.allListTitle{font-size: 24px;text-align: center;font-weight: bold;margin-bottom: 10px;}.allListInfo{display: flex;font-size: 16px;justify-content: space-between;margin: 10px 0;} .allListTable{width: 100%;text-align: center;border-collapse: collapse;line-height: 20px;font-size: 14px;border-color: #000;text-align:left;} .allListTable tr td {padding: 0 5px;} .allListTable .allListTable_1{border: none;width: 100%;text-align: center;border-collapse: collapse;line-height: 20px;font-size: 14px;border-color: #000;text-align:left;} .allListTable_1 tr{page-break-inside:avoid;} .allListTable_1 tr td {padding: 0 5px;border: 1px solid #000;} .tableBottom{font-size: 16px;display: flex;margin-top: 20px;}.tableBottomOne{margin-right: 40px;}}'
  411. if(this.org_id == 10215 || this.org_id == 0 ||this.org_id == 9675){
  412. printJS({
  413. printable: 'allList-print',
  414. type: 'html',
  415. style: style1,
  416. scanStyles: false
  417. })
  418. }else{
  419. printJS({
  420. printable: 'allList-print',
  421. type: 'html',
  422. style: style,
  423. scanStyles: false
  424. })
  425. }
  426. // if (this.org_template_info.template_id == 1) {
  427. // printJS({
  428. // printable: "dialysis-print-box",
  429. // type: "html",
  430. // style: style,
  431. // scanStyles: false
  432. // });
  433. // }
  434. }
  435. }
  436. }
  437. </script>
  438. <style>
  439. .dialysis-print-order {
  440. width: 960px;
  441. margin: 0 auto;
  442. }
  443. .dialysis-print-order .order-yy-name {
  444. margin: auto;
  445. text-align: center;
  446. font-size: 20px;
  447. letter-spacing: 5px;
  448. }
  449. .dialysis-print-order .order-title {
  450. margin: auto;
  451. font-weight: 600;
  452. text-align: center;
  453. font-size: 22px;
  454. padding: 10px;
  455. }
  456. .dialysis-print-order .table-box {
  457. width: 100%;
  458. line-height: 23px;
  459. font-size: 14px;
  460. }
  461. .dialysis-print-order .print-table {
  462. width: 100%;
  463. text-align: center;
  464. border-collapse: collapse;
  465. line-height: 40px;
  466. font-size: 14px;
  467. border-color: #000;
  468. }
  469. .dialysis-print-order .print-table-no {
  470. width: 100%;
  471. text-align: center;
  472. border-collapse: collapse;
  473. font-size: 14px;
  474. }
  475. .dialysis-print-order .under-line {
  476. border-bottom: 1px solid #999;
  477. width: 95%;
  478. text-align: center;
  479. margin-left: 2px;
  480. }
  481. .dialysis-print-order .title-box {
  482. text-align: center;
  483. font-size: 16px;
  484. }
  485. .dialysis-print-order .radio-lebel-box {
  486. font-weight: 400;
  487. cursor: pointer;
  488. }
  489. .dialysis-print-order .radio-no {
  490. opacity: 0;
  491. outline: none;
  492. position: absolute;
  493. margin: 0;
  494. width: 0;
  495. height: 0;
  496. z-index: -1;
  497. }
  498. .dialysis-print-order .radio-inner {
  499. white-space: nowrap;
  500. cursor: pointer;
  501. outline: none;
  502. display: inline-block;
  503. line-height: 1;
  504. position: relative;
  505. vertical-align: middle;
  506. }
  507. .dialysis-print-order .radio-fang {
  508. display: inline-block;
  509. position: relative;
  510. border: 1px solid #000;
  511. box-sizing: border-box;
  512. width: 14px;
  513. height: 14px;
  514. background-color: #fff;
  515. z-index: 1;
  516. transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),
  517. background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);
  518. }
  519. .dialysis-print-order .is-checked-radio::after {
  520. content: "√";
  521. font-size: 15px;
  522. }
  523. .dialysis-print-order .print-table-no tr td {
  524. padding: 8px 5px;
  525. line-height: 25px;
  526. }
  527. .dialysis-print-order .print-table tr td {
  528. padding: 1px 1px;
  529. /*line-height: 25px;*/
  530. }
  531. .es-img {
  532. height: 30px;
  533. }
  534. .advice-name {
  535. text-align: left;
  536. }
  537. .advice-children {
  538. display: flex;
  539. }
  540. .title-box-pro {
  541. border: 0 #fff;
  542. line-height: 25px;
  543. height: 25px;
  544. text-align: left;
  545. padding-left: 10px !important;
  546. }
  547. .title-box-pro-tr {
  548. border: 0 #fff;
  549. }
  550. .text-align-left {
  551. text-align: left !important;
  552. padding-left: 10px !important;
  553. font-size: 14px !important;
  554. line-height: 25px;
  555. }
  556. .print-table-tr-new td {
  557. line-height: 20px !important;
  558. }
  559. .border-top-solid {
  560. border: solid 1px #000;
  561. }
  562. .print-template-two tr {
  563. line-height: 30px;
  564. }
  565. .table-box1 {
  566. border: 1px solid #000;
  567. width: 100%;
  568. line-height: 30px;
  569. font-size: 14px;
  570. border-collapse: collapse;
  571. }
  572. .table-box1 tr {
  573. border-bottom: 1px solid #000;
  574. }
  575. </style>
  576. <style lang="scss">
  577. .newContainer {
  578. .dialysisPage::-webkit-scrollbar {
  579. height: 15px;
  580. }
  581. .el-date-editor {
  582. .el-input__inner {
  583. padding-right: 0px;
  584. }
  585. }
  586. .el-table td, .el-table th {
  587. text-align: center;
  588. }
  589. }
  590. .newContainer::-webkit-scrollbar {
  591. height: 15px !important;
  592. }
  593. </style>