guide_the_message.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>完成项目服务</title>
  6. <link rel="stylesheet" href="../../../css/bootstrap.min.css" />
  7. <link rel="stylesheet" type="text/css" href="../../../css/style.min.css"/>
  8. <link rel="stylesheet" type="text/css" href="../../../css/cross.css"/>
  9. <style type="text/css">
  10. [v-cloak]{display: none;}
  11. .flex-box{display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ /* OLD - Firefox 19- (buggy but mostly works) */
  12. display: -ms-flexbox; /* TWEENER - IE 10 */ /* NEW - Chrome */
  13. display: flex; /* NEW, Spec - Opera 12.1, Firefox 20+ */
  14. -webkit-box-pack: center;
  15. -ms-flex-pack: center;
  16. justify-content: center;
  17. -webkit-box-align: center;
  18. -ms-flex-align: center;
  19. align-items: center;
  20. -ms-flex-wrap: wrap;
  21. flex-wrap: wrap;
  22. }
  23. .flex-box-item{-webkit-box-flex: 1; /* OLD - iOS 6-, Safari 3.1-6 */
  24. -moz-box-flex: 1; /* OLD - Firefox 19- */
  25. -webkit-flex: 1; /* Chrome */
  26. -ms-flex: 1; /* IE 10 */
  27. width: 50%; /* For old syntax, otherwise collapses. */
  28. flex: 1; /* NEW, Spec - Opera 12.1, Firefox 20+ */
  29. position: relative;}
  30. .icon{width: 12px;height: 12px;vertical-align: middle;background-size: 100% auto;background-repeat: no-repeat;display: inline-block;background-position: center center;}
  31. .icon-arrow-down{background-image: url(../images/icon/tiaozhuan_xia_icon.png);}
  32. .icon-gouxuan{background-image: url(../images/icon/gouxuan_lanse_icon.png);}
  33. .icon-check{background-image: url(../images/icon/zhankai_btn.png);}
  34. .icon-arrow-right{background-image: url(../images/icon/tiaozhuan_icon.png);background-size: auto 100%;}
  35. .icon-check,.icon-arrow-down{transition: all .3s ease-in-out;}
  36. .active .icon-check,.collapsed .icon-arrow-down{transform: rotateZ(180deg);}
  37. .icon-16{width: 16px;height: 16px;}
  38. .icon-18{width: 18px;height: 18px;}
  39. .service-top{font-size: 0;line-height: 1;font-weight: 500;}
  40. .service-name span{vertical-align: middle;font-size: 16px;}
  41. .service-name span+span{margin-left: 10px;}
  42. .service-name{line-height: 1.5;margin-bottom: 0;}
  43. .service-index{border: 1px solid #12b7f5;width: 16px;line-height: 1;height: 16px;font-size: 14px;display: inline-block;text-align: center;color: #12b7f5;}
  44. .label-group{padding-left: 26px;}
  45. .label-group span{color: #12b7f5;font-size: 14px;line-height: 1;margin-top: 10px;}
  46. .label-blue{border-radius: 5px;border: solid 1px #12b7f5;padding: 4px 15px;display: inline-block;margin-right: 27px;}
  47. .panel-body{padding: 20px 20px 0;font-size: 14px;color: #999;}
  48. .service-content{line-height: 30px;padding-bottom: 15px;border-bottom: 1px solid #d7dce6;}
  49. .service-address{border-bottom: 1px solid #d7dce6;}
  50. .btn-yuyue{background-color: #02cfb9;color: #fff;}
  51. .btn-yuyue:hover,.btn-yuyue:link{color: #fff;background-color: #01c1ad;}
  52. .btn-fuwuma{background-color: #2dbe55;color: #fff;}
  53. .btn-fuwuma:hover,.btn-fuwuma:link{color: #fff;background-color: #209440;}
  54. .btn-zhidao{background-color: #12b7f5;color: #fff;}
  55. .btn-zhidao:hover,.btn-zhidao:link{color: #fff;background-color: #10a0d6;}
  56. .service-operation .btn{width: 90px;}
  57. .view-detail{color: #12b7f5;cursor: pointer;}
  58. .record-list{max-height: 0;overflow: hidden;transition: all .3s linear;}
  59. .record-list.active{max-height: 999px;}
  60. .record-item{background-color: #f5f5fa;margin-bottom: 10px;padding: 10px;}
  61. .complete-title{font-size: 14px;color: #333;padding: 10px 0;border-bottom: 1px solid #D7DCE6;}
  62. .guanlian-list{border: 1px solid #d7dce6;padding: 3px 5px;}
  63. .upload-box{padding: 10px 0 10px 10px;overflow: hidden;border: 1px solid #d7dce6;}
  64. .upload-box li{width: 60px;height: 60px;position: relative;display: block;float: left;margin-right: 10px;}
  65. .upload-box li img{width: 100%;display: block;}
  66. .upload-img-box{width: 100%;height: 100%;overflow: hidden;}
  67. .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;}
  68. .upload-img{position: absolute;left: 0;right: 0;top: 0;bottom: 0;opacity: 0;z-index: 3;font-size: 0;width: 100%;height: 100%;}
  69. .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;}
  70. .yslb>span:after{content: '、';}
  71. .yslb>span:last-child:after{display: none;}
  72. </style>
  73. </head>
  74. <body>
  75. <div id="app" v-cloak role="tablist" aria-multiselectable="true">
  76. <div class="panelcurPage">
  77. <div class="panel-heading" role="tab" @click="changeCollapseIndex(index)">
  78. <h4 class="panel-title">
  79. <a role="button" class="flex-box">
  80. <div class="flex-box-item service-top">
  81. <p class="service-name"><span class="service-index">1</span><span>{{service.title}}</span></p>
  82. <div class="label-group">
  83. <span class="pull-right mt5"><i v-if="service.statusName=='已完成'" class="icon icon-gouxuan icon-18 mr5"></i>{{service.statusName}}</span>
  84. <span class="label-blue">{{service.shortExecuteTime}}</span>
  85. <span class="label-blue" v-for="doctor in service.executeDoctorList">{{doctor}}</span>
  86. </div>
  87. </div>
  88. <!--<span class="icon icon-arrow-down ml50"></span>-->
  89. </a>
  90. </h4>
  91. </div>
  92. <div class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
  93. <div class="panel-body">
  94. <div class="service-content">{{service.content}}</div>
  95. <div class="service-address ptb20">
  96. <div class="flex-box">
  97. <div class="flex-box-item">
  98. <p class="m0">地点:{{service.hospitalName}}</p>
  99. <p class="m0">时间:{{service.executeTime | formatDate}}</p>
  100. </div>
  101. <div class="flex-box-item">
  102. <p class="m0 yslb">执行:<span v-for="(doctor,index) in service.executeDoctorList">{{doctor}}</span></p>
  103. <p class="m0">收费:{{service.expense}}元</p>
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. </div>
  109. </div>
  110. <div class="panel-body">
  111. <div class="service-operation pt10">
  112. <p><span class="pull-right view-detail" :class="{active:isCollapse}" @click="chakan"><i class="icon icon-check mr5 icon-16"></i>{{isCollapse?'收起详情':'查看详情'}}</span>指导与汇报记录</p>
  113. <div class="record-list" :class="{active:isCollapse}">
  114. <div class="record-item" v-for="item in service.messageList">
  115. <div class="flex-box c-999 f14">
  116. <div class="flex-box-item">
  117. {{item.adminTeamName}}
  118. </div>
  119. <div class="flex-box-item">
  120. {{item.createTime}}
  121. </div>
  122. </div>
  123. <div class="f14 c-333">{{item.content}}</div>
  124. </div>
  125. </div>
  126. </div>
  127. <div class="complete-info pt10">
  128. <div class="complete-title">完成情况</div>
  129. <div class="ptb10">
  130. <p class="f14 mb5"><span class="c-999">完成情况:</span>{{service.completeTime}}</p>
  131. <p class="f14 mb5"><span class="c-999">执行医生:</span>{{service.operatorDoctorName}}</p>
  132. </div>
  133. </div>
  134. <div class="note-info pt10">
  135. <p class="f14 c-333">服务完成笔记</p>
  136. <textarea v-if="service.status!=1" class="form-control" style="resize: none;" rows="4" placeholder="可备注您的服务记录" v-model="service.node"></textarea>
  137. <div v-if="service.status==1">{{service.node}}</div>
  138. </div>
  139. <div class="note-info pt10" style="display: none;">
  140. <p class="f14 c-333">关联记录</p>
  141. <p class="guanlian-list text-center">
  142. <span class="pull-right"><i class="icon icon-arrow-right"></i></span>随访记录sfs
  143. </p>
  144. </div>
  145. <div class="note-info pt10">
  146. <p class="f14 c-333">相关记录</p>
  147. <ul class="upload-box" v-if="service.status!=1">
  148. <li class="flex-box" v-for="(img,index) in upImgs">
  149. <div class="upload-img-box">
  150. <img :src="img.baseUrl" />
  151. </div>
  152. <a class="delete-img" @click="deleteImg(index)">&times;</a>
  153. </li>
  154. <li class="flex-box" v-if="upImgs.length<5">
  155. <span class="add-img">+</span>
  156. <input type="file" @change="upLoadImgToBase64" class="upload-img" />
  157. </li>
  158. </ul>
  159. <ul class="upload-box" v-if="service.status==1">
  160. <li class="flex-box" v-for="img in service.relationRecordImg">
  161. <div class="upload-img-box">
  162. <img :src="img | getImgUrl" />
  163. </div>
  164. </li>
  165. </ul>
  166. </div>
  167. <div class="text-center ptb50" v-if="service.status!=1">
  168. <button class="btn btn-zhidao" @click="qrwc">确认完成</button>
  169. </div>
  170. </div>
  171. </div>
  172. <script type="text/javascript" src="../../../js/vue.js"></script>
  173. <script type="text/javascript" src="../../../js/jquery-2.2.4.js" ></script>
  174. <script type="text/javascript" src="../../../api/http-request.js"></script>
  175. <script type="text/javascript" src="../../../api/rehabilitation-api.js"></script>
  176. <script src="../../../js/util.js" type="text/javascript" charset="utf-8"></script>
  177. <script type="text/javascript">
  178. !function(){
  179. var httpData=GetRequest();
  180. new Vue({
  181. el:"#app",
  182. data:{
  183. imgData: {
  184. accept: 'image/gif, image/jpeg, image/png, image/jpg',
  185. },
  186. isCollapse:false,
  187. upImgs:[],
  188. upImgArr:[],
  189. planid:httpData['planid'],
  190. service:[]
  191. },
  192. mounted:function(){
  193. this.getServiceItem();
  194. },
  195. methods:{
  196. getServiceItem:function(){
  197. var vm=this;
  198. var loadding = top.layer.load(0, {shade: false}); //0代表加载的风格,支持0-2
  199. rehaAPI.serviceItem({planDetailId:vm.planid}).then(function(res){
  200. top.layer.close(loadding);
  201. if(res.status==200){
  202. vm.service=res.data;
  203. }else{
  204. top.layer.msg(res.msg,{icon:5});
  205. }
  206. })
  207. },
  208. deleteImg:function(idx){
  209. console.log(idx)
  210. this.upImgs.splice(idx,1)
  211. },
  212. chakan:function(){
  213. this.isCollapse=!this.isCollapse;
  214. },
  215. upLoadImgToBase64:function(){
  216. var vm=this;
  217. var img1=event.target.files[0];
  218. console.log(img1)
  219. var reader =new FileReader();
  220. var type=img1.type;//文件的类型,判断是否是图片
  221. var size=img1.size;//文件的大小,判断图片的大小
  222. if(this.imgData.accept.indexOf(type) == -1){
  223. alert('请选择我们支持的图片格式!');
  224. return false;
  225. }
  226. if(size>3145728){
  227. alert('请选择3M以内的图片!');
  228. return false;
  229. }
  230. reader.readAsDataURL(img1);
  231. reader.onload = function (e) {
  232. vm.upImgs.push({baseUrl:e.target.result});
  233. vm.upImgArr.push(img1);
  234. // vm.uploadImg(vm.upImgArr);
  235. }
  236. },
  237. qrwc:function(){
  238. var vm=this;
  239. vm.uploadImg(vm.upImgArr,vm.updateNoteAndImageRehabilitationOperate);
  240. },
  241. //上传图片
  242. uploadImg:function(data,cb){
  243. var vm=this;
  244. var len = data.length;
  245. if (!len){
  246. cb && cb();
  247. }else{
  248. var file=data[len-1];
  249. var formData = new FormData();
  250. formData.append('file', file);
  251. rehaAPI.upload(formData).then(function(res){
  252. console.log(res)
  253. if(res.status==200){
  254. console.log(vm.upImgs[len-1])
  255. vm.upImgs[len-1].img=res.data;
  256. data.pop();
  257. vm.uploadImg(data,cb);
  258. }
  259. })
  260. }
  261. },
  262. updateNoteAndImageRehabilitationOperate:function(){
  263. var vm=this;
  264. var _image=[];
  265. for(var i in vm.upImgs){
  266. _image.push(vm.upImgs[i].img);
  267. }
  268. var params={
  269. planDetailId:vm.planid,
  270. node:vm.service.node,
  271. image:JSON.stringify(_image)
  272. }
  273. var loadding = top.layer.load(0, {shade: false}); //0代表加载的风格,支持0-2
  274. rehaAPI.updateNoteAndImageRehabilitationOperate(params).then(function(res){
  275. top.layer.close(loadding);
  276. console.log(res)
  277. if(res.status==200){
  278. vm.getServiceItem();
  279. parent.serviceItem.getServiceItemList();
  280. }
  281. })
  282. },
  283. },
  284. filters:{
  285. formatDate:function(value, format) {
  286. if(!value) return ;
  287. var fmt=format || "yyyy-MM-dd hh:mm";
  288. var date = new Date(value);
  289. if (/(y+)/.test(fmt)) {
  290. fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
  291. }
  292. let o = {
  293. 'M+': date.getMonth() + 1,
  294. 'd+': date.getDate(),
  295. 'h+': date.getHours(),
  296. 'm+': date.getMinutes(),
  297. 's+': date.getSeconds()
  298. };
  299. for (let k in o) {
  300. if (new RegExp(`(${k})`).test(fmt)) {
  301. let str = o[k] + '';
  302. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : ('00' + str).substr(str.length));
  303. }
  304. }
  305. return fmt;
  306. },
  307. getImgUrl:function(value){
  308. var url=httpRequest.getImgUrl(value);
  309. return url;
  310. }
  311. }
  312. })
  313. }()
  314. </script>
  315. </body>
  316. </html>