service_item_content.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  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,.icon-arrow-down{transition: all .3s ease-in-out;}
  34. .active .icon-check,.collapsed .icon-arrow-down{transform: rotateZ(180deg);}
  35. .icon-check{background-image: url(../images/icon/zhankai_btn.png);}
  36. .icon-16{width: 16px;height: 16px;}
  37. .icon-18{width: 18px;height: 18px;}
  38. .record-list{max-height: 0;overflow: hidden;transition: all .3s linear;}
  39. .record-list.active{max-height: 500px;}
  40. .record-item{background-color: #f5f5fa;margin-bottom: 10px;padding: 10px;}
  41. .service-top{font-size: 0;line-height: 1;font-weight: 500;}
  42. .service-name span{vertical-align: middle;font-size: 16px;}
  43. .service-name span+span{margin-left: 10px;}
  44. .service-name{line-height: 1.5;margin-bottom: 0;}
  45. .service-index{border: 1px solid #12b7f5;width: 16px;line-height: 1;height: 16px;font-size: 14px;display: inline-block;text-align: center;color: #12b7f5;}
  46. .label-group{padding-left: 26px;}
  47. .label-group span{color: #12b7f5;font-size: 14px;line-height: 1;margin-top: 10px;}
  48. .label-blue{border-radius: 5px;border: solid 1px #12b7f5;padding: 4px 15px;display: inline-block;margin-right: 27px;}
  49. .panel-body{padding: 20px;font-size: 14px;color: #999;}
  50. .panelcurPage{border-bottom: 1px solid #d7dce6;}
  51. .service-content{line-height: 30px;padding-bottom: 15px;}
  52. .service-address{border-bottom: 1px solid #d7dce6;}
  53. .btn-yuyue{background-color: #02cfb9;color: #fff;}
  54. .btn-yuyue:hover,.btn-yuyue:link{color: #fff;background-color: #01c1ad;}
  55. .btn-fuwuma{background-color: #2dbe55;color: #fff;}
  56. .btn-fuwuma:hover,.btn-fuwuma:link{color: #fff;background-color: #209440;}
  57. .btn-zhidao{background-color: #12b7f5;color: #fff;}
  58. .btn-zhidao:hover,.btn-zhidao:link{color: #fff;background-color: #10a0d6;}
  59. .service-operation .btn{width: 90px;}
  60. .view-detail{color: #12b7f5;cursor: pointer;}
  61. .yslb>span:after{content: '、';}
  62. .yslb>span:last-child:after{display: none;}
  63. .btns-group{padding-left: 20px;}
  64. .btns-group .btn{margin-right: 20px;}
  65. .fuwuma-model{position: fixed;top: 0;left: 0;right: 0;bottom: 0;z-index: 9;}
  66. .fuwuma-layer{position: absolute;top: 0;left: 0;right: 0;bottom: 0;background-color: rgba(0,0,0,.35);}
  67. .fuwuma-content{width: 260px;height: 260px;top: 50%;position: absolute;margin-top: -130px;left: 50%;margin-left: -130px;}
  68. .fuwuma-content img{width: 100%;display: block;}
  69. </style>
  70. </head>
  71. <body>
  72. <div class="panel-group" id="app" v-cloak role="tablist" aria-multiselectable="true">
  73. <div class="panelcurPage" v-for="(service,index) in serviceData">
  74. <div class="panel-heading" role="tab" @click="changeCollapseIndex(index)">
  75. <h4 class="panel-title">
  76. <a role="button" class="flex-box">
  77. <div class="flex-box-item service-top">
  78. <p class="service-name"><span class="service-index">{{index+1}}</span><span>{{service.title}}</span></p>
  79. <div class="label-group">
  80. <span class="pull-right mt5"><i v-if="service.statusName=='已完成'" class="icon icon-gouxuan icon-18 mr5"></i>{{service.statusName}}</span>
  81. <span class="label-blue">{{service.shortExecuteTime}}</span>
  82. <span class="label-blue" v-for="doctor in service.executeDoctorList">{{doctor}}</span>
  83. </div>
  84. </div>
  85. <span class="icon icon-arrow-down ml50"></span>
  86. </a>
  87. </h4>
  88. </div>
  89. <div class="panel-collapse collapse" :class="{in:collapseIndex==index}" role="tabpanel" aria-labelledby="headingOne">
  90. <div class="panel-body">
  91. <div class="service-content">{{service.content}}</div>
  92. <div class="service-address ptb20">
  93. <div class="flex-box">
  94. <div class="flex-box-item">
  95. <p class="m0">地点:{{service.hospitalName}}</p>
  96. <p class="m0">时间:{{service.executeTime | formatDate}}</p>
  97. </div>
  98. <div class="flex-box-item">
  99. <p class="m0 yslb">执行:<span v-for="(doctor,index) in service.executeDoctorList">{{doctor}}</span></p>
  100. <p class="m0">收费:{{service.expense}}元</p>
  101. </div>
  102. </div>
  103. </div>
  104. <div class="service-operation pt10">
  105. <p><span class="pull-right view-detail" :class="{active:isCollapse}" @click="chakan"><i class="icon icon-check mr5 icon-16"></i>{{isCollapse?'收起详情':'查看详情'}}</span>指导与汇报记录</p>
  106. <div class="record-list" :class="{active:isCollapse}">
  107. <div class="record-item" v-for="item in service.messageList">
  108. <div class="flex-box c-999 f14">
  109. <div class="flex-box-item">
  110. {{item.adminTeamName}}
  111. </div>
  112. <div class="flex-box-item">
  113. {{item.createTime}}
  114. </div>
  115. </div>
  116. <div class="f14 c-333">{{item.content}}f</div>
  117. </div>
  118. </div>
  119. <div class="flex-box btns-group">
  120. <!--<button class="btn btn-yuyue" v-if="service.itemType==0 && service.operate!=1">上传附件</button>-->
  121. <button class="btn btn-yuyue" v-if="service.itemType==2 && service.operate!=1" @click="jkjy(service.patient,service.planDetaiId)">健康教育</button>
  122. <button class="btn btn-yuyue" v-if="service.itemType==3 && service.operate!=1" @click="zwkf">健康指导</button>
  123. <button class="btn btn-yuyue" v-if="service.itemType==4 && service.operate!=1" @click="zwkf">随访</button>
  124. <button class="btn btn-zhidao" @click="zdly(service)">指导留言</button>
  125. <button class="btn btn-fuwuma" v-if="service.itemType==1 && service.operate!=1" @click="fwm(service.planDetaiId)">服务码</button>
  126. <!--<button class="btn btn-fuwuma" @click="fwm(service.planDetaiId)">服务码</button>-->
  127. <button class="btn btn-fuwuma" v-if="service.operate==1" @click="goToFinish(service.planDetaiId)">完成</button>
  128. </div>
  129. </div>
  130. </div>
  131. </div>
  132. </div>
  133. <div class="fuwuma-model" v-show="qrModal">
  134. <div class="fuwuma-layer" @click="qrModal=false"></div>
  135. <div class="fuwuma-content">
  136. <img :src="qrCode" width="300px" />
  137. </div>
  138. </div>
  139. </div>
  140. <script type="text/javascript" src="../../../js/vue.js"></script>
  141. <script type="text/javascript" src="../../../js/jquery-2.2.4.js"></script>
  142. <script type="text/javascript" src="../../../api/http-request.js"></script>
  143. <script type="text/javascript" src="../../../api/rehabilitation-api.js"></script>
  144. <script src="../../../js/util.js" type="text/javascript" charset="utf-8"></script>
  145. <script type="text/javascript">
  146. !function(){
  147. var httpData=GetRequest();
  148. var userInfo = JSON.parse(window.localStorage.getItem(httpRequest.agentName));
  149. window.serviceItem=new Vue({
  150. el:"#app",
  151. data:{
  152. planids:httpData['planids'],
  153. serviceData:[],
  154. isCollapse :false,
  155. collapseIndex:0,
  156. qrCode:'',
  157. qrModal:false,
  158. },
  159. mounted:function(){
  160. this.getServiceItemList();
  161. },
  162. methods:{
  163. chakan:function(){
  164. this.isCollapse=!this.isCollapse;
  165. },
  166. changeCollapseIndex:function(idx){
  167. this.collapseIndex=idx;
  168. },
  169. //获取服务列表
  170. getServiceItemList:function(){
  171. var vm=this;
  172. var loadding = top.layer.load(0, {shade: false}); //0代表加载的风格,支持0-2
  173. rehaAPI.serviceItemList({planDetailIds:vm.planids}).then(function(res){
  174. top.layer.close(loadding);
  175. if(res.status==200){
  176. vm.serviceData=res.data;
  177. }else{
  178. top.layer.msg(res.msg,{icon:5});
  179. }
  180. })
  181. },
  182. //健康教育
  183. jkjy:function(patient,planId){
  184. var vm=this
  185. top.layer.open({
  186. type: 2,
  187. // offset: ['100px'], //右下角弹出
  188. area: ['800px', '648px'],
  189. shade: 0.5,
  190. title: '健康教育',
  191. fixed: true, //不固定
  192. maxmin: true,
  193. closeBtn: 1,
  194. shift: 5,
  195. shadeClose: false, //点击遮罩关闭层
  196. content: '../../article/html/article.html?code='+patient+'&planId='+planId+'&isReha=true'
  197. });
  198. },
  199. // 暂未开放
  200. zwkf:function(){
  201. top.layer.msg('此功能暂未开放',{icon:1});
  202. },
  203. goToFinish:function(planid){
  204. top.layer.open({
  205. type: 2,
  206. // offset: ['100px'], //右下角弹出
  207. area: ['600px', '650px'],
  208. shade: 0.5,
  209. title: '完成项目确认',
  210. fixed: true, //不固定
  211. maxmin: true,
  212. closeBtn:1,
  213. shift: 5,
  214. shadeClose: false, //点击遮罩关闭层
  215. content: '../../rehabilitation/html/guide_the_message.html?planid='+planid
  216. });
  217. },
  218. fwm:function(planid){
  219. this.loadSocket(planid);
  220. },
  221. zdly:function(data){
  222. var loginDoctor = JSON.parse(window.localStorage.getItem('wlyyAgent'));
  223. var otherCode,otherName;
  224. var planDetailId=data.planDetaiId;
  225. if(loginDoctor.doctorType==1){
  226. otherCode=data.familyDoctorCode;
  227. otherName=data.familyDoctorName;
  228. }else{
  229. otherCode=data.specialistDoctorCode;
  230. otherName=data.specialistDoctorName;
  231. }
  232. top.layer.open({
  233. type: 2,
  234. // offset: ['100px'], //右下角弹出
  235. area: ['800px', '650px'],
  236. title: false,
  237. fixed: true, //不固定
  238. maxmin: true,
  239. content: '../../consulting/html/consulting.html?otherCode='+otherCode+'&otherName='+encodeURI(otherName)+'&planDetailId='+planDetaiId
  240. });
  241. },
  242. loadSocket:function(planid){
  243. var vm=this;
  244. var imurl=httpRequest.socketUrl;
  245. jQuery.getScript(imurl+"/socket.io/socket.io.js").done(function() {
  246. var type=2;//咨询类型
  247. var socket = io.connect(imurl);
  248. var sessionId = 'system';
  249. socket.emit('login', {userId: userInfo.uid, password: userInfo.uid,sessionId:sessionId,clientType:"doctor"});
  250. socket.on('message', function (data) {
  251. console.log(data);
  252. if(data.type==0){
  253. vm.checkAfterQrCode(planid);
  254. }
  255. });
  256. socket.on('error', function (data) {
  257. console.log(data);
  258. });
  259. socket.on('ack', function (data) {
  260. console.log(data);
  261. vm.getQRCode(planid);
  262. });
  263. function getLocalTime(nS) {
  264. return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' ');
  265. }
  266. })
  267. .fail(function() {
  268. top.layer.msg('服务码创建失败',{icon:5});
  269. });
  270. },
  271. checkAfterQrCode:function(planid){
  272. var vm=this;
  273. rehaAPI.checkAfterQrCode(params).then(function(res){
  274. var icon=5;
  275. if(data.status==200){
  276. if(data.data){
  277. icon=1;
  278. vm.goToFinish(planid);
  279. }
  280. }
  281. top.layer.msg(res.msg,{icon:icon});
  282. })
  283. },
  284. getQRCode:function(planid){
  285. var vm=this;
  286. var params={
  287. planDetailId:planid,
  288. sessionId: 'system'
  289. }
  290. rehaAPI.createServiceQrCode(params).then(function(res){
  291. console.log(res);
  292. if(res.status==200){
  293. vm.qrCode=res.data;
  294. setTimeout(function(){
  295. vm.qrModal=true;
  296. },100)
  297. }else{
  298. top.layer.msg('服务码获取失败',{icon:5});
  299. }
  300. })
  301. }
  302. },
  303. filters:{
  304. formatDate:function(value, format) {
  305. if(!value) return ;
  306. var fmt=format || "yyyy-MM-dd hh:mm";
  307. var date = new Date(value);
  308. if (/(y+)/.test(fmt)) {
  309. fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
  310. }
  311. let o = {
  312. 'M+': date.getMonth() + 1,
  313. 'd+': date.getDate(),
  314. 'h+': date.getHours(),
  315. 'm+': date.getMinutes(),
  316. 's+': date.getSeconds()
  317. };
  318. for (let k in o) {
  319. if (new RegExp(`(${k})`).test(fmt)) {
  320. let str = o[k] + '';
  321. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : ('00' + str).substr(str.length));
  322. }
  323. }
  324. return fmt;
  325. }
  326. }
  327. })
  328. }()
  329. </script>
  330. </body>
  331. </html>