Preview.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  1. <template>
  2. <div class="wrapper">
  3. <div class="preview previewper">
  4. <div class="content">
  5. <div class="tmpDiv"></div>
  6. <div class="personMsg personMsg1">
  7. <p class="baseMsg">{{pathInfo.patientName}}&nbsp;&nbsp;&nbsp;&nbsp;{{pathInfo.patientSex}}&nbsp;&nbsp;&nbsp;&nbsp;{{pathInfo.patientAge}}岁</p>
  8. <table>
  9. <tr>
  10. <td><span>挂号科室:</span>{{pathInfo.selfDeptName}}</td>
  11. </tr>
  12. <tr v-if="pathInfo.recordId">
  13. <td><span>排队号:</span>{{pathInfo.recordId}}</td>
  14. </tr>
  15. <tr v-if="pathInfo.doctorName">
  16. <td><span>预约医生:</span>{{pathInfo.doctorName}}</td>
  17. </tr>
  18. <tr v-if="time">
  19. <td><span>就诊时间:</span>{{time}}</td>
  20. </tr>
  21. </table>
  22. <!-- <div class="line"></div>
  23. <p>采集时间:{{pathInfo.systemTime}}</p> -->
  24. </div>
  25. <div class="personMsg personMsg2">
  26. <ul class="previewParts">
  27. <li>
  28. <h4><i></i>主诉:</h4>
  29. <p>
  30. <span v-for="(item,idx) in symptom.choose" :key="item.name+idx" v-if="item.idx == 1">
  31. {{item.specialP?(item.description||item.name)+item.specialP:(item.description||item.name)}}
  32. </span>
  33. </p>
  34. </li>
  35. <li>
  36. <h4><i></i> 现病史:</h4>
  37. <p>
  38. <template v-for="(value,index) in checkText">
  39. <!-- 患者于时间单位前诱因出现症状,其余题目的内容; -->
  40. <span :key="index" v-if="index==0">{{(value.idx==1?'':'伴')+value.textP}}{{checkText.length==1?'':','}}</span>
  41. <span :key="index" v-if="index==1">{{(checkText[0].idx == 1?'伴':'')+value.text}}{{checkText.length==2?'':'、'}}</span>
  42. <span :key="index" v-if="index>1">{{value.text}}{{index == checkText.length-1?'':'、'}}</span>
  43. </template>
  44. </p>
  45. <p><span>{{getDetailText(diagnose.text,false).view}}</span></p>
  46. </li>
  47. <li v-if="tabType[moduleCP['other']]==1">
  48. <h4><i></i> 其他史:</h4>
  49. <p>
  50. <span>{{getDetailText(others.text,false).view}}</span>
  51. </p>
  52. </li>
  53. <li v-if="tabType[moduleCP['suplement']]==1">
  54. <h4><i></i> 补充内容:</h4>
  55. <p>{{addContent.txt}}</p>
  56. </li>
  57. <li v-if="JSON.stringify(diagnose.imgSrc) !='{}'" class="imgLis">
  58. <h4 class="imgTitle"><i></i> 最近一次治疗报告:</h4>
  59. <div v-for="(value,key,idx) in diagnose.imgSrc" class="imgView">
  60. <img :src="value" alt="">
  61. </div>
  62. </li>
  63. </ul>
  64. </div>
  65. <div class="doctorData" @click="handleClick(true)">医生端数据展示</div>
  66. </div>
  67. </div>
  68. <div class="foot">
  69. <span
  70. class="back"
  71. @click="back"
  72. >上一步</span>
  73. <span
  74. class="next"
  75. @click="saveAllImage"
  76. >提 交</span>
  77. </div>
  78. <Submit
  79. v-if="submit"
  80. :showType="showType"
  81. @showSubmit="showSubmit"
  82. ></Submit>
  83. <Loading v-if="this.$store.state.loadingShow"></Loading>
  84. <div class="personMsgDoc" v-show="showDoc">
  85. <div class="personMsgDocModal" @click="handleClick(false)"></div>
  86. <div class="personMsgDocDetail">
  87. <img class="close" src="../images/small-close.png" alt="" @click="handleClick(false)">
  88. <div class="personMsg personMsg2 modal">
  89. <ul class="previewParts">
  90. <li>
  91. <h4><i></i> 主诉:</h4>
  92. <p>
  93. <span v-for="(item,idx) in symptom.choose" :key="item.name+idx" v-if="item.idx == 1">
  94. {{item.special?item.name+item.special:item.name}}
  95. </span>
  96. </p>
  97. </li>
  98. <li>
  99. <h4><i></i> 现病史:</h4>
  100. <p>
  101. <template v-for="(value,index) in checkText">
  102. <!-- 患者于时间单位前诱因出现症状,其余题目的内容; -->
  103. <span :key="index" v-if="index==0">{{(value.idx==1?'':'伴')+value.text}}{{checkText.length==1?'':','}}</span>
  104. <span :key="index" v-if="index==1">{{(checkText[0].idx == 1?'伴':'')+value.textP}}{{checkText.length==2?'':'、'}}</span>
  105. <span :key="index" v-if="index>1">{{value.textP}}{{index == checkText.length-1?'':'、'}}</span>
  106. </template>
  107. </p>
  108. <p><span>{{getDetailText(diagnose.text,false).content}}</span></p>
  109. </li>
  110. <li v-if="tabType[moduleCP['other']]==1">
  111. <h4><i></i> 其他史:</h4>
  112. <p>
  113. <span>{{getDetailText(others.text,false).content}}</span>
  114. </p>
  115. </li>
  116. <li v-if="tabType[moduleCP['suplement']]==1">
  117. <h4><i></i> 补充内容:</h4>
  118. <p>{{addContent.txtDoc}}</p>
  119. </li>
  120. <li v-if="JSON.stringify(diagnose.imgSrc) !='{}'" class="imgLis">
  121. <h4 class="imgTitle"><i></i> 最近一次治疗报告:</h4>
  122. <div v-for="(value,key,idx) in diagnose.imgSrc" class="imgView">
  123. <img :src="value" alt="">
  124. </div>
  125. </li>
  126. </ul>
  127. </div>
  128. </div>
  129. </div>
  130. </div>
  131. </template>
  132. <script>
  133. import api from '@utils/api.js';
  134. import Submit from '../common/Submit';
  135. import Loading from '../common/Loading';
  136. import BScroll from 'better-scroll';
  137. import {moduleCP,trimDots,setScroll,dateParser} from '@utils/tools.js'
  138. import { mapState } from 'vuex';
  139. export default {
  140. data() {
  141. const { pathInfo, originDatas } = this.$store.state;
  142. let sysConfig = this.$store.state.sysConfig;
  143. let symptomDate = this.$store.state.symptom;
  144. let diagnoseDate = this.$store.state.diagnose;
  145. let othersDate = this.$store.state.others;
  146. let addContentDate = this.$store.state.addContent;
  147. return {
  148. msg: '预览',
  149. pathInfo: pathInfo,
  150. symptom: symptomDate,
  151. diagnose: diagnoseDate,
  152. others: othersDate,
  153. addContent: addContentDate,
  154. checkText: symptomDate.text, //症状情况文字
  155. submit: false,
  156. showType: 'fail',
  157. imgList:[],
  158. tmpNum:0,
  159. moduleCP:moduleCP,
  160. showDoc:false,
  161. trimDots:trimDots,
  162. time:''
  163. }
  164. },
  165. computed:{
  166. ...mapState({
  167. tabType: state => state.tabType,
  168. config: state => state.sysConfig,
  169. })
  170. },
  171. created(){
  172. this.getTime();
  173. if (this.config.length == 0) {//登录进去返回到列表页,扫码返回到开始页
  174. let scan = localStorage.getItem('scan');
  175. let params = JSON.parse(localStorage.getItem('infoParam'));
  176. let param = JSON.parse(localStorage.getItem('loginParam'));
  177. let data = JSON.parse(localStorage.getItem('loginData'));
  178. if(!scan){
  179. if(data.length>1){
  180. this.$router.push({path:'/department'});
  181. }else{
  182. this.$router.push({path:'/home',query:param});
  183. }
  184. }else{
  185. this.$router.push({path:'/home',query:Object.assign({}, params,{scan:true})});
  186. }
  187. }
  188. },
  189. mounted() {
  190. let scroll = setScroll(BScroll,true,'.previewper')
  191. this.scroll = scroll
  192. },
  193. methods: {
  194. getTime() {
  195. let scan = localStorage.getItem('scan');
  196. let params = JSON.parse(localStorage.getItem('infoParam'));
  197. let param = JSON.parse(localStorage.getItem('loginParam'));
  198. let tmpArr = localStorage.getItem('recordTime')
  199. let tmpTime = tmpArr&&Array.isArray(JSON.parse(tmpArr))?JSON.parse(tmpArr):[];
  200. if(!scan){
  201. this.time = dateParser(param.time)
  202. }else{
  203. this.time = dateParser(params.recordTime)
  204. }
  205. },
  206. handleClick(flg){
  207. this.showDoc = flg
  208. },
  209. showSubmit(flg) {
  210. this.submit = flg
  211. },
  212. back() {
  213. this.$router.go(-1);
  214. },
  215. saveAllImage() {
  216. let formData = new FormData();
  217. let imgList = this.diagnose.imgFile;
  218. // let tmpNum = this.tmpNum;
  219. // var dateBegin = new Date();//获取当前时间
  220. if (imgList.length > 0) {//有图片先上传图片
  221. this.$store.commit('handleToggleShow', true);
  222. for (let i = 0; i < imgList.length; i++) {
  223. let pageFile = imgList[i].file
  224. formData.append('upfiles', imgList[i].file);
  225. // formData.append('upfile', imgList[i].file);
  226. formData.append('type', imgList[i].type);
  227. // api.uploadImageThum(formData).then((res)=>{
  228. // console.log(res)
  229. // let result = res.data;
  230. // if (result.code == 0) {
  231. // this.tmpNum = ++tmpNum
  232. // if(this.tmpNum == imgList.length){
  233. // var dateEnd = new Date();//获取当前时间
  234. // var dateDiff = dateEnd.getTime() - dateBegin.getTime();//时间差的毫秒数
  235. // var dayDiff = dateDiff / 1000;//计算出秒数
  236. // alert('图片上传完成:'+dayDiff+'s')
  237. // }
  238. // }
  239. // })
  240. }
  241. api.uploadImageThums(formData).then((res) => {//获取图片
  242. let data = res.data;
  243. if (data.code == 0) {//图片提交成功再保存数据
  244. let reportList = [];
  245. let result = data.data;
  246. for(let i = 0;i < result.length;i++){
  247. let obg = {}
  248. obg.originalImage = result[i].url+'?width='+imgList[i].imgWidth+'&height='+imgList[i].imgHeight
  249. obg.originalName = result[i].original
  250. obg.orderNum = i+1
  251. obg.type = result[i].type
  252. reportList.push(obg)
  253. }
  254. this.imgList = reportList
  255. // var dateEnd = new Date();//获取当前时间
  256. // var dateDiff = dateEnd.getTime() - dateBegin.getTime();//时间差的毫秒数
  257. // var dayDiff = dateDiff / 1000;//计算出秒数
  258. // alert('图片上传完成:'+dayDiff+'s')
  259. this.saveAllDate()
  260. } else {//提交失败提示
  261. this.defaultWaring(res)
  262. }
  263. }).catch((err)=>{
  264. this.defaultWaring(err)
  265. })
  266. return;
  267. } else {//没有图片直接保存数据
  268. this.$store.commit('handleToggleShow', true);
  269. this.saveAllDate();
  270. }
  271. },
  272. getDetailText(textArr,flg){
  273. let msg = "",obg={},msgP = "";
  274. if(flg == 1){
  275. // for(let k in textArr){
  276. let item = textArr[0];
  277. if(item.special){
  278. msg+=item.name+item.special
  279. msgP+=item.name+item.specialP
  280. }else{
  281. msg+=item.name
  282. msgP+=item.name
  283. }
  284. // }
  285. }else{
  286. for(let k in textArr){
  287. if(textArr[k] && Array.isArray(textArr[k])){
  288. let temp = textArr[k];
  289. for(let j in temp){
  290. if(temp[j]){
  291. msg += temp[j].text + ','
  292. msgP += temp[j].textP + ','
  293. }
  294. }
  295. }else if(textArr[k]){
  296. msg += textArr[k].text + ','
  297. msgP += textArr[k].textP + ','
  298. }
  299. }
  300. }
  301. obg.view=trimDots(msgP.replace(/,$/,''))
  302. obg.content=trimDots(msg.replace(/,$/,''))
  303. obg.contentJson=trimDots(msg.replace(/,$/,''))
  304. obg.contentValue=trimDots(msg.replace(/,$/,''))
  305. obg.type=flg
  306. return obg;
  307. },
  308. saveAllDate() {
  309. const {pathInfo,symptom,diagnose,others,addContent} = this
  310. let tmpSymptom = JSON.parse(JSON.stringify(symptom))
  311. let detailList = [{type:1},{type:2},{type:3},{type:4}]
  312. for(let i = 0;i < detailList.length;i++){
  313. if(i == 0){
  314. detailList[0]=this.getDetailText(tmpSymptom.choose,1)
  315. }else if(i == 1){
  316. let tmpArr = []
  317. let tmpStr = this.getDetailText(diagnose.text,2).content
  318. for(let j = 0;j < tmpSymptom.text.length;j++){
  319. if(j == 1){
  320. let tmpTxt = '伴'+tmpSymptom.text[1].text
  321. tmpSymptom.text[1].text = tmpTxt
  322. }
  323. tmpArr.push(tmpSymptom.text[j].text)
  324. }
  325. tmpStr.length>0?tmpArr.push(tmpStr):null
  326. detailList[1].content=tmpArr.join()
  327. detailList[1].contentJson=JSON.stringify(tmpArr)
  328. detailList[1].contentValue=tmpArr.join()
  329. }else if(i == 2){
  330. detailList[2] = this.getDetailText(others.text,3)
  331. }else if(i == 3){
  332. detailList[3].content=addContent.txtDoc
  333. detailList[3].contentJson=addContent.txtDoc
  334. detailList[3].contentValue=addContent.txtDoc
  335. }
  336. }
  337. let params = {
  338. "dataJson": "1",
  339. "detailList": detailList,
  340. "hospitalId": pathInfo.hospitalId,//医院id
  341. "hospitalName": pathInfo.hospitalName,//医院名称
  342. "hospitalCode": pathInfo.hospitalCode,//医院编码
  343. "doctorId": pathInfo.doctorId,//医生id
  344. "doctorCode": pathInfo.doctorCode,//医生编码
  345. "doctorName": pathInfo.doctorName,//医生name
  346. "hospitalDeptCode": pathInfo.hospitalDeptCode,//医院科室编码
  347. "hospitalDeptId": pathInfo.hospitalDeptId,//科室id
  348. "hospitalDeptName": pathInfo.hospitalDeptName,//科室name
  349. "inquiryCode": pathInfo.recordId,//就诊序列号,目前是门诊号
  350. "patientBirthday": pathInfo.birthday+':00',//患者出生日期,格式为:2018-11-28 17:25:30
  351. "patientCode": pathInfo.patientCode,//患者编号
  352. "patientId": pathInfo.patientId,//患者id
  353. "patientIdNo": pathInfo.patientIdNo,//患者证件号码(病历号)
  354. "patientName": pathInfo.patientName,//患者姓名
  355. // "patientPhone": pathInfo,//患者联系电话(非)
  356. "patientSex": pathInfo.patientSex=='男'?1:2,//患者性别:1男2女(非)
  357. // "regVisitedState": pathInfo,//就诊状态(0待接诊,1接诊中,2完成接诊)(非)
  358. "reportList": this.imgList,
  359. "sonHospitalCode": pathInfo.sonHospitalCode,
  360. "sonHospitalId": pathInfo.sonHospitalId,
  361. "sonHospitalName": pathInfo.sonHospitalName,
  362. // "type": 0//病历分类(1:门诊,2:住院)
  363. }
  364. // console.log(params)
  365. api.saveInquiry(params).then((res) => {
  366. if (res.data.code == 0) {
  367. this.$store.commit('handleToggleShow', false);
  368. this.showType = 'success'
  369. this.submit = true
  370. } else {
  371. this.defaultWaring(res)
  372. }
  373. }).catch((err)=>{
  374. this.defaultWaring(err)
  375. })
  376. },
  377. defaultWaring(res){
  378. this.$store.commit('handleToggleShow', false);
  379. this.showType = 'fail'
  380. this.submit = true
  381. let timer = setTimeout(() => {
  382. this.submit = false
  383. clearTimeout(timer)
  384. }, 2000);
  385. }
  386. },
  387. components: {
  388. Submit,
  389. Loading,
  390. }
  391. }
  392. </script>
  393. <style lang="less" scoped>
  394. @import "../less/base.less";
  395. .foot {
  396. .dbfooter;
  397. z-index: 998;
  398. }
  399. .doctorData {
  400. float: right;
  401. color: #0043E8;
  402. margin-bottom: 30px;
  403. font-size: 14px;
  404. }
  405. .preview {
  406. color: red;
  407. background-color: #fff;
  408. position: fixed;
  409. width: 100%;
  410. height: 100%;
  411. top: 0;
  412. left: 0;
  413. box-sizing: border-box;
  414. padding: 0 0.4rem 1rem .4rem;
  415. overflow: hidden;
  416. -webkit-overflow-scrolling:touch;
  417. .btscroll;
  418. .content {
  419. padding-top: 0;
  420. padding-bottom: 2rem;
  421. }
  422. }
  423. .tmpDiv {
  424. height: .3rem;
  425. }
  426. .imgView {
  427. width: 1.86rem;
  428. height: 1.9rem;
  429. float: left;
  430. border: 1px solid #dfe0e4;
  431. margin: 0 0.2rem 0.3rem 0;
  432. box-sizing: border-box;
  433. position: relative;
  434. overflow: hidden;
  435. border-radius: 0.08rem;
  436. img {
  437. position: absolute;
  438. left: 50%;
  439. top: 50%;
  440. width: 100%;
  441. transform: translate(-50%, -50%);
  442. }
  443. }
  444. .imgTitle {
  445. padding-bottom: .20rem;
  446. }
  447. .personMsg {
  448. padding: 0.3rem 0.4rem;
  449. box-sizing: border-box;
  450. background-color: #fff;
  451. border-radius: 0.16rem;
  452. margin-bottom: 0.38rem;
  453. box-shadow:0px 3px 20px 0px rgba(192,187,224,0.23);
  454. .previewParts {
  455. li {
  456. padding: .1rem .3rem;
  457. overflow: hidden;
  458. }
  459. li.imgLis {
  460. padding-right: 0;
  461. padding-left: 0;
  462. }
  463. h4 {
  464. color: #colors[quest];
  465. font-size: .32rem;
  466. font-weight: bold;
  467. position: relative;
  468. i {
  469. width: .12rem;
  470. height: .12rem;
  471. border-radius: 50%;
  472. background: #FFAD00;
  473. display: inline-block;
  474. position: absolute;
  475. top: .15rem;
  476. left: -0.3rem;
  477. }
  478. }
  479. p {
  480. font-size: .28rem;
  481. color: #424242;
  482. margin: .2rem 0;
  483. word-break: break-all;
  484. }
  485. }
  486. .baseMsg {
  487. font-size: 0.32rem;
  488. color: #colors[quest];
  489. letter-spacing: 0;
  490. text-align: justify;
  491. font-weight: bold;
  492. margin-bottom: 0.15rem;
  493. }
  494. table {
  495. width: 100%;
  496. font-size: 0.3rem;
  497. color: #333333;
  498. letter-spacing: 0;
  499. text-align: justify;
  500. margin-top: .2rem;
  501. tr {
  502. padding: .2rem 0;
  503. line-height: .5rem;
  504. td {
  505. padding-bottom: 0.1rem;
  506. }
  507. span {
  508. color:#777;
  509. width: 1.6rem;
  510. display: inline-block;
  511. }
  512. }
  513. }
  514. .line {
  515. opacity: 0.3;
  516. background: #d8d8d8;
  517. margin: 0.2rem 0;
  518. height: 1px;
  519. }
  520. }
  521. .personMsg2 {
  522. padding-right: 0;
  523. }
  524. .personMsg2.modal {
  525. margin-bottom: 0;
  526. }
  527. .personMsgDoc {
  528. position: fixed;
  529. height: 100%;
  530. width: 100%;
  531. top: 0;
  532. left: 0;
  533. overflow: auto;
  534. z-index: 999;
  535. .personMsgDocModal {
  536. .mask;
  537. position: fixed;
  538. width: 100%;
  539. height: 100%;
  540. top: 0;
  541. left: 0;
  542. z-index: 999;
  543. }
  544. .personMsgDocDetail {
  545. position: fixed;
  546. z-index: 1000;
  547. top: 50%;
  548. left: 50%;
  549. transform: translate(-50%, -50%);
  550. // padding: 0 .4rem;
  551. background-color: #fff;
  552. box-sizing: border-box;
  553. width: 90%;
  554. border-radius: .1rem;
  555. overflow: hidden;
  556. .personMsg {
  557. max-height: 9rem;
  558. overflow: auto;
  559. width: 100%;
  560. border-radius: 0;
  561. -webkit-overflow-scrolling:touch;
  562. }
  563. }
  564. }
  565. .close {
  566. width: .34rem;
  567. height: .34rem;
  568. position: absolute;
  569. right: 0;
  570. top: 0;
  571. padding: 8px;
  572. z-index: 1001;
  573. }
  574. </style>