Preview.vue 15 KB

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