sanshitijiao.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  1. Request = GetRequest();
  2. var chooseType = Request["type"];//界面传送的类型 0不定义类型 1.慢病咨询 2.家庭医生咨询 6.名医咨询
  3. var doctorCode = Request["doctorCode"];
  4. var patientName = window.localStorage.getItem('nowPatientName');
  5. var workTime = "";//医生工作时间
  6. var doctorName = "";//医生名称
  7. var teamCode = ""; //团队名称
  8. var signCode = "";//签约记录的code
  9. updateTitle();
  10. //修改header 的标题
  11. function updateTitle(){
  12. //需要jQuery
  13. var $body = $('body');
  14. if(chooseType!=6){
  15. document.title = '新增医生咨询';
  16. }
  17. // hack在微信等webview中无法修改document.title的情况
  18. var $iframe = $('<iframe src="/favicon.ico"></iframe>');
  19. $iframe.on('load',function() {
  20. setTimeout(function() {
  21. $iframe.off('load').remove();
  22. }, 0);
  23. }).appendTo($body);
  24. }
  25. $(function(){
  26. if(chooseType==1){
  27. $(".span-type").html("慢病管理");
  28. querySignType();//填充下拉框
  29. }else if(chooseType==2){
  30. $(".span-type").html("家庭医生");
  31. querySignType();//填充下拉框
  32. }else if(chooseType==6){
  33. $(".span-type").html("名医咨询");
  34. $('#txtTypeCode').val(chooseType);
  35. sendPost('patient/consult/doctor_worktime', {doctor:doctorCode}, 'json', 'post', getListFail, successFun);
  36. }
  37. /* 复选框兼容 */
  38. $(document).on("click", ".input-group-pack > input[type=checkbox]", function() {
  39. var $cpChk = $(this).parent();
  40. if ($(this).attr("checked") == "checked") {
  41. $cpChk.removeClass("checked");
  42. $(this).removeAttr("checked");
  43. } else {
  44. $cpChk.addClass("checked");
  45. $(this).attr("checked", true);
  46. }
  47. });
  48. //弹窗
  49. $('.broadcast-icon').on('click',function(){
  50. $('.broadcast-shadow-panel').removeClass('c-hide');
  51. });
  52. $('.win-cancle').on('click',function(){
  53. $('.broadcast-shadow-panel').addClass('c-hide');
  54. });
  55. //从后台那边获取签名等信息
  56. var params = {};
  57. params.pageUrl = window.location.href;
  58. $.ajax(server + "weixin/getSign", {
  59. data: params,
  60. dataType: "json",
  61. type: "post",
  62. success: function(res){
  63. if (res.status == 200) {
  64. var t = res.data.timestamp;
  65. var noncestr = res.data.noncestr;
  66. var signature = res.data.signature;
  67. wx.config({
  68. // debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  69. appId: appId, // 必填,公众号的唯一标识
  70. timestamp: t, // 必填,生成签名的时间戳
  71. nonceStr: noncestr, // 必填,生成签名的随机串
  72. signature: signature,// 必填,签名,见附录1
  73. jsApiList: [
  74. 'chooseImage',
  75. 'uploadImage'
  76. ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  77. });
  78. }
  79. else{
  80. dialog({
  81. title:'提示',
  82. skin:"ui-dialog ax-popup pror",
  83. content:"获取微信签名失败",
  84. ok: function (){}
  85. }).showModal();
  86. window.location.href = "doctor-consultation.html";
  87. }
  88. }
  89. });
  90. function successFun(res){
  91. if(res.status==200){
  92. var dataList = res.data.doctor;
  93. doctorName = dataList.name;
  94. if(dataList.jobName){
  95. $("#lbl_doctor").html(dataList.name+"("+dataList.jobName+")");
  96. }else{
  97. $("#lbl_doctor").html(dataList.name);
  98. }
  99. $("#lbl_patient").html(patientName);
  100. }else{
  101. getListFail(res);
  102. }
  103. }
  104. function getListFail(res){
  105. if (res && res.msg) {
  106. dialog({contentType:'tipsbox', skin:'bk-popup' , content:res.msg,bottom:true}).show();
  107. } else {
  108. dialog({contentType:'tipsbox', skin:'bk-popup' , content:'加载失败',bottom:true}).show();
  109. }
  110. }
  111. //提交咨询
  112. $("#commit").click(function() {
  113. if($(this).hasClass("active")){
  114. var data = {};
  115. data.type = Number($("#txtTypeCode").val());
  116. if($("#txtContent").val() == null)
  117. data.symptoms = "";
  118. else
  119. data.symptoms = utf16toEntities($("#txtContent").val().replace(/\s+/g,""));
  120. data.voice = "";
  121. if (validate(data)) {
  122. //验证通过执行
  123. dd.showModal();
  124. var images = getImages();
  125. if(images.length == 0){
  126. $("#commit").css("pointer-events","none");
  127. serverId = '';
  128. doSubmit(data);
  129. }
  130. else{
  131. uploadImage(data);
  132. }
  133. }
  134. }
  135. });
  136. });
  137. function checkInWork(doctor){
  138. sendPost('/patient/consult/is_doctor_working', {doctor:doctor}, 'json', 'post', queryFailed, function(res){
  139. if(res.status==200){
  140. if(res.data==0){
  141. dialog({
  142. title: '提示',
  143. content: '您好,由于您的签约医生工作繁忙,所以设置了每日回复咨询的时间段,所以,在该时间段外的时间,您的咨询将不会马上获得医生的回复',
  144. okValue:'我知道了',
  145. ok: function (){
  146. return;
  147. },
  148. cancelValue: '查看时间',
  149. cancel: function () {
  150. alert("查看时间")
  151. }
  152. }).showModal();
  153. }
  154. }else{
  155. queryFailed(res);
  156. }
  157. });
  158. }
  159. //查询咨询类型
  160. function querySignType(){
  161. d.show();
  162. sendPost('patient/sign_status', {}, 'json', 'post', querySignTypeFailed, querySignTypeSuccess);
  163. }
  164. function querySignTypeFailed(res) {
  165. d.close();
  166. if (res && res.msg) {
  167. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:res.msg}).show();
  168. } else {
  169. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'获取咨询类型失败'}).show();
  170. }
  171. }
  172. function querySignTypeSuccess(res) {
  173. if (res.status == 200) {
  174. $('#txtTypeCode').val(chooseType);
  175. $('#lbl_doctor').html(getSignDoctor(res,chooseType));
  176. $("#lbl_patient").html(patientName);
  177. teamCode = res["teamCode_"+ chooseType];
  178. signCode = res["signCode_"+chooseType];
  179. d.close();
  180. } else {
  181. querySignTypeFailed(res);
  182. }
  183. }
  184. //获取医生信息
  185. function getSignDoctor(data,type){
  186. var doctor_name = "";
  187. var doctor_type = "";
  188. switch(Number(type))
  189. {
  190. case 1:
  191. doctor_type = data.teamDoctors;
  192. break;
  193. case 2:
  194. doctor_type = data.familyDoctors;
  195. break;
  196. default:
  197. break;
  198. }
  199. for(var i=0; i < doctor_type.length; i++){
  200. doctor_name += doctor_type[i] + ",";
  201. }
  202. if(doctor_name.length > 0){
  203. doctor_name = doctor_name.substring(0, doctor_name.length-1);
  204. }
  205. return doctor_name;
  206. }
  207. //验证信息
  208. function validate(data) {
  209. if (data.symptoms.length < 10) {
  210. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'请至少用10个字描述您的症状'}).show();
  211. return false;
  212. }
  213. if (data.symptoms.length > 500) {
  214. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'请在500字以内完成您的症状描述'}).show();
  215. return false;
  216. }
  217. if(!$(".input-group-pack > input[type=checkbox]").attr("checked")){
  218. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'请勾选"我已阅读咨询说明"'}).show();
  219. return false;
  220. }
  221. return true;
  222. }
  223. var serverId = "";
  224. function chooseImage(){
  225. wx.chooseImage({
  226. count: 9-getImages().length,
  227. success: function (res) {
  228. for (var i in res.localIds) {
  229. appendFile(res.localIds[i]);
  230. }
  231. }
  232. });
  233. }
  234. function uploadImage(data){
  235. $("#commit").css("pointer-events","none");
  236. var images = getImages();
  237. if (images.length == 0) {
  238. return;
  239. }
  240. var i = 0, length = images.length;
  241. serverId = "";
  242. function upload() {
  243. wx.uploadImage({
  244. localId: images[i],
  245. isShowProgressTips: 0,
  246. success: function (res) {
  247. i++;
  248. if(serverId.length == 0){
  249. serverId = res.serverId;
  250. }
  251. else{
  252. serverId =serverId + "," + res.serverId;
  253. }
  254. if (i < length) {
  255. upload();
  256. }
  257. if(i == images.length){
  258. doSubmit(data);
  259. }
  260. },
  261. fail: function (res) {
  262. $("#commit").css("pointer-events","");
  263. alert(JSON.stringify(res));
  264. }
  265. });
  266. }
  267. upload();
  268. }
  269. // 添加文件
  270. function appendFile(p) {
  271. var amount = getImages().length;
  272. if (amount >= 8) {
  273. $("#add_img_li").hide();
  274. }
  275. if(amount < 9){
  276. var $li = $('<li>' + ' <img src="' + p + '" data-src="' + p + '" onclick="viewImg(this)">' + ' <a href="javascript:;" class="del-img" onclick="delImg(this)"><i class="iconfont icon-laji"></i></a>' + '</li>');
  277. var $add_img_li = $("#add_img_li");
  278. $add_img_li.before($li);
  279. $("#image_tips").text(getImages().length + "/9");
  280. }
  281. }
  282. //获取需要上传的图片
  283. function getImages() {
  284. var images = [];
  285. $("#img_ul").find("img").each(function() {
  286. var imgSrc = $(this).attr("data-src");
  287. images.push(imgSrc);
  288. });
  289. return images;
  290. }
  291. //查看图片
  292. function viewImg(dom) {
  293. var $img = $(dom);
  294. var thissrc = $img.attr("data-src");
  295. var mWid = $(window).width();
  296. var mHei = $(window).height();
  297. var nHtml = '<div class="delimgpop"><div class="del-img-box"><div class="del-img-con"><img class="del-pop-img" src="' + thissrc + '" style="max-width:' + mWid + 'px; max-height:' + mHei + 'px;"></div></div></div>';
  298. $("body").append(nHtml);
  299. $(".delimgpop").click(function() {
  300. $(this).remove()
  301. });
  302. };
  303. //删除图片
  304. function delImg(dom) {
  305. var $li = $(dom).parent();
  306. $li.remove();
  307. $("#image_tips").text(getImages().length + "/9");
  308. var amount = getImages().length;
  309. if(amount <= 8){
  310. $("#add_img_li").show();
  311. }
  312. return;
  313. }
  314. //微信sdk配置出错
  315. wx.error(function (res) {
  316. alert("wx.error:" + res.errMsg);
  317. });
  318. //提交咨询
  319. function doSubmit(data) {
  320. console.log(data);
  321. data.mediaIds = serverId;
  322. var url = 'patient/consult/add';//新增三师或家庭
  323. if(chooseType == 6){//名医咨询
  324. data.doctorCode = doctorCode;
  325. url = 'patient/consult/famousAdd';
  326. //查询名医当前是否在工作时间内
  327. sendPost('patient/consult/is_doctor_working', {doctor:doctorCode}, 'json', 'post', submitFailed, function(res){
  328. if(res.status==200){
  329. var resultData = res.data;//0:医生不接受咨询 1:医生接受咨询 2:医生当前不在工作时间
  330. if(resultData==1){
  331. sendPost('patient/consult/consult_times_remain', {doctor:doctorCode}, 'json', 'post', submitFailed, function(res){
  332. if(res.status==200){
  333. var count = res.data;//名医剩余咨询次数
  334. if(count>0){
  335. $("#commit").addClass("active");
  336. sendPost(url, data, 'json', 'post', submitFailed, submitSuccess);
  337. }else{
  338. dialog({
  339. content: '您来晚了哦~该医生今日已无免费次数,您可咨询其他名医或改天再来~',
  340. cancelValue: '我知道了',
  341. cancel: function () {
  342. $("#commit").removeClass("active");
  343. dd.close();
  344. return;
  345. }
  346. }).showModal();
  347. }
  348. }else{
  349. submitFailed(res);
  350. }
  351. });
  352. }else if(resultData==2){
  353. sendPost('/patient/consult/doctor_worktime', {doctor:doctorCode}, 'json', 'post', submitFailed, function(res){
  354. if(res.status==200){
  355. var workWeek = res.data.workWeeks;
  356. var worktime = res.data.workTime;
  357. if(workWeek&&workWeek.length>0){
  358. var week = new Date().getDay();
  359. for(var i = 0 ;i<workWeek.length;i++){
  360. if((week-1)==i){
  361. var weekInfo = workWeek[i];
  362. if(weekInfo.morning==1 && weekInfo.afternoon==1 && weekInfo.night==1){
  363. workTime = worktime.morningBegin+"~"+worktime.nightEnd;
  364. }else if(weekInfo.morning==1 && weekInfo.afternoon==0 && weekInfo.night==0){
  365. workTime = worktime.morningBegin+"~"+worktime.morningEnd;
  366. }else if(weekInfo.morning==0 && weekInfo.afternoon==1 && weekInfo.night==0){
  367. workTime = worktime.afternoonBegin+"~"+worktime.afternoonEnd;
  368. }else if(weekInfo.morning==0 && weekInfo.afternoon==0 && weekInfo.night==1){
  369. workTime = worktime.nightBegin+"~"+worktime.nightEnd;
  370. }else if(weekInfo.morning==1 && weekInfo.afternoon==1 && weekInfo.night==0){
  371. workTime = worktime.morningBegin+"~"+worktime.afternoonEnd;
  372. }else if(weekInfo.morning==0 && weekInfo.afternoon==1 && weekInfo.night==1){
  373. workTime = worktime.afternoonBegin+"~"+worktime.nightEnd;
  374. }
  375. }
  376. }
  377. setTimeout(function(){
  378. isWordTime(workTime);//判断医生是否在工作时间内+查询某个医生名医当前剩余咨询次数
  379. },300)
  380. }
  381. }else{
  382. submitFailed(res);
  383. }
  384. });
  385. return false;
  386. }else{
  387. dialog({
  388. content: '对不起,该医生已暂停接受咨询,您可选择其他医生进行咨询',
  389. cancelValue: '我知道了',
  390. cancel: function () {
  391. dd.close();
  392. return;
  393. }
  394. }).showModal();
  395. return false;
  396. }
  397. }else{
  398. submitFailed(res);
  399. }
  400. });
  401. }else{
  402. sendPost(url, data, 'json', 'post', submitFailed, submitSuccess);
  403. }
  404. }
  405. function time_range(beginTime, endTime, nowTime) {
  406. var strb = beginTime.split (":");
  407. if (strb.length != 2) {
  408. return false;
  409. }
  410. var stre = endTime.split (":");
  411. if (stre.length != 2) {
  412. return false;
  413. }
  414. var strn = nowTime.split (":");
  415. if (stre.length != 2) {
  416. return false;
  417. }
  418. var b = new Date ();
  419. var e = new Date ();
  420. var n = new Date ();
  421. b.setHours (strb[0]);
  422. b.setMinutes (strb[1]);
  423. e.setHours (stre[0]);
  424. e.setMinutes (stre[1]);
  425. n.setHours (strn[0]);
  426. n.setMinutes (strn[1]);
  427. if (n.getTime () - b.getTime () > 0 && n.getTime () - e.getTime () < 0) {
  428. return "1";//在时间范围内
  429. } else {
  430. return "0";//不在工作时间内
  431. }
  432. }
  433. function CompareDate(t1,t2)
  434. {
  435. var date = new Date();
  436. var a = t1.split(":");
  437. var b = t2.split(":");
  438. return date.setHours(a[0],a[1]) > date.setHours(b[0],b[1]);
  439. }
  440. //判断医生是否在工作时间内
  441. function isWordTime(curWorkTime){
  442. dd.close();
  443. var week = new Date().getDay();
  444. var myDate = new Date();
  445. debugger
  446. if(curWorkTime){//有上班时间
  447. var cosultTimeArr = curWorkTime.split("~");
  448. var curHours = myDate.getHours(); //获取当前小时数(0-23)
  449. var curMinutes = myDate.getMinutes();//获取当前分钟数(0-59)
  450. var curTime = curHours+":"+curMinutes;
  451. var timeRange = time_range(cosultTimeArr[0],cosultTimeArr[1],curTime)
  452. if(timeRange=="1"){//在工作时间内,查询某个医生名医当前剩余咨询次数
  453. consultTimesRemain();
  454. }else{//不在工作时间内,判断早晚
  455. var isFlag1 = CompareDate(curTime,cosultTimeArr[0]);
  456. var isFlag2 = CompareDate(curTime,cosultTimeArr[1]);
  457. if(!isFlag1){//来早了
  458. dialog({
  459. content: '您来早了哦,'+doctorName+'医生将在'+cosultTimeArr[0]+'准时开始接受咨询~',
  460. cancelValue: '我知道了',
  461. cancel: function () {
  462. $("#commit").removeClass("active");
  463. dd.close();
  464. return;
  465. }
  466. }).showModal();
  467. return false;
  468. }
  469. if(isFlag2){//来晚了
  470. dialog({
  471. content: '您来晚了哦~'+doctorName+'医生本日咨询时间已过,请改日再来~',
  472. cancelValue: '我知道了',
  473. cancel: function () {
  474. $("#commit").removeClass("active");
  475. dd.close();
  476. return;
  477. }
  478. }).showModal();
  479. return false;
  480. }
  481. }
  482. }else{
  483. dialog({
  484. content: '医生今天不上班哦,请在医生咨询计划时间段内咨询',
  485. cancelValue: '我知道了',
  486. cancel: function () {
  487. $("#commit").removeClass("active");
  488. dd.close();
  489. return;
  490. }
  491. }).showModal();
  492. return false;
  493. }
  494. }
  495. function submitFailed(res) {
  496. $("#commit").css("pointer-events","");
  497. dd.close();
  498. if (res && res.msg) {
  499. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:res.msg}).show();
  500. } else {
  501. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'提交失败'}).show();
  502. }
  503. }
  504. function submitSuccess(res) {
  505. if (res.status == 200) {
  506. $("#commit").css("pointer-events","");
  507. dd.close();
  508. //window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId + "&redirect_uri=http%3a%2f%2f" + weixinUrl + "%2f" + urlName + "%2fwx%2fhtml%2fyszx%2fhtml%2fdoctor-consultation.html&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
  509. //window.location.href = "vedio-consulting-commit-success.html?type=2";
  510. //页面跳转到消息页面
  511. var direct_url = "";
  512. if(chooseType == "6" || chooseType == "1"){ //名医咨询和三师咨询均跳转回原来的咨询IM页面
  513. direct_url = "consulting-doctor.html?consult="+res.data.consult+"&type="+res.data.type+"&toUser="+res.data.patient+"&doctor="+doctorCode;
  514. }else{
  515. localStorage.setItem("signInfo_tab", 1);
  516. direct_url = "../../qygl/html/sign_info.html?code="+signCode+"&teamCode="+teamCode+"&type="+chooseType+"&doctor="+doctorCode+"&consult="+res.data.consult;
  517. }
  518. window.location.href = direct_url;
  519. } else {
  520. submitFailed(res);
  521. }
  522. }