medical-records.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>添加住院病历</title>
  6. <link rel="stylesheet" type="text/css" href="../../../css/cross.css" />
  7. <link rel="stylesheet" type="text/css" href="../../../css/cross.ui.css" />
  8. <link rel="stylesheet" type="text/css" href="../../../css/style.min.css" />
  9. <link href="../../../plugins/toastr/toastr.min.css" rel="stylesheet">
  10. <link rel="stylesheet" href="../../../plugins/element-ui/element-ui.css" />
  11. <link rel="stylesheet" type="text/css" href="../css/common.css" />
  12. <style>
  13. .el-select-dropdown{
  14. width: 381px !important;
  15. left: 89px!important;
  16. }
  17. .upload-box{margin-top:0;padding: 10px 0 10px 10px;overflow: hidden;border: 1px solid #d7dce6;}
  18. .upload-box li{width: 60px;height: 60px;position: relative;display: block;float: left;margin-right: 10px;}
  19. .upload-box li img{width: 100%;display: block;}
  20. .upload-img-box{width: 100%;height: 100%;overflow: hidden;}
  21. .delete-img{position: absolute;right: -5px;top: -5px;color: #fff;background-color: #ccc;border-radius: 100%;text-align: center;line-height: 15px;width: 15px;height: 15px;}
  22. .upload-img{position: absolute;left: 0;right: 0;top: 0;bottom: 0;opacity: 0;z-index: 3;font-size: 0;width: 100%;height: 100%;}
  23. .add-img{font-size: 40px;line-height: 60px;font-weight: 500;width: 60px;height: 60px;display: block;text-align: center;border: 1px dashed #d7dce6;color: #bec8d2;}
  24. </style>
  25. </head>
  26. <body class="m0">
  27. <div id="app" class="p10 c-333" v-cloak>
  28. <div class="pt10 flex ui-row mt10">
  29. <label class="c-999 required" style="font-weight: normal;">入院时间:</label>
  30. <div class="flex1">
  31. <el-date-picker v-model="admissionTime" type="date" placeholder="请选择">
  32. </el-date-picker>
  33. </div>
  34. </div>
  35. <div class="pt10 flex ui-row mt10">
  36. <label class="c-999 required" style="font-weight: normal;">入院诊断:</label>
  37. <div class="flex1">
  38. <div class="flex">
  39. <el-autocomplete
  40. class="w-220"
  41. v-model="admittingDiagnosisValue"
  42. :fetch-suggestions="fetchAdmittingDiagnosis"
  43. placeholder="请输入内容"
  44. @select="handleSelect"
  45. ></el-autocomplete>
  46. <button type="button" class="btn btn-12B7F5 btn-size-s ml15" style="border-radius: 0;" @click="saveDiagnosisWrap('admitting')">+ 添加</button>
  47. </div>
  48. <div>
  49. <el-tag
  50. v-for="(v, i) in admittingTags"
  51. :key="i"
  52. closable
  53. class="mr5 mt5"
  54. @close="closeTag('admitting', i)">
  55. {{v}}
  56. </el-tag>
  57. </div>
  58. </div>
  59. </div>
  60. <div class="pt10 flex ui-row mt10">
  61. <label class="c-999 required" style="font-weight: normal;">出院时间:</label>
  62. <div class="flex1">
  63. <!-- :picker-options="pickerOptions1" -->
  64. <el-date-picker v-model="dischargeTime" type="date" placeholder="请选择">
  65. </el-date-picker>
  66. </div>
  67. </div>
  68. <div class="pt10 flex ui-row mt10">
  69. <label class="c-999 required" style="font-weight: normal;">出院诊断:</label>
  70. <div class="flex1">
  71. <div class="flex">
  72. <el-autocomplete
  73. class="w-220"
  74. v-model="dischargeDiagnosisValue"
  75. :fetch-suggestions="fetchDischargeDiagnosis"
  76. placeholder="请输入内容"
  77. @select="handleSelect"
  78. ></el-autocomplete>
  79. <button type="button" class="btn btn-12B7F5 btn-size-s ml15" style="border-radius: 0;" @click="saveDiagnosisWrap('')">+ 添加</button>
  80. </div>
  81. <div>
  82. <el-tag
  83. v-for="(v, i) in dischargeTags"
  84. :key="i"
  85. closable
  86. class="mr5 mt5"
  87. @close="closeTag('discharge', i)">
  88. {{v}}
  89. </el-tag>
  90. </div>
  91. </div>
  92. </div>
  93. <div class="pt10 flex ui-row mt10">
  94. <label class="c-999 required" style="font-weight: normal;">医嘱小结:</label>
  95. <div class="flex1">
  96. <textarea v-model="advice" class="p10 c-333" style="height: 160px; width: 100%; border:1px solid #e1e1e1; resize:none;box-sizing: border-box"></textarea>
  97. </div>
  98. </div>
  99. <div class="pt10 flex ui-row mt10">
  100. <label class="c-999 required" style="font-weight: normal;">病历图片:</label>
  101. <div class="flex1">
  102. <ul class="upload-box">
  103. <li class="flex-box" v-for="(img,index) in upImgs">
  104. <div class="upload-img-box">
  105. <img :src="img.baseUrl" @click="previewImg(img.baseUrl)"/>
  106. </div>
  107. <a class="delete-img" @click="deleteImg(index)">&times;</a>
  108. </li>
  109. <li class="flex-box" v-if="upImgs.length<6">
  110. <span class="add-img">+</span>
  111. <input type="file" @change="upLoadImgToBase64" class="upload-img" />
  112. </li>
  113. </ul>
  114. <div>({{upImgs.length}}/6)</div>
  115. </div>
  116. </div>
  117. <div class="c-t-center mt20">
  118. <button type="button" class="btn btn-white btn-size-m mr15" @click="cancelMedicalRecords">取消</button>
  119. <button type="button" class="btn btn-12B7F5 btn-size-m" @click="addMedicalRecords">保存</button>
  120. </div>
  121. </div>
  122. <!--查看图片-->
  123. <div id="outerdiv" style="position:fixed;top:0;left:0;background:rgba(0,0,0,0.7);z-index:2;width:100%;height:100%;display:none;">
  124. <div id="innerdiv" style="position:absolute;">
  125. <img id="bigimg" style="border:5px solid #fff;" src="" />
  126. </div>
  127. </div>
  128. <script src="../../../js/vue.js" type="text/javascript" charset="utf-8"></script>
  129. <script src="../../../js/jquery-2.2.4.js"></script>
  130. <script src="../../../plugins/layer/layer.min.js"></script>
  131. <script src="../../../plugins/toastr/toastr.min.js"></script>
  132. <script type="text/javascript" src="../../../plugins/element-ui/element-ui.js"></script>
  133. <script src="../../../js/bootstrap.min.js"></script>
  134. <script src="../../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
  135. <script src="../../../js/underscore.js" type="text/javascript" charset="utf-8"></script>
  136. <script src="../../../js/util.js" type="text/javascript" charset="utf-8"></script>
  137. <script src="../../../api/http-request.js" type="text/javascript"></script>
  138. <script src="../../../api/recover_api.js" type="text/javascript"></script>
  139. <script type="text/javascript" src="../../../api/rehabilitation-api.js"></script>
  140. <script type="text/javascript">
  141. var doctorType = (JSON.parse(window.localStorage.getItem('wlyyAgent'))||{}).doctorType,
  142. docInfo = JSON.parse(window.localStorage.getItem('wlyyAgent'))
  143. var httpData=GetRequest()
  144. console.log('httpData:', httpData)
  145. function showSuccessMessage(msg) {
  146. layer.msg(msg, {
  147. icon: 1
  148. })
  149. }
  150. function showErrorMessage(msg) {
  151. layer.msg(msg, {
  152. icon: 5
  153. })
  154. }
  155. function showWarningMessage(msg) {
  156. layer.msg(msg, {
  157. icon: 2
  158. })
  159. }
  160. function showInfoMessage(msg) {
  161. layer.msg(msg, {
  162. icon: 6
  163. })
  164. }
  165. top.medicalRecordsVue = new Vue({
  166. el: "#app",
  167. data: {
  168. pickerOptions1: {
  169. disabledDate: function(time) {
  170. return time.getTime() < Date.now() - 8.64e7;
  171. }
  172. },
  173. admissionTime: '',
  174. dischargeTime: '',
  175. admittingDiagnosisValue: '',
  176. admittingDiagnosisObj: {},
  177. admittingTagsObj: {},
  178. admittingTags: [],//入院诊断标签
  179. dischargeDiagnosisValue: '',
  180. dischargeDiagnosisObj: {},
  181. dischargeTagsObj: {},
  182. dischargeTags: [],//出院诊断标签
  183. advice: '',
  184. doctorCode: docInfo.uid,
  185. patient: httpData.patient,
  186. patientName: decodeURI(httpData.patientName),
  187. medicalRecordsId: '',
  188. upImgs: [],
  189. upImgArr: [],
  190. imgData: {
  191. accept: 'image/gif, image/jpeg, image/png, image/jpg',
  192. },
  193. },
  194. mounted: function() {
  195. if(httpData['medicalRecordsId']){
  196. this.medicalRecordsId = httpData['medicalRecordsId']
  197. var curMedicalRecords = JSON.parse(window.localStorage.getItem('curMedicalRecords'))
  198. this.initMedicalRecords(curMedicalRecords)
  199. }
  200. },
  201. methods: {
  202. initMedicalRecords: function(model){
  203. var vm = this
  204. vm.admissionTime = model.admissionTime
  205. vm.dischargeTime = model.dischargeTime
  206. vm.admittingTags = model.admittingDiagnosisName.split(',')
  207. var admittingCodeArr = model.admittingDiagnosis.split(',')
  208. $.each(vm.admittingTags, function(index, o){
  209. vm.admittingTagsObj[o] = admittingCodeArr[index]
  210. })
  211. vm.dischargeTags = model.dischargeDiagnosisName.split(',')
  212. var dischargeCodeArr = model.dischargeDiagnosis.split(',')
  213. $.each(vm.dischargeTags, function(index, o){
  214. vm.dischargeTagsObj[o] = dischargeCodeArr[index]
  215. })
  216. var imgList = model.images.split(',')||[]
  217. $.each(imgList, function(index, item){
  218. var obj = {
  219. baseUrl: httpRequest.getImgUrl(item)
  220. }
  221. vm.upImgs.push(obj)
  222. })
  223. vm.advice = model.advice
  224. },
  225. handleSelect: function(res){
  226. },
  227. deleteImg: function(idx) {
  228. console.log(idx)
  229. this.upImgs.splice(idx, 1)
  230. },
  231. upLoadImgToBase64: function() {
  232. var vm = this;
  233. var img1 = event.target.files[0];
  234. var reader = new FileReader();
  235. var type = img1.type; //文件的类型,判断是否是图片
  236. var size = img1.size; //文件的大小,判断图片的大小
  237. if(this.imgData.accept.indexOf(type) == -1) {
  238. alert('请选择我们支持的图片格式!');
  239. return false;
  240. }
  241. if(size > 3145728) {
  242. alert('请选择3M以内的图片!');
  243. return false;
  244. }
  245. reader.readAsDataURL(img1);
  246. reader.onload = function(e) {
  247. vm.upImgs.push({
  248. baseUrl: e.target.result
  249. });
  250. vm.upImgArr.push(img1);
  251. vm.uploadImg(vm.upImgArr);
  252. }
  253. },
  254. //上传图片
  255. uploadImg: function(data) {
  256. var vm = this;
  257. var len = data.length;
  258. if(len==0){
  259. return
  260. }
  261. var file = data[len - 1];
  262. var formData = new FormData();
  263. formData.append('file', file);
  264. rehaAPI.upload(formData).then(function(res) {
  265. if(res.status == 200) {
  266. vm.upImgs[len - 1].img = res.data;
  267. data.pop();
  268. vm.$forceUpdate()
  269. vm.uploadImg(data);
  270. } else {
  271. layer.msg(res.msg, {
  272. icon: 5
  273. });
  274. }
  275. })
  276. },
  277. //添加诊断
  278. saveDiagnosisWrap: function(type){
  279. if(type=='admitting'){
  280. if(this.admittingDiagnosisValue.trim().length>0){
  281. if(this.admittingTagsObj[this.admittingDiagnosisValue]){
  282. showInfoMessage('该诊断已被添加')
  283. return false
  284. }
  285. this.admittingTagsObj[this.admittingDiagnosisValue] = this.admittingDiagnosisObj[this.admittingDiagnosisValue]
  286. this.admittingTags.push(this.admittingDiagnosisValue)
  287. this.admittingDiagnosisValue = ''
  288. }
  289. } else {
  290. if(this.dischargeDiagnosisValue.trim().length>0){
  291. if(this.dischargeTagsObj[this.dischargeDiagnosisValue]){
  292. showInfoMessage('该诊断已被添加')
  293. return false
  294. }
  295. this.dischargeTagsObj[this.dischargeDiagnosisValue] = this.dischargeDiagnosisObj[this.dischargeDiagnosisValue]
  296. this.dischargeTags.push(this.dischargeDiagnosisValue)
  297. this.dischargeDiagnosisValue = ''
  298. }
  299. }
  300. },
  301. //删除诊断标签
  302. closeTag: function(type, i){
  303. if(type=='admitting'){
  304. var key = this.admittingTags[i]
  305. delete this.admittingTagsObj[key]
  306. this.admittingTags.splice(i, 1)
  307. } else {
  308. var key = this.dischargeTags[i]
  309. delete this.dischargeTagsObj[key]
  310. this.dischargeTags.splice(i, 1)
  311. }
  312. },
  313. fetchAdmittingDiagnosis: function(queryString, cb){
  314. var vm = this
  315. vm.getIcd10Info('admitting',queryString, cb)
  316. },
  317. fetchDischargeDiagnosis: function(queryString, cb){
  318. var vm = this
  319. vm.getIcd10Info('discharge',queryString, cb)
  320. },
  321. getIcd10Info: function(type, queryString, cb){
  322. var vm = this,nameKey = queryString,
  323. params = {
  324. nameKey:nameKey,
  325. page: 1,
  326. pageSize: 10000
  327. }
  328. rehaAPI.getIcd10Info(params).then(function(res){
  329. if(res.status == 200) {
  330. var arr = []
  331. if(type=='admitting'){
  332. var admittingDiseaseData = $.each(res.data, function(i, o){
  333. vm.admittingDiagnosisObj[o.name]=o.code
  334. o.value = o.name
  335. return o
  336. })
  337. arr = admittingDiseaseData
  338. } else if(type=='discharge') {
  339. var dischargeDiseaseData = $.each(res.data, function(i, o){
  340. vm.dischargeDiagnosisObj[o.name]=o.code
  341. o.value = o.name
  342. return o
  343. })
  344. arr = dischargeDiseaseData
  345. }
  346. cb(arr);
  347. } else {
  348. showErrorMessage(res.msg);
  349. }
  350. })
  351. },
  352. cancelMedicalRecords: function(){
  353. top.recoverVue.closeMedicalRecords()
  354. },
  355. previewImg: function(url){
  356. imgShow("#outerdiv", "#innerdiv", "#bigimg", url);
  357. },
  358. addMedicalRecords: function(){
  359. var vm = this
  360. if(!this.admissionTime){
  361. showErrorMessage('请选择入院时间!')
  362. return false
  363. }
  364. if(!this.dischargeTime){
  365. showErrorMessage('请选择出院时间!')
  366. return false
  367. }
  368. if(this.admissionTime>this.dischargeTime){
  369. showWarningMessage("入院时间应小于出院时间!")
  370. return false;
  371. }
  372. if(this.admittingTags.length<=0){
  373. showErrorMessage('请添加入院诊断!')
  374. return false
  375. }
  376. if(this.dischargeTags.length<=0){
  377. showErrorMessage('请添加出院诊断!')
  378. return false
  379. }
  380. if(!this.advice||this.advice.trim().length<=0){
  381. showErrorMessage('请输入医嘱小结!')
  382. return false
  383. }
  384. var admittingDiagnosisArr=[], admittingDiagnosisNameArr=[],
  385. dischargeDiagnosisArr = [], dischargeDiagnosisNameArr = []
  386. $.each(vm.admittingTags, function(index, value){
  387. var code = vm.admittingTagsObj[value]
  388. admittingDiagnosisArr.push(code)
  389. admittingDiagnosisNameArr.push(value)
  390. })
  391. $.each(vm.dischargeTags, function(index, value){
  392. var code = vm.dischargeTagsObj[value]
  393. dischargeDiagnosisArr.push(code)
  394. dischargeDiagnosisNameArr.push(value)
  395. })
  396. var imgList=[];
  397. $.each(vm.upImgs, function(index, item){
  398. imgList.push(item.img)
  399. })
  400. var jsonData = {
  401. admissionTime: new Date(this.admissionTime).format('yyyy-MM-dd HH:mm:ss'),
  402. dischargeTime: new Date(this.dischargeTime).format('yyyy-MM-dd HH:mm:ss'),
  403. admittingDiagnosis: admittingDiagnosisArr.join(','), // 入院诊断
  404. admittingDiagnosisName: admittingDiagnosisNameArr.join(','), //入院诊断名称
  405. dischargeDiagnosis: dischargeDiagnosisArr.join(','), // 出院诊断
  406. dischargeDiagnosisName: dischargeDiagnosisNameArr.join(','), // 出院诊断名称,多个用逗号
  407. advice: this.advice,
  408. images: imgList.join(',')
  409. }
  410. var params = {
  411. doctorCode: vm.doctorCode,
  412. patient: vm.patient,
  413. patientName: vm.patientName,
  414. jsonData: JSON.stringify(jsonData)
  415. }
  416. if(vm.medicalRecordsId){
  417. params['id'] = vm.medicalRecordsId
  418. }
  419. // console.log('paramsparamsparamsparamsparams', jsonData)
  420. // return
  421. var loading = layer.load(0, {shade: false})
  422. rehaAPI.createMedicalRecords(params).then(function(res){
  423. layer.close(loading)
  424. if(res.status==200){
  425. console.log('res.data', res.data)
  426. if(vm.medicalRecordsId){
  427. top.recoverVue.completeMedicalRecords('edit', res.data)
  428. } else {
  429. top.recoverVue.completeMedicalRecords('isNew', res.data)
  430. }
  431. }else{
  432. top.recoverVue.closeMedicalRecords()
  433. showErrorMessage(res.msg);
  434. }
  435. })
  436. }
  437. }
  438. })
  439. function imgShow(outerdiv, innerdiv, bigimg, src){
  440. // var src = _this.attr("src");//获取当前点击的pimg元素中的src属性
  441. $(bigimg).attr("src", src);//设置#bigimg元素的src属性
  442. /*获取当前点击图片的真实大小,并显示弹出层及大图*/
  443. $("<img/>").attr("src", src).load(function(){
  444. var windowW = $(window).width();//获取当前窗口宽度
  445. var windowH = $(window).height();//获取当前窗口高度
  446. var realWidth = this.width;//获取图片真实宽度
  447. var realHeight = this.height;//获取图片真实高度
  448. var imgWidth, imgHeight;
  449. var scale = 0.8;//缩放尺寸,当图片真实宽度和高度大于窗口宽度和高度时进行缩放
  450. if(realHeight>windowH*scale) {//判断图片高度
  451. imgHeight = windowH*scale;//如大于窗口高度,图片高度进行缩放
  452. imgWidth = imgHeight/realHeight*realWidth;//等比例缩放宽度
  453. if(imgWidth>windowW*scale) {//如宽度扔大于窗口宽度
  454. imgWidth = windowW*scale;//再对宽度进行缩放
  455. }
  456. } else if(realWidth>windowW*scale) {//如图片高度合适,判断图片宽度
  457. imgWidth = windowW*scale;//如大于窗口宽度,图片宽度进行缩放
  458. imgHeight = imgWidth/realWidth*realHeight;//等比例缩放高度
  459. } else {//如果图片真实高度和宽度都符合要求,高宽不变
  460. imgWidth = realWidth;
  461. imgHeight = realHeight;
  462. }
  463. $(bigimg).css("width",imgWidth);//以最终的宽度对图片缩放
  464. var w = (windowW-imgWidth)/2;//计算图片与窗口左边距
  465. var h = (windowH-imgHeight)/2;//计算图片与窗口上边距
  466. $(innerdiv).css({"top":h, "left":w});//设置#innerdiv的top和left属性
  467. $(outerdiv).fadeIn("fast");//淡入显示#outerdiv及.pimg
  468. });
  469. $(outerdiv).click(function(){//再次点击淡出消失弹出层
  470. $(this).fadeOut("fast");
  471. });
  472. }
  473. </script>
  474. </body>
  475. </html>