server-items-detail.js 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916
  1. var currentGMT=new Date();//当前时间GMT
  2. function showSuccessMessage(msg) {
  3. layer.msg(msg, {
  4. icon: 1
  5. })
  6. }
  7. function showSuccessMessage(msg) {
  8. layer.msg(msg, {
  9. icon: 1
  10. })
  11. }
  12. function showErrorMessage(msg) {
  13. layer.msg(msg, {
  14. icon: 5
  15. })
  16. }
  17. function showWarningMessage(msg) {
  18. layer.msg(msg, {
  19. icon: 2
  20. })
  21. }
  22. function showInfoMessage(msg) {
  23. layer.msg(msg, {
  24. icon: 6
  25. })
  26. }
  27. function closeFollowUpLayer(planDetaiId, relationCode){
  28. _vm.closeAllLayer('创建随访计划', planDetaiId, 6, relationCode)
  29. }
  30. function closeKFZDlayer(planDetaiId){
  31. _vm.closeAllLayer('发送康复指导', planDetaiId, 5)
  32. }
  33. var _vm
  34. Vue.component('server-items-detail', {
  35. template: '<div class="p15 ui-grid ui-grid-vertical" style="height:calc(100%);position: relative;">\
  36. <div class="icon-group">\
  37. <i class="icon-edit el-icon-edit-outline mr15"></i>\
  38. <i class="icon-close el-icon-close" @click="onClose"></i>\
  39. </div>\
  40. <div class="c-t-center c-f18 c-333 mt15">服务内容-{{serveriteminfo.name}}</div>\
  41. <div class="c-t-center c-f17 c-666 mt10">{{patientname}}患者{{serveriteminfo.name}}计划</div>\
  42. <div class="c-333 ptb10 c-f17 mt10">指导留言</div>\
  43. <div class="c-f14 c-666" v-if="!message.isImg">{{message.content}}</div>\
  44. <div class="mt10" v-else><img :src="message.content" @click="previewImg(message.content)" style="width:60px;height:60px;" :data-preview-src="message.content" data-preview-group="1"/></div>\
  45. <div v-if="islimit" class="mtb15 ui-grid">\
  46. <div class="ui-col-1">\
  47. <i class="icon icon-prev icon-20" @click="preMonth"></i>\
  48. <span class="currentDay">{{currentDay}}</span>\
  49. <i class="icon icon-next icon-20" @click="nextMonth"></i></span>\
  50. </div>\
  51. <div class="pull-right switch-list" style="text-align:center">\
  52. <span class="rili" :class="{active:(tabStatus==1)}" @click="tabStatus=1"><i class="icon icon-rili icon-20"></i></span>\
  53. <span class="shijianzhou" :class="{active:(tabStatus==2)}" @click="tabStatus=2"><i class="icon icon-liebiao icon-20"></i></span>\
  54. </div>\
  55. </div>\
  56. <div v-if="islimit&&tabStatus==1" class="ui-col-1" style="overflow: hidden; overflow-y: scroll;">\
  57. <div class="calendar-week">\
  58. <div class="flex-box text-center">\
  59. <div class="flex-box-item">周一</div>\
  60. <div class="flex-box-item">周二</div>\
  61. <div class="flex-box-item">周三</div>\
  62. <div class="flex-box-item">周四</div>\
  63. <div class="flex-box-item">周五</div>\
  64. <div class="flex-box-item">周六</div>\
  65. <div class="flex-box-item">周日</div>\
  66. </div>\
  67. </div>\
  68. <div class="calendar-days">\
  69. <div v-for="items in calendarData" class="flex-box">\
  70. <div class="calendar-day" v-for="item in items" @click="viewDetail(item.planDetailIds)" :is-future="item.future">\
  71. <span class="day-number">{{item.day}}</span>\
  72. <div class="task-icon">\
  73. <i v-if="item.myTaskFlag" class="icon icon-flag icon-20"></i>\
  74. <i v-if="item.finishFlag" class="icon icon-check"></i>\
  75. </div>\
  76. <div class="coloured-box">\
  77. <span v-if="item.specialist" class="coloured-ribbon coloured-ribbon-blue">专<br />科</span>\
  78. <span v-if="item.family" class="coloured-ribbon coloured-ribbon-green">家<br />医</span>\
  79. </div>\
  80. <div class="progress-box">\
  81. <div class="progress" :style="{opacity:item.specialist?\'1\':\'0\'}">\
  82. <span>{{(item.specialist && item.specialist.finish)}}/{{(item.specialist && item.specialist.all)}}</span>\
  83. <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" :style="{width: (item.specialist?(item.specialist.finish/item.specialist.all):0)*100+\'%\'}"></div>\
  84. </div>\
  85. <div class="progress" :style="{opacity:item.family?\'1\':\'0\'}">\
  86. <span>{{(item.family && item.family.finish)}}/{{(item.family && item.family.all)}}</span>\
  87. <div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="2" aria-valuemin="0" aria-valuemax="100" :style="{width: (item.family?(item.family.finish/item.family.all):0)*100+\'%\'}"></div>\
  88. </div>\
  89. <p v-if="!item.noService" class="mb0 f12" :class="{\'visibility-hide\':!curTask}" style="line-height: 1;">{{curTaskName || \'&emsp;\'}}</p>\
  90. </div>\
  91. <p v-if="item.noService" class="no-server">无服务项</p>\
  92. </div>\
  93. </div>\
  94. </div>\
  95. </div>\
  96. <div v-show="tabStatus==2" class="ui-col-1 mt10" style="overflow-y: auto">\
  97. <div class="time-axis">\
  98. <div>\
  99. <table class="table">\
  100. <tr>\
  101. <th style="padding-right: 50px;text-align: right;">时间</th>\
  102. <th>项目</th>\
  103. <th>执行人员</th>\
  104. <th>执行地点</th>\
  105. <th class="text-center">相关记录</th>\
  106. <th class="text-center">状态</th>\
  107. </tr>\
  108. <tr v-for="item in timeAxisData" :is-future="item.future">\
  109. <td class="time text-right time-box">\
  110. <p class="mb5">{{item.date}}</p>\
  111. <p class="mb0">{{item.time}}</p>\
  112. <span class="cur-status">{{item.html}}</span>\
  113. </td>\
  114. <td class="project-name mw400">\
  115. <p class="mb5">{{item.name}}</p>\
  116. <p class="ellipsis mb0">{{item.content}}</p>\
  117. </td>\
  118. <td class="executor">{{item.doctorName}}</td>\
  119. <td class="place-of-execution">{{item.hospitalName}}</td>\
  120. <td class="view-task" @click="onViewDetail(item,1)">查看</td>\
  121. <td class="task-status" :class="item.future==-1?\'c-ff3b30\':(item.status==0?\'c-666\':\'\')">{{item.status==0?\'未完成\':(item.status==1?\'已完成\':\'已预约\')}}</td>\
  122. </tr>\
  123. <tr v-if="!timeAxisData.length">\
  124. <td colspan="6" class="f16 ptb10 text-center">\
  125. <img src="../../../images/wushuju_img.png" class="mt50"/>\
  126. <p class="c-666">暂无数据</p>\
  127. </td>\
  128. </tr>\
  129. </table>\
  130. </div>\
  131. </div>\
  132. </div>\
  133. <div class="c-t-center mt15">\
  134. <button v-if="service.isZk&&service.executeDoctorCode!=docInfo.uid" class="btn btn-12b7f5" @click="zdly(service)">指导留言</button>\
  135. <button v-else-if="!service.isZk&&service.executeDoctorCode==docInfo.uid" class="btn btn-12b7f5" @click="zdly(service)">查看留言</button>\
  136. <button v-if="!service.isZk&&serveriteminfo.code==\'1\'" class="btn btn-yuyue" @click="addCompleteRecord()">添加完成记录</button>\
  137. <button v-if="!service.isZk&&serveriteminfo.code==\'4\'" class="btn btn-yuyue" @click="sendSpecialistWeixinMessage(planDetaiId,4)">发送提醒</button>\
  138. <button v-if="!service.isZk&&serveriteminfo.code==\'5\'" class="btn btn-yuyue" @click="kfzd()">发送康复指导</button>\
  139. <button v-if="!service.isZk&&serveriteminfo.code==\'6\'" class="btn btn-yuyue" @click="excuteServerItem(6)">创建随访计划</button>\
  140. <button v-if="!service.isZk&&serveriteminfo.code==\'7\'" class="btn btn-yuyue" @click="sendSpecialistWeixinMessage(planDetaiId,7)">发送提醒</button>\
  141. <button v-if="!service.isZk&&serveriteminfo.code==\'7\'" class="btn btn-12b7f5" @click="qwapp">代预约</button>\
  142. </div>\
  143. <div id="completeRecord" style="display: none; padding: 15px 15px 0;">\
  144. <div class="note-info pt10">\
  145. <p class="f14 c-333">服务完成笔记</p>\
  146. <textarea class="form-control" style="resize: none;" rows="4" placeholder="可备注您的服务记录" v-model="node"></textarea>\
  147. </div>\
  148. <div class="note-info ptb10">\
  149. <p class="f14 c-333">相关记录</p>\
  150. <ul class="upload-box">\
  151. <li class="flex-box" v-for="(img,index) in upImgs">\
  152. <div class="upload-img-box">\
  153. <img :src="img.baseUrl" @click="previewImg(img.baseUrl)"/>\
  154. </div>\
  155. <a class="delete-img" @click="deleteImg(index)">&times;</a>\
  156. </li>\
  157. <li class="flex-box" v-if="upImgs.length<5">\
  158. <span class="add-img">+</span>\
  159. <input type="file" @change="upLoadImgToBase64" class="upload-img" />\
  160. </li>\
  161. </ul>\
  162. </div>\
  163. </div>\
  164. </div>',
  165. props: ['patientname','patientcode', 'planid', 'serveriteminfo'],
  166. data: function() {
  167. return {
  168. ynow: currentGMT.getFullYear(),//年份
  169. mnow: currentGMT.getMonth(),//月份(比实际少一个月---0开始至11)
  170. dnow: currentGMT.getDate(),//当前日
  171. currentDay:null,//带中文格式的当前年月
  172. calendarData:[],//日历数据
  173. timeAxisData: [], //时间轴数据
  174. tabStatus: 1,
  175. title: '',
  176. docInfo: JSON.parse(window.localStorage.getItem('wlyyAgent')),
  177. upImgs: [],
  178. upImgArr: [],
  179. imgData: {
  180. accept: 'image/gif, image/jpeg, image/png, image/jpg',
  181. },
  182. node: '',
  183. layerIndex: undefined,
  184. planDetaiId:'',
  185. service:{
  186. relationRecordImg:{},
  187. messageList:{},
  188. },
  189. message:{isImg:false,content:""},
  190. KFZDlayerIndex: undefined,
  191. islimit: false
  192. }
  193. },
  194. watch:{
  195. tabStatus:function(){
  196. if(this.islimit){
  197. this.goToLoadData(true);
  198. }
  199. }
  200. },
  201. mounted: function() {
  202. _vm = this
  203. this.initData()
  204. },
  205. methods: {
  206. initData: function(){
  207. var vm = this
  208. this.planDetaiId = this.serveriteminfo.id
  209. this.getServiceItem()
  210. },
  211. getServiceItem: function() {
  212. var vm = this;
  213. var loadding = top.layer.load(0, {
  214. shade: false
  215. }); //0代表加载的风格,支持0-2
  216. rehaAPI.serviceItem({
  217. planDetailId: vm.planDetaiId
  218. }).then(function(res) {
  219. top.layer.close(loadding);
  220. if(res.status == 200) {
  221. vm.service = res.data;
  222. var isZK=vm.docInfo.doctorType==1?true:false;
  223. vm.service.isZK=isZK;
  224. if(vm.service.isMyTask==1){//执行者
  225. vm.service.isCK=true;//无法显示按钮
  226. if(vm.docInfo.uid==vm.service.specialistDoctorCode){//说明我自己是创建者
  227. vm.service.isCK=false;
  228. vm.service.isCreate=true;
  229. }
  230. }else{
  231. if(vm.docInfo.uid==vm.service.specialistDoctorCode){//说明我自己是创建者
  232. vm.service.isCreate=true;
  233. }
  234. }
  235. var messageIndex = _.findLastIndex(vm.service.messageList, {doctorType: 1});
  236. if(messageIndex>-1){
  237. var message = vm.service.messageList[messageIndex]
  238. vm.message = vm.getContent(message.content,message.contentType)
  239. }else{
  240. vm.message.content = "无"
  241. }
  242. if(vm.service.frequencyCode){
  243. vm.islimit = true
  244. vm.calendar()
  245. vm.monDetail()
  246. } else {
  247. vm.islimit = false
  248. vm.tabStatus = 2
  249. vm.selectByPlanDetaiId()
  250. }
  251. } else {
  252. showErrorMessage(res.msg)
  253. }
  254. })
  255. },
  256. closeAllLayer: function(name, planDetaiId, type, relationCode){
  257. if(name=='预览康复指导'){
  258. layer.close()
  259. } else if(name=='创建随访计划'){
  260. this.saveRehabilitationOperateRecord(planDetaiId, type, relationCode)
  261. layer.close()
  262. } else if(name=='发送康复指导'){
  263. this.saveRehabilitationOperateRecord(planDetaiId, type)
  264. layer.close(this.KFZDlayerIndex)
  265. }
  266. },
  267. // 提醒患者 num 1康复指导2康复下转3复诊提醒4上门服务提醒5家签提醒
  268. sendSpecialistWeixinMessage: function(planDetaiId, type){
  269. var vm = this
  270. var text = ''
  271. var patientName = vm.patientname
  272. var patientCode = vm.patientcode
  273. if(type==4){ // 上门服务
  274. text = '请问您是否确认提醒'+patientName+'居民预约上门护理服务?'
  275. } else if(type==7){ // 康复复诊
  276. text = '请问您是否确认提醒'+patientName+'居民进行复诊?'
  277. }
  278. var current=layer.confirm(text, {
  279. btn: ['确定', '取消'],
  280. title: "提示"
  281. }, function (index) {
  282. var _type = type == 4? 4:type==7?3:''
  283. var loading = layer.load(0, {shade: false})
  284. var params = {
  285. patient: patientCode,
  286. doctor: vm.docInfo.uid,
  287. type: _type,
  288. relationCode: planDetaiId,
  289. planId: vm.planid
  290. }
  291. rehaAPI.sendSpecialistWeixinMessage(params).then(function(res){
  292. layer.close(loading)
  293. if(res.status == 200){
  294. showSuccessMessage('提交成功!')
  295. if(_type==3 || _type==4){ // 提醒患者后,即认为是已完成
  296. vm.saveRehabilitationOperateRecord(planDetaiId, type)
  297. }
  298. } else {
  299. showErrorMessage(res.msg)
  300. }
  301. })
  302. layer.close(current); //再执行关闭
  303. })
  304. },
  305. // 添加完成记录
  306. addCompleteRecord: function(){
  307. var vm = this
  308. var detailId = this.planDetaiId
  309. var type = vm.serveriteminfo.code
  310. $("#completeRecord").css('display','block')
  311. this.layerIndex = layer.open({
  312. type: 1,
  313. area: ['500px', '450px'],
  314. shade: 0.5,
  315. title: '添加完成记录',
  316. btn: ['确定', '关闭'], //只是为了演示
  317. shadeClose: false, //点击遮罩关闭层
  318. content: $("#completeRecord"),
  319. yes: function(){
  320. vm.saveRehabilitationOperateRecord(detailId, 1)
  321. layer.close(vm.layerIndex)
  322. },
  323. });
  324. },
  325. monDetail:function(){
  326. this.currentDay = this.ynow + '年'+ (this.mnow + 1) +'月';
  327. },
  328. is_leap:function(year) { //判断是否为闰年
  329. return (year%100==0?res=(year%400==0?1:0):res=(year%4==0?1:0));
  330. },
  331. preMonth:function(){ //上一个月
  332. if(this.mnow<=0){
  333. this.mnow=11;
  334. this.ynow=this.ynow-1;
  335. }else{
  336. this.mnow--;
  337. }
  338. this.monDetail();
  339. this.goToLoadData(true);
  340. },
  341. getPreMouth:function(){
  342. var pMnow,pYnow;
  343. if(this.mnow<=0){
  344. pMnow=11;
  345. pYnow=this.ynow-1;
  346. }else{
  347. pMnow=this.mnow-1;
  348. pYnow=this.ynow;
  349. }
  350. var m_days=new Array(31,(28+this.is_leap(pYnow)),31,30,31,30,31,31,30,31,30,31); //每个月的天数
  351. return {
  352. days:m_days[pMnow],
  353. date:pYnow+'-'+(++pMnow>=10?pMnow:"0"+pMnow)
  354. }
  355. },
  356. nextMonth:function(){ //下一个月
  357. if(this.mnow>=11){
  358. this.mnow=0;
  359. this.ynow=this.ynow+1;
  360. }else{
  361. this.mnow++;
  362. }
  363. this.monDetail();
  364. this.goToLoadData(true);
  365. },
  366. getNextMouth:function(){
  367. var nMnow,nYnow;
  368. if(this.mnow>=11){
  369. nMnow=0;
  370. nYnow=this.ynow+1;
  371. }else{
  372. nMnow=this.mnow+1;
  373. nYnow=this.ynow;
  374. }
  375. var m_days=new Array(31,(28+this.is_leap(nYnow)),31,30,31,01,31,31,30,31,30,31); //每个月的天数
  376. return {
  377. days:m_days[nMnow],
  378. date:nYnow+'-'+(++nMnow>=10?nMnow:"0"+nMnow)
  379. }
  380. },
  381. goToLoadData:function(flag){//flag是否更新数据
  382. this.tabStatus==1 && (!this.calendarData.length || flag) && this.calendar();
  383. this.tabStatus==2 && (!this.timeAxisData.length || flag) && this.timeAxis();
  384. },
  385. calendar:function(){
  386. var nlstr = new Date(this.ynow,this.mnow,1); //当月第一天
  387. var firstday = nlstr.getDay()-1;//第一天星期几,默认是周日 我们改成周一
  388. firstday=firstday==-1?6:firstday;//如果是-1,说明当月的第一天是周日
  389. var m_days=new Array(31,(28+this.is_leap(this.ynow)),31,30,31,30,31,31,30,31,30,31); //每个月的天数
  390. var tr_str=Math.ceil((m_days[this.mnow] + firstday)/7); //当前月天数+第一天是星期几的数值 获得 表格行数
  391. var c_days=m_days[this.mnow];//当前月份的天数
  392. var p_arr=this.getPreMouth();
  393. var n_arr=this.getNextMouth();
  394. var i,k,idx,date_str;
  395. var dataArr=[];//天数/年月
  396. for(i=0;i<tr_str;i++) { //表格的行
  397. for(k=0;k<7;k++) { //表格每行的单元格
  398. idx=i*7+k; //单元格自然序列号
  399. date_str=idx-firstday+1; //计算日期
  400. var __ym;
  401. if(date_str<=0){//过滤无效日期(小于等于零的、大于月总天数的)
  402. date_str=date_str+p_arr['days'];//当前日期+上个月的天数就是上个月的日期
  403. __ym=p_arr['date'];
  404. }else if(date_str>c_days){
  405. date_str=date_str-c_days;//下个月的日期就是这个月的天数-当月的天数
  406. __ym=n_arr['date'];
  407. }else{
  408. __ym=this.ynow+'-'+(this.mnow>=9?"":"0")+(this.mnow+1);
  409. }
  410. dataArr.push({
  411. day:date_str,
  412. date:__ym
  413. });
  414. }
  415. }
  416. this.__Data=dataArr;
  417. this.calenderPlanDetail();
  418. },
  419. // 日历有计划数据处理
  420. planHandleData: function(data, day, mounth) {
  421. var item = data;
  422. item.day = day;
  423. if(mounth) {item.mounth = mounth}
  424. var finishFlag=false
  425. var sFlag=false;
  426. var fFlag=false;
  427. if(item.specialist){
  428. if(item.specialist.all==item.specialist.finish){
  429. sFlag=true;
  430. }
  431. }else{
  432. sFlag = true;
  433. }
  434. if(item.family){
  435. if(item.family.all==item.family.finish){
  436. fFlag = true;
  437. }
  438. }else{
  439. fFlag = true;
  440. }
  441. finishFlag = sFlag && fFlag;
  442. item.finishFlag=finishFlag;
  443. return item
  444. },
  445. calenderPlanDetail:function(){
  446. var vm=this;
  447. var __days=vm.__Data;
  448. var lastDay=(__days.concat()).pop().day;
  449. lastDay=lastDay>9?lastDay:'0'+lastDay;
  450. if(vm.searchTask || vm.status || vm.status == 0) {
  451. vm.isFastSearch = true
  452. } else {
  453. vm.isFastSearch = false
  454. }
  455. var params={
  456. executeStartTime: vm.isFastSearch ? '' : __days[0].date+'-'+__days[0].day+' 00:00:00',//日历开始时间(格式:yyyy-MM-dd HH:mm:ss)
  457. executeEndTime: vm.isFastSearch ? '' : (__days.concat()).pop().date+'-'+lastDay+' 23:59:59',//日历结束时间(格式:yyyy-MM-dd HH:mm:ss)
  458. planId:vm.planid,//计划id
  459. searchTask: vm.serveriteminfo.code,//快速查找任务:(1、我的任务,2、健康教育,3、健康指导,4、随访)
  460. status: null,//任务状态(0未完成,1已完成,2已预约)
  461. }
  462. rehaAPI.calendarPlanDetail(params).then(function(res){
  463. vm.curTask=vm.searchTask;
  464. vm.curTaskName=vm.searchTaskName;
  465. vm.calendarData=[];
  466. var list = [];
  467. if(res.status==200){
  468. var data=res.data
  469. // 快速查找
  470. if(vm.isFastSearch) {
  471. vm.searchData = []
  472. var searchData0 = [],
  473. searchData1 = [],
  474. searchData2 = [];
  475. for(var setM = 1; setM <= 12; setM++) {
  476. var _setM = setM > 9 ? setM : '0' + setM,
  477. _setY = new Date().getFullYear();
  478. var data0 = [],
  479. data1 = [],
  480. data2 = [];
  481. for(var i in data) {
  482. var getY = i.split("-")[0],
  483. getM = i.split("-")[1],
  484. getD = i.split("-")[2];
  485. // 去年
  486. if(_setY - 1 == getY && _setM == getM) {
  487. var item = vm.planHandleData(data[i], getD, getM)
  488. data0.push(item)
  489. data.length && data.splice(i,1);
  490. } else if(_setY == getY && _setM == getM) { // 今年
  491. var item = vm.planHandleData(data[i], getD, getM)
  492. data1.push(item)
  493. data.length && data.splice(i,1);
  494. } else if(_setY + 1 == getY && _setM == getM) { // 明年
  495. var item = vm.planHandleData(data[i], getD, getM)
  496. data2.push(item)
  497. data.length && data.splice(i,1);
  498. }
  499. }
  500. if(data0.length) {
  501. var dataSort = vm.daysSort(data0)
  502. var addlen = (dataSort.length + 1) % 7 ? (dataSort.length + 1) % 7 : 7
  503. for(var i = 0; i < 7 - addlen; i++) {
  504. dataSort.push({
  505. noService:true
  506. })
  507. }
  508. searchData0.push(dataSort)
  509. }
  510. if(data1.length) {
  511. var dataSort = vm.daysSort(data1)
  512. var addlen = (dataSort.length + 1) % 7 ? (dataSort.length + 1) % 7 : 7
  513. for(var i = 0; i < 7 - addlen; i++) {
  514. dataSort.push({
  515. noService:true
  516. })
  517. }
  518. searchData1.push(dataSort)
  519. }
  520. if(data2.length) {
  521. var dataSort = vm.daysSort(data2)
  522. var addlen = (dataSort.length + 1) % 7 ? (dataSort.length + 1) % 7 : 7
  523. for(var i = 0; i < 7 - addlen; i++) {
  524. dataSort.push({
  525. noService:true
  526. })
  527. }
  528. searchData2.push(dataSort)
  529. }
  530. }
  531. if(searchData0.length) {vm.searchData.push(searchData0)}
  532. if(searchData1.length) {vm.searchData.push(searchData1)}
  533. if(searchData2.length) {vm.searchData.push(searchData2)}
  534. return false;
  535. }
  536. // 正常日历
  537. var _currentTimeStamp=+new Date(new Date().setHours(0, 0, 0, 0));
  538. for(var i in __days){
  539. var _key=__days[i].date+'-'+(__days[i].day>9?__days[i].day:'0'+__days[i].day);
  540. var item={
  541. noService:true,
  542. day:__days[i].day
  543. };
  544. for(var j in data){
  545. if(_key==j){
  546. item = vm.planHandleData(data[j], __days[i].day)
  547. data.length && data.splice(j,1);
  548. break;
  549. }
  550. }
  551. var thatTime=+new Date(_key)-8*60*60*1000;
  552. var future=_currentTimeStamp>thatTime?0:(_currentTimeStamp==thatTime?1:2);
  553. item.future=future;
  554. list.push(item);
  555. // vm.calendarData.push(item);
  556. }
  557. vm.calendarData = _.chunk(list, 7)
  558. }
  559. })
  560. },
  561. //时间轴请求
  562. timeAxis:function(){
  563. var m_days=new Array(31,(28+this.is_leap(this.ynow)),31,30,31,30,31,31,30,31,30,31); //每个月的天数
  564. var c_days=m_days[this.mnow];//当前月份的天数
  565. var __ym=this.ynow+'-'+(this.mnow>=9?"":"0")+(this.mnow+1);
  566. var dataArr=[];//天数/年月
  567. for(;c_days>0;c_days--){
  568. dataArr.push({
  569. day:c_days,
  570. date:__ym
  571. });
  572. }
  573. this.__xData=dataArr;
  574. this.calendarPlanDetailList();
  575. },
  576. //限频次 时间轴请求
  577. calendarPlanDetailList:function(){
  578. var vm=this;
  579. var __days=vm.__xData;
  580. var lastDay=(__days.concat()).pop().day;
  581. lastDay=lastDay>9?lastDay:'0'+lastDay;
  582. var params={
  583. executeEndTime:__days[0].date+'-'+__days[0].day+' 00:00:00',//日历开始时间(格式:yyyy-MM-dd HH:mm:ss)
  584. executeStartTime:(__days.concat()).pop().date+'-'+lastDay+' 23:59:59',//日历结束时间(格式:yyyy-MM-dd HH:mm:ss)
  585. planId:vm.planid,//计划id
  586. searchTask:vm.serveriteminfo.code, // 服务项
  587. status: null, //任务状态(0未完成,1已完成,2已预约)
  588. }
  589. rehaAPI.calendarPlanDetailList(params).then(function(res){
  590. if(res.status==200){
  591. var _currentTimeStamp=+new Date(new Date().setHours(0, 0, 0, 0))
  592. vm.timeAxisData=_.map(res.data||{},function(o){
  593. var _time=o.executeTime.split(' ');
  594. var thatTime=+new Date(_time[0]);
  595. var future=_currentTimeStamp>thatTime?0:(_currentTimeStamp==thatTime?1:2);
  596. (o.status==0 && _currentTimeStamp>thatTime) && (future=-1)
  597. var _html=o.status==2?'预':(future==-1?'逾':'');
  598. _html=future==1?'今':_html;
  599. if(_html=='预') future=3;
  600. o.html=_html
  601. o.date=_time[0];
  602. o.time=_time[1];
  603. o.future=future;
  604. o.doctorName = o.doctor_name
  605. o.hospitalName = o.hospital_name
  606. return o;
  607. })||[];
  608. } else {
  609. showErrorMessage(res.msg)
  610. }
  611. })
  612. },
  613. //不限频次 时间轴请求
  614. selectByPlanDetaiId: function(){
  615. var vm = this
  616. var params = {
  617. planId: this.planid,
  618. code: vm.serveriteminfo.code,
  619. page: 1,
  620. pagesize: 10000
  621. }
  622. rehaAPI.selectByPlanDetaiId(params).then(function(res){
  623. if(res.status == 200){
  624. var arr = []
  625. if(res.data.list&&res.data.list.length>0){
  626. var list = res.data.list
  627. var _currentTimeStamp=+new Date(new Date().setHours(0, 0, 0, 0))
  628. console.log('_currentTimeStamp=======', _currentTimeStamp)
  629. arr=_.map(list||[],function(o){
  630. var _time=o.completeTime.split(' ');
  631. var thatTime=+new Date(_time[0]);
  632. var future=_currentTimeStamp>thatTime?0:(_currentTimeStamp==thatTime?1:2);
  633. (o.status==0 && _currentTimeStamp>thatTime) && (future=-1)
  634. var _html=o.status==2?'预':(future==-1?'逾':'');
  635. _html=future==1?'今':_html;
  636. if(_html=='预') future=3;
  637. o.html=_html
  638. o.date=_time[0];
  639. o.time=_time[1];
  640. o.future=future;
  641. return o;
  642. })||[];
  643. }
  644. vm.timeAxisData = arr
  645. } else {
  646. showErrorMessage(res.msg)
  647. }
  648. })
  649. },
  650. zdly: function(data) {
  651. var vm = this
  652. var otherCode, otherName;
  653. var planDetailId = data.planDetaiId;
  654. if(vm.docInfo.doctorType == 1) {
  655. otherCode = data.familyDoctorCode;
  656. otherName = data.familyDoctorName;
  657. } else {
  658. otherCode = data.specialistDoctorCode;
  659. otherName = data.specialistDoctorName;
  660. }
  661. top.layer.open({
  662. type: 2,
  663. area: ['80%', '600px'],
  664. shade: 0.5,
  665. title: '指导留言',
  666. fixed: true, //不固定
  667. maxmin: true,
  668. closeBtn: 1,
  669. shift: 5,
  670. shadeClose: false, //点击遮罩关闭层
  671. content: '../../consulting/html/consulting.html?otherCode=' + otherCode + '&otherName=' + encodeURI(otherName) + '&planDetailId=' + planDetailId,
  672. end: function() { // 未点击确定按钮,点击关闭按钮      
  673. vm.initData()   
  674. }
  675. });
  676. },
  677. //康复指导
  678. kfzd:function(){
  679. var vm=this
  680. this.KFZDlayerIndex = layer.open({
  681. type: 2,
  682. // offset: ['100px'], //右下角弹出
  683. area: ['660px', '650px'],
  684. shade: 0.5,
  685. title: '康复指导',
  686. fixed: true, //不固定
  687. maxmin: true,
  688. closeBtn: 1,
  689. shift: 5,
  690. shadeClose: false, //点击遮罩关闭层
  691. content:'../../rehabilitation/html/rehabilitation_guidance.html?patient='+vm.patientcode+'&planDetaiId='+vm.planDetaiId+'&planId='+vm.planid,
  692. end: function() { // 未点击确定按钮,点击关闭按钮
  693. vm.initData()   
  694. }
  695. });
  696. },
  697. upLoadImgToBase64: function() {
  698. var vm = this;
  699. var img1 = event.target.files[0];
  700. var reader = new FileReader();
  701. var type = img1.type; //文件的类型,判断是否是图片
  702. var size = img1.size; //文件的大小,判断图片的大小
  703. if(this.imgData.accept.indexOf(type) == -1) {
  704. alert('请选择我们支持的图片格式!');
  705. return false;
  706. }
  707. if(size > 3145728) {
  708. alert('请选择3M以内的图片!');
  709. return false;
  710. }
  711. reader.readAsDataURL(img1);
  712. reader.onload = function(e) {
  713. vm.upImgs.push({
  714. baseUrl: e.target.result
  715. });
  716. vm.upImgArr.push(img1);
  717. vm.uploadImg(vm.upImgArr);
  718. }
  719. },
  720. //上传图片
  721. uploadImg: function(data) {
  722. var vm = this;
  723. var len = data.length;
  724. if(len==0) {
  725. return
  726. } else {
  727. var file = data[len - 1];
  728. var formData = new FormData();
  729. formData.append('file', file);
  730. rehaAPI.upload(formData).then(function(res) {
  731. if(res.status == 200) {
  732. vm.upImgs[len - 1].img = res.data;
  733. data.pop();
  734. vm.$forceUpdate()
  735. vm.uploadImg(data);
  736. } else {
  737. layer.msg(res.msg, {
  738. icon: 5
  739. });
  740. }
  741. })
  742. }
  743. },
  744. saveRehabilitationOperateRecord:function(planDetailId, type, relationCode){
  745. var vm=this
  746. var patientName = vm.patientname
  747. var patientCode = vm.patientcode
  748. var _image = [];
  749. for(var i in vm.upImgs) {
  750. _image.push(vm.upImgs[i].img);
  751. }
  752. var params={
  753. rehabilitationDetailId: planDetailId,
  754. node: vm.node||'',
  755. patientCode: patientCode,
  756. doctorCode: vm.docInfo.uid,
  757. relationRecordType: type,
  758. relationRecordCode: '',
  759. relationRecordImg: '',
  760. status: 0
  761. }
  762. rehaAPI.saveRehabilitationOperateRecord({dataJson:JSON.stringify(params)}).then(function(res){
  763. if(res.status==200){
  764. if(type==1){
  765. vm.updateNoteAndImageRehabilitationOperate(planDetailId)
  766. }else if(type==6){
  767. vm.updateRelationCodeByDetailId(planDetailId, relationCode)
  768. } else {
  769. vm.updateNoteAndImageRehabilitationOperate(planDetailId)
  770. }
  771. }else {
  772. showErrorMessage(res.msg)
  773. }
  774. })
  775. },
  776. updateNoteAndImageRehabilitationOperate: function(planDetailId, relationCode) {
  777. var vm = this;
  778. var _image = [];
  779. for(var i in vm.upImgs) {
  780. _image.push(vm.upImgs[i].img);
  781. }
  782. var params = {
  783. planDetailId: planDetailId,
  784. node: vm.node||'',
  785. image: JSON.stringify(_image)||''
  786. }
  787. if(relationCode){
  788. params['relationCode'] = relationCode
  789. }
  790. var loadding = top.layer.load(0, {
  791. shade: false
  792. }); //0代表加载的风格,支持0-2
  793. rehaAPI.updateNoteAndImageRehabilitationOperate(params).then(function(res) {
  794. top.layer.close(loadding);
  795. if(res.status == 200) {
  796. vm.initData()
  797. }else {
  798. showErrorMessage(res.msg)
  799. }
  800. })
  801. },
  802. onViewDetail: function(item, type){
  803. var planids, recordId;
  804. if(this.islimit){
  805. planids = item.id
  806. } else {
  807. planids = item.id
  808. recordId = item.recordId
  809. }
  810. this.viewDetail(planids,type, recordId)
  811. },
  812. viewDetail:function(planids,type, recordId){
  813. var vm=this;
  814. if(!planids){
  815. layer.msg('无服务项',{icon:5})
  816. return ;
  817. }
  818. if(type==1){ // 单个服务项
  819. top.layer.open({
  820. type: 2,
  821. area: ['800px', '700px'],
  822. shade: 0.5,
  823. title: '服务项目内容',
  824. fixed: true, //不固定
  825. maxmin: true,
  826. closeBtn:1,
  827. shift: 5,
  828. shadeClose: false, //点击遮罩关闭层
  829. content: '../../rehabilitation/html/guide_the_message.html?planid='+planids+'&oprateType=1'+'&pId='+vm.planid+'&patient='+vm.patientcode+'&patientName='+vm.patientname+'&recordId='+recordId,
  830. });
  831. return ;
  832. }
  833. layer.open({ // 康复计划的所有服务项
  834. type: 2,
  835. area: ['800px', '700px'],
  836. shade: 0.5,
  837. title: '服务项目内容',
  838. fixed: true, //不固定
  839. maxmin: true,
  840. closeBtn:1,
  841. shift: 5,
  842. shadeClose: false, //点击遮罩关闭层
  843. content: '../../rehabilitation/html/service_item_content.html?planids='+planids+'&planId='+vm.planid+'&patient='+vm.patientcode+'&patientName='+vm.patientname,
  844. end:function(){
  845. vm.goToLoadData(true);
  846. }
  847. });
  848. },
  849. onClose: function(){
  850. this.$emit('onclose')
  851. },
  852. qwapp:function(){
  853. layer.msg('请前往app处理',{icon:5});
  854. },
  855. getContent: function(value,type) {
  856. var res=value;
  857. if(type==2 || type==9){
  858. res = "<img src='"+httpRequest.getImgUrl(res)+"' width='100px'>";
  859. }else if(type==3){
  860. res = '【语音】';
  861. }else if(type==19){
  862. res = '【聊天记录】';
  863. }else if(type==12){
  864. res = '【视频】';
  865. }
  866. return res;
  867. },
  868. previewImg: function(url){
  869. imgShow("#outerdiv", "#innerdiv", "#bigimg", url);
  870. }
  871. }
  872. })
  873. function imgShow(outerdiv, innerdiv, bigimg, _this){
  874. var src = _this.attr("src");//获取当前点击的pimg元素中的src属性
  875. $(bigimg).attr("src", src);//设置#bigimg元素的src属性
  876. /*获取当前点击图片的真实大小,并显示弹出层及大图*/
  877. $("<img/>").attr("src", src).load(function(){
  878. var windowW = $(window).width();//获取当前窗口宽度
  879. var windowH = $(window).height();//获取当前窗口高度
  880. var realWidth = this.width;//获取图片真实宽度
  881. var realHeight = this.height;//获取图片真实高度
  882. var imgWidth, imgHeight;
  883. var scale = 0.8;//缩放尺寸,当图片真实宽度和高度大于窗口宽度和高度时进行缩放
  884. if(realHeight>windowH*scale) {//判断图片高度
  885. imgHeight = windowH*scale;//如大于窗口高度,图片高度进行缩放
  886. imgWidth = imgHeight/realHeight*realWidth;//等比例缩放宽度
  887. if(imgWidth>windowW*scale) {//如宽度扔大于窗口宽度
  888. imgWidth = windowW*scale;//再对宽度进行缩放
  889. }
  890. } else if(realWidth>windowW*scale) {//如图片高度合适,判断图片宽度
  891. imgWidth = windowW*scale;//如大于窗口宽度,图片宽度进行缩放
  892. imgHeight = imgWidth/realWidth*realHeight;//等比例缩放高度
  893. } else {//如果图片真实高度和宽度都符合要求,高宽不变
  894. imgWidth = realWidth;
  895. imgHeight = realHeight;
  896. }
  897. $(bigimg).css("width",imgWidth);//以最终的宽度对图片缩放
  898. var w = (windowW-imgWidth)/2;//计算图片与窗口左边距
  899. var h = (windowH-imgHeight)/2;//计算图片与窗口上边距
  900. $(innerdiv).css({"top":h, "left":w});//设置#innerdiv的top和left属性
  901. $(outerdiv).fadeIn("fast");//淡入显示#outerdiv及.pimg
  902. });
  903. $(outerdiv).click(function(){//再次点击淡出消失弹出层
  904. $(this).fadeOut("fast");
  905. });
  906. }