hisLongSignPrint.vue 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  1. <template>
  2. <div class="main-contain">
  3. <div class="position">
  4. <bread-crumb :crumbs="crumbs"></bread-crumb>
  5. <el-row style="float:right;">
  6. <el-col :span="24">
  7. <el-button size="small" icon="el-icon-printer" type="primary" @click="printAction">打印</el-button>
  8. </el-col>
  9. </el-row>
  10. </div>
  11. <div class="app-container" style="background-color: white;" v-show="show">
  12. <div id="dialysisTable">
  13. <div v-for="(item, index) in list" :key="index">
  14. <div class="signPrint" style="page-break-after: always;" v-for="(it,i) in item.his_advice_list">
  15. <div>分区/床位号:{{item.device_number.zone.name}}/{{item.device_number.number}}</div>
  16. <div>姓名:{{item.patient.name}}</div>
  17. <div>
  18. <div>医嘱内容:{{ it.advice_name }}
  19. </div>
  20. <div>
  21. 规格:{{getSpecialName(it.drug_id)}}
  22. </div>
  23. <div>单次用量: {{it.single_dose}}{{ it.single_dose_unit }}</div>
  24. <div>执行频率:{{it.execution_frequency}}</div>
  25. <div>给药途径:{{it.delivery_way}}</div>
  26. </div>
  27. <div>打印时间:{{$route.query.selected_date}}</div>
  28. </div>
  29. </div>
  30. </div>
  31. </div>
  32. </div>
  33. </template>
  34. <script>
  35. import BreadCrumb from '@/xt_pages/components/bread-crumb'
  36. import { getDialysisAdviceTemplateList } from '@/api/dialysis'
  37. import { parseTime } from '@/utils'
  38. import print from 'print-js'
  39. const moment = require('moment')
  40. export default {
  41. components:{
  42. BreadCrumb
  43. },
  44. data(){
  45. return{
  46. crumbs: [
  47. { path: false, name: '耗材药品' },
  48. { path: false, name: '打印' }
  49. ],
  50. tableData:[],
  51. start_time:"",
  52. end_time:"",
  53. print_time:moment(new Date()).add('year', 0).format('YYYY-MM-DD'),
  54. zone_selected: 0,
  55. scheduleMap:[],
  56. time:'',
  57. show:true,
  58. showOne:false,
  59. delivery_way:"",
  60. list:[],
  61. execution_frequency:"",
  62. org_id:0,
  63. adviceList:[],
  64. drugList:[],
  65. }
  66. },
  67. methods:{
  68. printAction: function() {
  69. const style = '@media print { .dialysisTable{width:960px;margin: 0 auto;text-align: center;border-collapse: collapse;}.order_title_panl {text-align: center;.main_title {font-size: 18px;line-height: 40px;font-weight: 500;}}.dialysisTable tr{padding: 10px 0;}.dialysisTable th {color: #000;padding: 0;margin: 0;height: 30px;}.dialysisTable tr td {padding: 12px 0;}.subadvice_content {text-align: left;padding-left: 25px !important;padding-right: 5px !important;}.advice_content {text-align: left;padding-left: 5px !important;padding-right: 5px !important;padding: 15px 5px !important;} }'
  70. printJS({
  71. printable: 'dialysisTable',
  72. type: 'html',
  73. documentTitle: ' ',
  74. style: style,
  75. scanStyles: false
  76. })
  77. },
  78. compare (property) {
  79. return function (a, b) {
  80. var value1 = a[property]
  81. var value2 = b[property]
  82. return value1 - value2
  83. }
  84. },
  85. parseTime: function (time, layout) {
  86. if (time == 0) {
  87. return ''
  88. }
  89. return parseTime(time, layout)
  90. },
  91. getName (val) {
  92. for (let i = 0; i < this.admin_user.length; i++) {
  93. if (this.admin_user[i].id == val) {
  94. return this.admin_user[i].name
  95. }
  96. }
  97. },
  98. getAdvice: function(doctor_advice) {
  99. if (doctor_advice.length > 0) {
  100. let name = "";
  101. for (let i = 0; i < doctor_advice.length; i++) {
  102. let prescribing_number = "";
  103. let single_dose = "";
  104. let drug_spec = "";
  105. if (doctor_advice[i].prescribing_number > 0) {
  106. prescribing_number =
  107. doctor_advice[i].prescribing_number +
  108. doctor_advice[i].prescribing_number_unit;
  109. }
  110. if (doctor_advice[i].single_dose > 0) {
  111. single_dose =
  112. " 单次用量 " +
  113. doctor_advice[i].single_dose +
  114. doctor_advice[i].single_dose_unit;
  115. }
  116. if (doctor_advice[i].drug_spec > 0) {
  117. drug_spec =
  118. doctor_advice[i].drug_spec + doctor_advice[i].drug_spec_unit;
  119. }
  120. name =
  121. name +
  122. doctor_advice[i].advice_name +
  123. " " +
  124. drug_spec +
  125. " " +
  126. prescribing_number +
  127. " " +
  128. single_dose +
  129. " " +
  130. doctor_advice[i].delivery_way +
  131. " " +
  132. doctor_advice[i].execution_frequency +
  133. " " +
  134. doctor_advice[i].remark +
  135. "\n";
  136. }
  137. return name;
  138. }else{
  139. return ""
  140. }
  141. },
  142. getSpecialName(drug_id){
  143. var name = ""
  144. for(let i=0;i<this.drugList.length;i++){
  145. if(drug_id == this.drugList[i].id){
  146. name = this.drugList[i].dose + this.drugList[i].dose_unit + "*" + this.drugList[i].min_number + this.drugList[i].min_unit +"/"+this.drugList[i].max_unit
  147. }
  148. }
  149. return name
  150. },
  151. getweekday(date){
  152. var weekArray = new Array("周日", "周一", "周二", "周三", "周四", "周五", "周六");
  153. var week = weekArray[new Date(date).getDay()];//注意此处必须是先new一个Date
  154. return week;
  155. },
  156. getlist(){
  157. var params = {
  158. total:0,
  159. schedule_date:this.$route.query.selected_date,
  160. schedule_type:this.$route.query.schedule_type,
  161. partition_id:this.$route.query.partition_id,
  162. page:this.$route.query.page,
  163. limit:1000,
  164. keywords:"",
  165. keyword:this.$route.query.keywords,
  166. good_type:0,
  167. ids:this.$route.query.ids,
  168. }
  169. getDialysisAdviceTemplateList(params).then(response=>{
  170. if(response.data.state == 1){
  171. var list = response.data.data.list
  172. if(list!=null){
  173. for(let i=0;i<list.length;i++){
  174. list[i].his_advice_list=[]
  175. }
  176. }
  177. this.total = response.data.data.total
  178. var adviceList = response.data.data.adviceList
  179. this.adviceList = adviceList
  180. var tablelist = response.data.data.tablelist
  181. console.log("tablelsit",tablelist)
  182. var hisArr= []
  183. if(tablelist!=null && tablelist.length > 0){
  184. for(let i=0;i<tablelist.length;i++){
  185. if(tablelist[i].his_prescription_template!=null){
  186. if(tablelist[i].his_prescription_template.his_prescription_info!=null){
  187. for(let j=0;j<tablelist[i].his_prescription_template.his_prescription_info.length>0;j++){
  188. if(tablelist[i].his_prescription_template.his_prescription_info[j].his_advice!=null){
  189. for(let z=0;z<tablelist[i].his_prescription_template.his_prescription_info[j].his_advice.length>0;z++){
  190. hisArr.push(tablelist[i].his_prescription_template.his_prescription_info[j].his_advice[z])
  191. }
  192. }
  193. }
  194. }
  195. }
  196. }
  197. }
  198. console.log("hisArr223323323223",hisArr)
  199. if(this.org_id!=10571 && this.org_id!=0){
  200. for(let i=0;i<list.length;i++){
  201. for(let j=0;j<adviceList.length;j++){
  202. if(list[i].patient_id == adviceList[j].patient_id){
  203. list[i].his_advice_list.push(adviceList[j])
  204. }
  205. }
  206. }
  207. }
  208. if(this.org_id ==10571 || this.org_id == 0){
  209. for(let i=0;i<list.length;i++){
  210. for(let j=0;j<hisArr.length;j++){
  211. if(list[i].patient_id == hisArr[j].patient_id){
  212. list[i].his_advice_list.push(hisArr[j])
  213. }
  214. }
  215. }
  216. console.log("寄哪里地方5555",this.$route.query.keywords)
  217. if(this.$route.query.keywords!=""){
  218. console.log("寄哪里地方",this.$route.query.keywords)
  219. for(let i=0;i<list.length;i++){
  220. list[i].new_arr = []
  221. for(let j=0;j<list[i].his_advice_list.length;j++){
  222. console.log("iiiiii",list[i].his_advice_list[j].advice_name.indexOf(this.$route.query.keywords))
  223. if(list[i].his_advice_list[j].advice_name.indexOf(this.$route.query.keywords)!=-1){
  224. list[i].new_arr.push(list[i].his_advice_list[j])
  225. }
  226. }
  227. }
  228. }
  229. if(list!=null && list.length>0){
  230. for(let i=0;i<list.length;i++){
  231. list[i].his_advice_list =[]
  232. list[i].his_advice_list = list[i].new_arr
  233. }
  234. }
  235. }
  236. console.log("list-------------",list)
  237. this.list = list
  238. var druglist = response.data.data.drugList
  239. this.drugList =druglist
  240. this.config = response.data.data.config
  241. }
  242. })
  243. },
  244. getZoneName(patient_id){
  245. var zone_name = ""
  246. for(let i=0;i<this.list.length;i++){
  247. if(patient_id == this.list[i].patient_id){
  248. zone_name = this.list[i].device_number.zone.name
  249. }
  250. }
  251. return zone_name
  252. },
  253. getBedName(patient_id){
  254. var number = ""
  255. for(let i=0;i<this.list.length;i++){
  256. if(patient_id == this.list[i].patient_id){
  257. number = this.list[i].device_number.number
  258. }
  259. }
  260. return number
  261. }
  262. },
  263. computed: {
  264. filtedScheduals: function () {
  265. var scheduleMap = new Object()
  266. if (this.zone_selected == 0) {
  267. for (const key in this.scheduleMap) {
  268. scheduleMap[key] = this.scheduleMap[key]
  269. }
  270. } else {
  271. var zone_name = this.zones[this.zone_selected].text
  272. scheduleMap[zone_name] = this.scheduleMap[zone_name]
  273. }
  274. if (this.schedule_type_selected != 0) {
  275. var _scheduleMap = {}
  276. for (const key in scheduleMap) {
  277. var origin_schedules = scheduleMap[key]
  278. var schedules = []
  279. for (let index = 0; index < origin_schedules.length; index++) {
  280. const schedule = origin_schedules[index]
  281. if (schedule.schedule_type == this.schedule_type_selected) {
  282. schedules.push(schedule)
  283. }
  284. }
  285. if (schedules.length > 0) {
  286. _scheduleMap[key] = schedules
  287. }
  288. }
  289. scheduleMap = _scheduleMap
  290. }
  291. for (var key in scheduleMap) {
  292. let mapArr = scheduleMap[key]
  293. for (let i = 0; i < mapArr.length; i++) {
  294. mapArr[i]['new_advice'] = []
  295. }
  296. }
  297. for (var key in scheduleMap) {
  298. let mapArr = scheduleMap[key]
  299. for (let i = 0; i < mapArr.length; i++) {
  300. var maps = mapArr[i]
  301. var resp_advices = maps.new_doctor_advice
  302. if (resp_advices.length > 0) {
  303. var newGroupObject = function () {
  304. return Object.assign(
  305. {},
  306. {
  307. group_no: 0,
  308. advices: []
  309. }
  310. )
  311. }
  312. var initGroupBlock = function (group, advice) {
  313. group.group_no = advice.groupno
  314. }
  315. var advice_groups = []
  316. var group = newGroupObject()
  317. for (let index = 0; index < resp_advices.length; index++) {
  318. const advice = resp_advices[index]
  319. if (advice.groupno == 0) {
  320. // 老版本的医嘱
  321. if (advice.parent_id > 0) {
  322. if (advice_groups.length > 0) {
  323. var parent_group = advice_groups[advice_groups.length - 1]
  324. if (parent_group.advices.length > 0) {
  325. if (parent_group.advices[0].id == advice.parent_id) {
  326. parent_group.advices.push(advice)
  327. }
  328. }
  329. }
  330. continue
  331. } else {
  332. if (group.group_no > 0) {
  333. advice_groups.push(group)
  334. group = newGroupObject()
  335. }
  336. initGroupBlock(group, advice)
  337. group.advices.push(advice)
  338. advice_groups.push(group)
  339. group = newGroupObject()
  340. continue
  341. }
  342. } else {
  343. if (group.group_no > 0 && group.group_no != advice.groupno) {
  344. advice_groups.push(group)
  345. group = newGroupObject()
  346. }
  347. if (group.group_no == 0) {
  348. initGroupBlock(group, advice)
  349. }
  350. if (group.group_no == advice.groupno) {
  351. group.advices.push(advice)
  352. }
  353. }
  354. }
  355. if (group.group_no > 0) {
  356. // 上述的算法会导致最后一组没有加到advice_groups,这里要手动加
  357. advice_groups.push(group)
  358. }
  359. advice_groups = advice_groups
  360. } else {
  361. advice_groups = []
  362. }
  363. maps.new_advice = advice_groups
  364. }
  365. }
  366. console.log("222222",scheduleMap)
  367. return scheduleMap
  368. },
  369. },
  370. created(){
  371. var time = this.$route.query.time
  372. var selected_date = this.$route.query.selected_date
  373. var schedule_type = this.$route.query.schedule_type
  374. var partition_id = this.$route.query.partition_id
  375. this.org_id = this.$store.getters.xt_user.org.id
  376. this.getlist()
  377. }
  378. }
  379. </script>
  380. <style rel="stylesheet/scss" lang="scss" scoped>
  381. .signPrint{
  382. -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 60px rgba(0, 0, 0, 0.06) inset;
  383. -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.06) inset;
  384. box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.06) inset;
  385. margin-bottom: 20px;
  386. padding: 20px 10px;
  387. }
  388. .dialysisTable{
  389. width:960px;
  390. margin: 0 auto;
  391. text-align: center;
  392. border-collapse: collapse;
  393. }
  394. .order_title_panl {
  395. text-align: center;
  396. .main_title {
  397. font-size: 18px;
  398. line-height: 40px;
  399. font-weight: 500;
  400. }
  401. }
  402. .dialysisTable tr{
  403. padding: 10px 0;
  404. }
  405. .dialysisTable th {
  406. color: #000;
  407. padding: 0;
  408. margin: 0;
  409. height: 30px;
  410. }
  411. .dialysisTable tr td {
  412. padding: 12px 0;
  413. }
  414. .subadvice_content {
  415. text-align: left;
  416. padding-left: 25px !important;
  417. padding-right: 5px !important;
  418. }
  419. .advice_content {
  420. text-align: left;
  421. padding-left: 5px !important;
  422. padding-right: 5px !important;
  423. padding: 15px 5px !important;
  424. }
  425. </style>