date-source.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. (function(){
  2. Vue.component('date-scource', {
  3. template: '<section class="mt30" name="date-section">\
  4. <p class="c-f18">就诊日期</p>\
  5. <div class="div-table">\
  6. <div class="table-row">\
  7. <div class="table-cell arrow-cell" :class="{\'active\': page!=1}" @click="prePage"><i class="fa fa-caret-left c-f20 c-909090"></i></div>\
  8. <div v-for="d in planDate" class="table-cell">{{d.date}} {{d.day}}</div>\
  9. <div class="table-cell arrow-cell" :class="{\'active\': page!=totalPage}" @click="nextPage"><i class="fa fa-caret-right c-f20 c-909090"></i></div>\
  10. </div>\
  11. <div class="table-row">\
  12. <div class="table-cell arrow-cell c-f16 bgc-ebf4f3">上午</div>\
  13. <div class="table-cell" v-for="(item, index) in amData" :class="{\'active\': item.arrangeID == arrangeid && arrangeid!=undefined}" @click="getNumbers(item.arrangeID)">\
  14. <span :class="getColor(item.arrangeStatus, item.numberStatus)">{{getStatusName(item.arrangeStatus, item.numberStatus)}}</span><br/>\
  15. <span class="yy-tag" :class="{\'active\': item.arrangeStatus==1 && item.numberStatus==1}">预约</span>\
  16. </div>\
  17. <div class="table-cell arrow-cell"></div>\
  18. </div>\
  19. <div class="table-row">\
  20. <div class="table-cell arrow-cell c-f16 bgc-ebf4f3">下午</div>\
  21. <div class="table-cell" v-for="(item, index) in pmData" :class="{\'active\': item.arrangeID == arrangeid && arrangeid!=undefined}" @click="getNumbers(item.arrangeID)">\
  22. <span :class="getColor(item.arrangeStatus, item.numberStatus)">{{getStatusName(item.arrangeStatus, item.numberStatus)}}</span><br/>\
  23. <span class="yy-tag" :class="{\'active\': item.arrangeStatus==1 && item.numberStatus==1}">预约</span>\
  24. </div>\
  25. <div class="table-cell arrow-cell"></div>\
  26. </div>\
  27. </div>\
  28. <p class="c-f18 mt30">就诊时间</p>\
  29. <div class="clearfix">\
  30. <div v-for="it in numberSource" class="c-20 fl mb20">\
  31. <div class="source-tag c-t-center" :class="{\'active\': registerNumber==it.numberSN}" @click="chooseNumber(it.numberSN, it.modeId)">\
  32. {{it.commendTime || it.commendScope}}\
  33. </div>\
  34. </div>\
  35. </div>\
  36. <div class="mt30 c-t-center mb50">\
  37. <button class="btn btn-primary" @click="submitForm">确认预约</button>\
  38. </div>\
  39. </section>',
  40. props: ['doctorsn', 'arrangeid'],
  41. data: function(){
  42. return {
  43. planDate: [],
  44. selectedDate: 0,
  45. amData: [],
  46. pmData: [],
  47. numberSource: [],
  48. registerNumber: '',
  49. modeId: '', //号源池模式:1:实时号源池, 0:非实时号源池
  50. baseInfo: {}, //记录医生医院等基础信息
  51. specialPrice: 0, //挂号费(单位:分)
  52. page: 1 , //日期分页,当有号源的日期数超过了7天,则需要分页展示
  53. totalPage: 1,
  54. pageSize: 7
  55. }
  56. },
  57. mounted: function(){
  58. getDoctorInfo(this);
  59. getNumbers(this.arrangeid, this);
  60. },
  61. methods: {
  62. getStatusName: function(arrangeStatus, numberStatus){
  63. return getStatusName(arrangeStatus, numberStatus);
  64. },
  65. getColor: function(arrangeStatus, numberStatus){
  66. return getStatusColor(arrangeStatus, numberStatus);
  67. },
  68. getNumbers: function(code, specialPrice){
  69. if(code && this.arrangeid != code){
  70. getNumbers(code, this);
  71. this.arrangeid = code;
  72. }
  73. },
  74. chooseNumber: function(id, modeId){
  75. this.registerNumber = id;
  76. this.modeId = modeId;
  77. },
  78. prePage: function(){
  79. if(this.page > 1){
  80. this.page --;
  81. }
  82. },
  83. nextPage: function(){
  84. if(this.page < this.totalPage){
  85. this.page ++;
  86. }
  87. },
  88. submitForm: function(){
  89. if(!this.arrangeid){
  90. dialog({
  91. content: "请选择就诊日期",
  92. contentType:'tipsbox',
  93. skin:'bk-popup',
  94. quickClose: true
  95. }).showModal();
  96. return false;
  97. }
  98. if(!this.registerNumber){
  99. dialog({
  100. content: "请选择就诊时间",
  101. contentType:'tipsbox',
  102. skin:'bk-popup',
  103. quickClose: true
  104. }).showModal();
  105. return false;
  106. }
  107. var oauthInfo = JSON.parse(sessionStorage.getItem("oauthInfo"));
  108. if(!oauthInfo){
  109. //要求登录
  110. dialog({
  111. title: "登录提醒",
  112. skin: "my-dialog",
  113. content: "需要登录才可以预约",
  114. okValue: "跳转去登录",
  115. ok: function(){
  116. window.location.href = "../../login/html/login.html";
  117. },
  118. cancelValue: "我知道了",
  119. cancel: function(){}
  120. }).showModal();
  121. return false;
  122. }
  123. submitForm(this);
  124. }
  125. }
  126. });
  127. //获取医生基本信息
  128. function getDoctorInfo(vm){
  129. var params = {
  130. doctorSn: vm.doctorsn
  131. }
  132. appointmentAPI.querySimpleDoctorBySn(params).then(function(res){
  133. if(res.successFlg){
  134. if(res.obj.Code == "10000"){
  135. //触发父类获取医生信息
  136. EventBus.$emit("get-doctor-info", {docInfo: res.obj});
  137. getArrangeDate(vm, res.obj)
  138. vm.baseInfo = res.obj;
  139. }else{
  140. showErrorMessage(res.obj.Message);
  141. }
  142. }else{
  143. showErrorMessage(res.errorMsg);
  144. }
  145. })
  146. }
  147. //获取医生排班信息
  148. function getArrangeDate(vm, docInfo){
  149. var params = {
  150. hospitalId: docInfo.hospitalId, //'2h+klDvGn+Q=',
  151. hosDeptId: docInfo.hosDeptId, //'vp0N0lqGZgA=',
  152. doctorSn: vm.doctorsn, //'1jGMsR3q3nZawh/iQIuzYg==', //科室和医生必选一
  153. registerDate: '', //就诊日期 yyyy-MM-dd
  154. pageIndex: vm.page,
  155. pageSize: vm.pageSize
  156. };
  157. appointmentAPI.queryGhtArrangeWater(params).then(function(res){
  158. if(res.successFlg){
  159. if(res.obj.Code == "10000"){
  160. var list = res.obj.Result;
  161. //先groupby结果,判断有几天号源
  162. var dateGroup = _.groupBy(list, 'registerDate');
  163. console.log(dateGroup);
  164. for(key in dateGroup){
  165. var d = new Date(key);
  166. vm.planDate.push({
  167. date: d.format("MM/dd"),
  168. day: getWeekDay(d.getDay())
  169. }); //日期记录
  170. var objArr = dateGroup[key];
  171. if(objArr.length == 1){
  172. var obj = objArr[0];
  173. if(obj.timeId == 1){ //1 上午 2下午 3 晚上
  174. vm.amData.push(obj);
  175. vm.pmData.push({
  176. arrangeID: '', //没有排号
  177. arrangeStatus: 0,
  178. });
  179. }else{
  180. vm.pmData.push(obj);
  181. vm.amData.push({
  182. arrangeID: '', //没有排号
  183. arrangeStatus: 0,
  184. });
  185. }
  186. }else if(objArr.length == 2){
  187. for(j=0; j<objArr.length; j++){
  188. var obj = objArr[j];
  189. if(obj.timeId == 1){ //1 上午 2下午 3 晚上
  190. vm.amData.push(obj);
  191. }
  192. if(obj.timeId == 2 || obj.timeId == 3){
  193. vm.pmData.push(obj);
  194. }
  195. }
  196. }
  197. }
  198. }else{
  199. showErrorMessage(res.obj.Message);
  200. }
  201. }else{
  202. showErrorMessage(res.errorMsg);
  203. }
  204. });
  205. }
  206. //获取号源信息
  207. function getNumbers(code, vm){
  208. var params = {
  209. arrangeID: code
  210. };
  211. appointmentAPI.queryNumbers(params).then(function(res){
  212. if(res.successFlg){
  213. if(res.obj.Code == "10000"){
  214. vm.numberSource = res.obj.Result;
  215. }else{
  216. showErrorMessage(res.Message);
  217. }
  218. }else{
  219. showErrorMessage(res.errorMsg);
  220. }
  221. });
  222. }
  223. //将挂号信息提交给下一个页面去确认
  224. function submitForm(vm){
  225. var dateInfo = {};
  226. var arr = _.where(vm.amData, {arrangeID: parseInt(vm.arrangeid)});
  227. if(arr.length == 0){
  228. arr = _.where(vm.pmData, {arrangeID: parseInt(vm.arrangeid)});
  229. }
  230. dateInfo = arr[0];
  231. var numberInfo = _.findWhere(vm.numberSource, {numberSN: vm.registerNumber});
  232. var patientInfo = JSON.parse(window.sessionStorage.getItem("oauthInfo"));
  233. //请求接口提交挂号单(我们自己系统)
  234. var params = {
  235. patientName: patientInfo.realName,
  236. userId: patientInfo.id,
  237. cardType: 1, //默认身份证
  238. cardNo: patientInfo.idCardNo,
  239. phoneNo: patientInfo.telephone,
  240. hospitalName: vm.baseInfo.hosName,
  241. hospitalId: vm.baseInfo.hospitalId,
  242. deptName: vm.baseInfo.deptName,
  243. deptId: vm.baseInfo.hosDeptId,
  244. doctorName: vm.baseInfo.doctorName,
  245. doctorId: vm.baseInfo.doctorSn,
  246. lczcName: vm.baseInfo.lczcName,
  247. photoUri: vm.baseInfo.photoUri,
  248. registerDate: dateInfo.registerDate,
  249. timeId: dateInfo.timeId,
  250. commendTime: numberInfo.commendTime || numberInfo.commendScope,
  251. serialNo: numberInfo.serialNo,
  252. invalidDate: dateInfo.invalidDate,
  253. originType: 1, //来源类型,1:PC,2:APP,
  254. registerType: 1 //挂号方式,1:预约挂号,2:现场挂号
  255. };
  256. appointmentAPI.createRegistration({entityJson: JSON.stringify(params)}).then(function(res){
  257. if(res.successFlg){
  258. var id = res.obj.id;
  259. //存储这些数据传递去确认页面
  260. window.localStorage.setItem("dateInfo", JSON.stringify(dateInfo));
  261. window.localStorage.setItem("numberInfo", JSON.stringify(numberInfo));
  262. window.localStorage.setItem("baseInfo", JSON.stringify(vm.baseInfo));
  263. //跳转去确认信息页面
  264. window.location.href = "confirm-info.html?id="+id;
  265. }else{
  266. showErrorMessage(res.errorMsg);
  267. }
  268. })
  269. }
  270. function getWeekDay(val){
  271. switch(val){
  272. case 0:
  273. return "周日";
  274. break;
  275. case 1:
  276. return "周一";
  277. break;
  278. case 2:
  279. return "周二";
  280. break;
  281. case 3:
  282. return "周三";
  283. break;
  284. case 4:
  285. return "周四";
  286. break;
  287. case 5:
  288. return "周五";
  289. break;
  290. case 6:
  291. return "周六";
  292. break;
  293. }
  294. }
  295. function getStatusName(arrangeStatus, numberStatus){
  296. //arrangeStatus: 1正常 2停诊 3已取消 4暂停预约,自定义: 5无安排
  297. //numberStatus: 1可约 2已约满或无号源
  298. switch(arrangeStatus){
  299. case 1:
  300. if(numberStatus==1){
  301. return "可预约";
  302. }else{
  303. return "已满"
  304. }
  305. break;
  306. case 2:
  307. return "停诊";
  308. break;
  309. case 3:
  310. return "已取消";
  311. break;
  312. case 4:
  313. return "暂停预约";
  314. break;
  315. default:
  316. return "无安排";
  317. break;
  318. }
  319. }
  320. function getStatusColor(arrangeStatus, numberStatus){
  321. switch(arrangeStatus){
  322. case 1:
  323. if(numberStatus==1){
  324. return "";
  325. }else{
  326. return "c-909090"
  327. }
  328. break;
  329. case 2:
  330. return "c-ffb5b6";
  331. break;
  332. case 3:
  333. case 4:
  334. return "c-909090";
  335. break;
  336. default:
  337. return "c-f3be88";
  338. break;
  339. }
  340. }
  341. function showErrorMessage(content){
  342. layer.msg(content, {
  343. icon: 2,
  344. time: 3000
  345. });
  346. }
  347. })()