define(['zepto', 'vue', 'Utils', 'md5'], function($, Vue, Utils, md5) { var selectBg = $('.selectBg'); var remderList = $("#remderList"); var doctorBg = $(".doctorBg"); var windowH = $(window).height(); var paixu = $(".paixu"); var shaixuan = $(".shaixuan"); var qudao = Utils.getRequest("linkType"); //用于判断来源,wx,hz,dd微信,会诊,电刀 var subQudao = Utils.getRequest("sub"); var domainIds = []; var tjDoctor = false; var tuijiancanshu = ""; if (qudao == "dd" || subQudao == "dd") { //电刀跳过来的处理 domainIds = ["CT1"]; //电刀过来的医生增加治疗领域:手术的筛选条件 tjDoctor = true; //点刀默认加载的医生是推荐医生 tuijiancanshu = "operation"; } if (qudao == "hz" || subQudao == "hz") { tjDoctor = true; //会诊默认加载的医生是推荐医生 tuijiancanshu = "consultation"; } var other = true; if (qudao == "wx" || qudao == "app") { other = false; } if (subQudao == "dd" || subQudao == "hz") { other = true; } var chose = { //缓存搜索条件 queryDoctorsRequest: { max: "CURRENT", localId: "", //地区ID diseaseId: '', //疾病ID domainIds: domainIds, //领域ID hospitalId: '', //医院ID hospitalName: '', departmentId: '', //科室ID sortType: 'default', treatWay: [], //治疗方式 service: [] //开通服务 }, other: other, doctorHeightHasChange: true, doctorListHeight: "", isImgLazy: false, windowH: $(window).height(), scrollTopBefore: '0', hasMore: true, //标记是否加载更多医生数据字段 lshospital: "", citySession: '', hospitalSession: '', diseaseSession: '', toHospital: false, toCity: false, toDisease: false, doctorList: [], srollLs: 0, shaixuanCount: 0, //选中的筛选条件数量 offset: 1, skillTitle: { ST1: '主任医师', ST2: '副主任医师', ST3: '主治医师', ST4: '住院医师', ST5: '随访医师', ST6: '实习医师' }, academicTitle: { AT1: '教授', AT2: '副教授', AT3: '讲师' }, fetchCityData: function() { if (!!sessionStorage.cityData) { return; } $.ajax({ url: "https://testdevgw.medtap.cn/common/listAreaV0", contentType: "application/json", headers: Utils.getHeaders(), data: Utils.setToken(), type: 'get', async: true, dataType: 'json', success: function(data) { if (data.success == true) { sessionStorage.cityData = JSON.stringify(data.content.areas); } }, error: function(xhr, textStatus, errorThrow) { console.log(xhr.readyState); } }); }, fetchDiseasesData: function() { if (sessionStorage.diseasesData) { return; } $.ajax({ url: "https://testdevgw.medtap.cn/common/listDisease", contentType: "application/json", headers: Utils.getHeaders(), data: Utils.setToken(), type: 'get', async: true, dataType: 'json', success: function(data) { if (data.success) { data = data.content.disease; sessionStorage.diseasesData = JSON.stringify(data); } }, error: function(data) { } }) }, renderSelectDom: function(opts) { selectBg.addClass("on"); var data, html, i, len; html = ''; if (opts.type == 0) { //代表是渲染地区医院数据 switch (opts.nextDomType) { case "province": //渲染省份数据 selectBg.find(".one").html(""); selectBg.find(".two").html(""); data = JSON.parse(sessionStorage.cityData); html += '<ul class="firstList-f">'; html += '<li type="0" nextDomType="city" provinceId="" cityId="" cityName="" hospitalId="" departmentId="" provinceName="全国">全国</li>'; for (i = 0, len = data.length; i < len; i++) { html += '<li type="0" nextDomType="city" provinceId="' + data[i].provinceId + '"cityId="" cityName="" hospitalId="" departmentId="" provinceName="' + data[i].name + '">' + data[i].name + '</li>'; } html += '</ul>'; selectBg.find(".one").html(html); break; case "city": data = JSON.parse(sessionStorage.cityData) html += '<ul class="firstList-s">'; if (opts.provinceId == "") { html += '<li type="0" nextDomType="doctor" provinceId="" cityId="" cityName="" hospitalId="" departmentId="" ityName="" provinceName="">全国医生</li>'; } else { for (i = 0, len = data.length; i < len; i++) { if (data[i].provinceId == opts.provinceId) { data = data[i].city; i = 0; break; } } for (i = 0, len = data.length; i < len; i++) { html += '<li type="0" nextDomType="hospital" provinceId="' + opts.provinceId + '"provinceName="' + opts.provinceName + '"cityId="' + data[i].cityId + '" hospitalId="" departmentId="" cityName="' + data[i].name + '">' + data[ i].name + '</li>'; } } html += '</ul>'; selectBg.find(".two").html(html); break; case "hospital": selectBg.find(".two").html(""); $.ajax({ url: "https://testdevgw.medtap.cn/common/listHospitalWithDepartment", contentType: "application/json", type: 'get', async: true, dataType: 'json', data: Utils.setToken({ cityId: opts.cityId, offset: 1, limit: 10000 }), success: function(back) { if (!back.success) { Utils.pop(back.resultCode); } data = back.content.hospitals; html += '<ul class="firstList-f">'; html += '<li type="0" nextDomType="dep" provinceId="' + opts.provinceId + '" cityId="' + opts.cityId + '" hospitalId="" departmentId="">全市</li>'; for (var i = 0, len = data.length; i < len; i++) { html += '<li type="0" nextDomType="dep" provinceId="' + opts.provinceId + '" cityId="' + opts.cityId + '" hospitalId="' + data[i].hospitalId + '" departmentId="">' + data[i].hospitalName + '</li>'; } html += "</ul>"; selectBg.find(".one").html(html); }, error: function() {} }); break; case "dep": $.ajax({ url: "https://testdevgw.medtap.cn/common/listDepartByHospitalId", contentType: "application/json", type: 'get', async: true, dataType: 'json', headers: Utils.getHeaders(), data: Utils.setToken({ hospitalId: opts.hospitalId, offset: 1, limit: 10000 }), success: function(back) { if (!back.success) { Utils.pop(back.resultCode); } data = back.content.departments; html += '<ul class="firstList-s">'; if (opts.hospitalId == "") { html += '<li type="0" nextDomType="doctor" provinceId="' + opts.provinceId + '" cityId="' + opts.cityId + '" hospitalId="" departmentId="">全市医生</li>'; } else { html += '<li type="0" nextDomType="doctor" provinceId="' + opts.provinceId + '" cityId="' + opts.cityId + '" hospitalId="' + opts.hospitalId + '" departmentId="">全院医生</li>'; for (var i = 0, len = data.length; i < len; i++) { html += '<li type="0" nextDomType="doctor" provinceId="' + opts.provinceId + '" cityId="' + opts.cityId + '" hospitalId="' + opts.hospitalId + '" departmentId="' + data[i].hospitalDepartmentId + '">' + data[ i].departmentName + '</li>'; } } html += "</ul>"; selectBg.find(".two").html(html); }, error: function() { html += '<ul class="firstList-s">'; if (opts.hospitalId == "") { html += '<li type="0" nextDomType="doctor" provinceId="' + opts.provinceId + '" cityId="' + opts.cityId + '" hospitalId="" departmentId="">全市医生</li>'; } html += "</ul>"; selectBg.find(".two").html(html); } }); break; } } if (opts.type == 1) { if (opts.nextDomType == "disease") { //渲染疾病列表dom selectBg.find(".one").html(""); selectBg.find(".two").html(""); data = JSON.parse(sessionStorage.diseasesData); html += '<ul class="firstList-f">'; html += '<li type="1" nextDomType="diseasenext" diseaseAllId="">全部</li>'; for (i = 0, len = data.length; i < len; i++) { html += '<li type="1" nextDomType="diseasenext" diseaseAllId="' + data[i].diseaseId + '">' + data[i].diseaseName + '</li>'; } html += '</ul>'; selectBg.find(".one").html(html); return; } if (opts.nextDomType == "diseasenext") { selectBg.find(".two").html(""); data = JSON.parse(sessionStorage.diseasesData); if (opts.diseaseAllId == "") { html += '<li type="1" nextDomType="doctor" diseaseAllId="" diseaseId="" >全部疾病</li>'; } else { for (i = 0, len = data.length; i < len; i++) { if (data[i].diseaseId == opts.diseaseAllId) { data = data[i].diseaseItemList; i = 0; break; } } html += '<ul class="firstList-s">'; for (i = 0, len = data.length; i < len; i++) { html += '<li type="1" nextDomType="doctor" diseaseAllId="' + opts.diseaseAllId + '" diseaseId="' + data[i].diseaseId + '">' + data[i].diseaseName + '</li>'; } } html += '</ul>'; selectBg.find(".two").html(html); return; } } }, renderDoctorList: function(opts) { //from=name是指通过姓名搜索来的,type=more是说明是加载更多数据 var _this = this; var requestUrl = ''; var requestData; requestUrl = '/profile/queryDoctors'; requestData = { max: chose.queryDoctorsRequest.max, localId: chose.queryDoctorsRequest.localId, diseaseId: chose.queryDoctorsRequest.diseaseId, domainIds: chose.queryDoctorsRequest.domainIds, hospitalId: chose.queryDoctorsRequest.hospitalId, hospitalName: chose.queryDoctorsRequest.hospitalName, departmentId: chose.queryDoctorsRequest.departmentId, sortType: chose.queryDoctorsRequest.sortType, accountId: "", globalAppType: '0' }; if (tjDoctor) { requestUrl = "/medsrv/queryConsultationOperationDefaultDoctors"; requestData = { max: chose.queryDoctorsRequest.max, type: tuijiancanshu, globalAppType: '1' } } selectBg.find('.serchTitle div').removeClass("on").attr("isShow", "false"); selectBg.find(".godiqu").hide(); $.ajax({ url: 'https://testdevgw.medtap.cn/doctor/listDoctor', contentType: "application/json", type: 'post', async: true, dataType: 'json', headers: Utils.getHeaders(), data: JSON.stringify(Utils.setToken({ limit: 10, //每页显示数量 offset: chose.offset, //当前页 doctorName: '', //医生姓名 treatWay: chose.queryDoctorsRequest.treatWay.length > 0 ? chose.queryDoctorsRequest.treatWay : '', //治疗方式 service: chose.queryDoctorsRequest.service.length > 0 ? chose.queryDoctorsRequest.service : '', //开通服务(预约咨询,预约转诊,私人医生) hospitalLocation: chose.queryDoctorsRequest.localId, hospitalId: chose.queryDoctorsRequest.hospitalId, departmentId: chose.queryDoctorsRequest.departmentId, treatDisease: !!chose.queryDoctorsRequest.diseaseId ? chose.queryDoctorsRequest.diseaseId : '', sortType: chose.queryDoctorsRequest.sortType //排序(综合,职称,活跃) })), success: function(data) { if (!data.success) { Utils.pop(data.resultDesc); return; } var docLen = data.content.doctorResults.length; if (docLen > 0) { chose.offset++; } chose.hasMore = docLen > 0; if (opts.more) { _this.doctorList = _this.doctorList.concat(data.content.doctorResults); chose.isSroll = true; chose.doctorHeightHasChange = true; if (docLen > 0) { if (docLen > 0 && docLen < 6) { $(".doctorBg .more").trigger("click"); } } return; } _this.doctorList = data.content.doctorResults; chose.isSroll = true; chose.scrollTopBefore = 0; chose.doctorHeightHasChange = true; doctorBg.css("position", "relative"); chose.srollLs = 0; if (docLen > 0) { if (docLen > 0 && docLen < 6) { $(".doctorBg .more").trigger("click"); } } }, error: function() { Utils.jzz(0); } }); }, showImg: function() { var scrollTop = $(window).scrollTop(); if (chose.scrollTopBefore > scrollTop) { return; } chose.scrollTopBefore = scrollTop; var liList = doctorBg.find("li"); $.each(liList, function() { var li = $(this).offset().top; if (chose.windowH > li - scrollTop) { var img = $(this).find('img'); if (!img.attr("src")) { var imgUrl = $(this).attr("data_src"); img.attr("src", imgUrl); } } }); }, loadMore: function() { this.renderDoctorList({ form: "list", more: true }); }, eventBind: function() { var _this = this; selectBg.on('click', '.one li', function() { var type = $(this).attr("type"); $(this).addClass("on").siblings().removeClass("on"); var nextDomType; if (type == 0) { var provinceId = $(this).attr("provinceId"); var cityId = $(this).attr("cityId"); var hospitalId = $(this).attr("hospitalId"); var hospitalName = $(this).text(); var departmentId = $(this).attr("departmentId"); var provinceName = $(this).attr("provinceName"); nextDomType = $(this).attr("nextDomType"); if (nextDomType == "dep") { chose.lshospital = $(this).text(); } _this.renderSelectDom({ type: type, nextDomType: nextDomType, provinceId: provinceId, cityId: cityId, hospitalId: hospitalId, departmentId: departmentId, provinceName: provinceName }); return; } if (type == 1) { var diseaseAllId = $(this).attr("diseaseAllId"); nextDomType = $(this).attr("nextDomType"); _this.renderSelectDom({ type: type, nextDomType: nextDomType, diseaseAllId: diseaseAllId, disease: '' }); } }); selectBg.on('click', ' .two li', function() { var type = $(this).attr("type"); //地区医院选项点击处理 if (type == 0) { var provinceId = $(this).attr("provinceId"); var cityId = $(this).attr("cityId"); var hospitalId = $(this).attr("hospitalId"); var departmentId = $(this).attr("departmentId"); var nextDomType = $(this).attr("nextDomType"); var provinceName = $(this).attr("provinceName"); var cityName = $(this).attr("cityName"); $(this).addClass("on").siblings().removeClass("on"); if (nextDomType == "doctor") { if (provinceId == "") { selectBg.find(".godiqu").html(""); } chose.queryDoctorsRequest.max = "CURRENT"; chose.queryDoctorsRequest.localId = cityId; chose.queryDoctorsRequest.hospitalId = hospitalId; chose.queryDoctorsRequest.departmentId = departmentId; chose.hospitalSession = selectBg.find("#remderList").html(); chose.toHospital = true; chose.toCity = false; tjDoctor = false; chose.offset = 1; _this.renderDoctorList({ form: "list", more: false }); selectBg.removeClass("on"); $("#hos").text(chose.lshospital); if (provinceId == "") { $("#hos").text("全国"); } setTimeout(function() { $('body').scrollTop(0); }, 0); return; } if (nextDomType == "hospital") { selectBg.find(".godiqu").html("地区:" + provinceName + cityName); chose.citySession = selectBg.find("#remderList").html(); chose.toHospital = false; chose.toCity = true; $("#hos").text("地区/医院"); } _this.renderSelectDom({ type: type, nextDomType: nextDomType, provinceId: provinceId, cityId: cityId, hospitalId: hospitalId, departmentId: departmentId }); return; } //疾病选项点击处理 if (type == 1) { $(this).addClass("on").siblings().removeClass("on"); var diseaseId = $(this).attr("diseaseId"); //重置搜索排序 chose.queryDoctorsRequest.max = "CURRENT"; //设置搜索条件为当前疾病Id chose.queryDoctorsRequest.diseaseId = diseaseId; //缓存当前点击操作选项,便于下一次直接调出显示 chose.diseaseSession = selectBg.find("#remderList").html(); chose.toDisease = true; //渲染医生列表 tjDoctor = false; chose.offset = 1; _this.renderDoctorList({ form: "list", more: false }); selectBg.removeClass("on"); var dis = $(this).text(); $("#dis").html(dis); setTimeout(function() { $('body').scrollTop(0); }, 0); return; } }); selectBg.find('.serchTitle').on('click', "div", function() { var bg, c; var isShow = $(this).attr("isShow"); var listDomType = $(this).attr("nextdomtype"); if (isShow == "false") { chose.srollLs = $(window).scrollTop(); doctorBg.css("position", "fixed"); $(this).attr("isShow", "true").addClass('on').siblings().attr('isShow', 'false').removeClass('on'); if (listDomType == "province") { paixu.hide(); selectBg.find(".godiqu").show(); shaixuan.hide(); if (chose.toHospital) { selectBg.find("#remderList").html(chose.hospitalSession); selectBg.addClass('on'); bg = remderList.height(); c = selectBg.find(".one li.on").offset().top; if (c > bg) { selectBg.find(".one ul").scrollTop(c - bg); } return; } if (chose.toCity) { selectBg.find("#remderList").html(chose.citySession); selectBg.addClass('on'); bg = remderList.height(); c = selectBg.find(".one li.on").offset().top; if (c > bg) { selectBg.find(".one ul").scrollTop(c - bg); } return; } _this.renderSelectDom({ type: '0', nextDomType: 'province', provinceId: '', cityId: '', hospitalId: '', departmentId: '' }); } if (listDomType == "disease") { paixu.hide(); selectBg.find(".godiqu").hide(); shaixuan.hide(); if (chose.toDisease) { selectBg.find("#remderList").html(chose.diseaseSession); bg = remderList.height(); c = selectBg.find(".two li.on").offset().top; if (c > bg) { selectBg.find(".two ul").scrollTop(c - bg); } selectBg.addClass('on'); return; } _this.renderSelectDom({ type: '1', nextDomType: 'disease', diseaseAllId: '', diseaseId: '' }); } if (listDomType == "paixu") { paixu.show(); selectBg.removeClass("on"); shaixuan.hide(); } if (listDomType == "shaixuan") { paixu.hide(); selectBg.find(".godiqu").hide(); shaixuan.show(); selectBg.removeClass("on"); } return; } $(this).attr("isShow", "false").removeClass("on"); selectBg.removeClass("on"); if (listDomType == "paixu") { paixu.hide(); } if (listDomType == "shaixuan") { shaixuan.hide(); } doctorBg.css("position", "relative"); $(window).scrollTop(chose.srollLs); }); selectBg.find(".name").on("click", function() { Utils.pushNewWindow("choseDoctorByName.html?v=1.0.0&linkType=" + Utils.getRequest("linkType") + '&access=' + Utils.getRequest('access') + '&sub=' + Utils.getRequest('sub') + '&sort=' + Utils.getRequest('sort') + '&wechatId=' + Utils.getRequest("wechatId") + '&orderType=' + Utils.getRequest("orderType") + '&agencyId=' + Utils.getRequest('agencyId') + '&operationType=' + Utils.getRequest('operationType') + '&businessDetail=' + Utils.getRequest('businessDetail')); }); selectBg.on("click", '.godiqu', function() { selectBg.find("#remderList").html(chose.citySession); var bg = remderList.height(); var c = selectBg.find(".one li.on").offset().top; if (c > bg) { selectBg.find(".one ul").scrollTop(c - bg); } }); paixu.on("click", "li", function() { var sortType = $(this).attr("sortType"); var tit = $(this).attr("tit"); $(this).addClass("on").siblings().removeClass("on"); chose.queryDoctorsRequest.sortType = sortType; chose.queryDoctorsRequest.max = "CURRENT"; paixu.hide(); $("#px").text(tit); tjDoctor = false; chose.offset = 1; chose.renderDoctorList({ form: "list", more: false }); }); $(".options").on("click", "span", function() { !!$(this).hasClass('on') ? $(this).removeClass('on') && chose.shaixuanCount-- : $(this).addClass('on') && chose.shaixuanCount++; }); $('.options-ok').click(function() { var way = []; $('.options-1').find('.on').each(function() { way.push($(this).attr('type')); }); var service = []; $('.options-2').find('.on').each(function() { service.push($(this).attr('type')); }); chose.queryDoctorsRequest.treatWay = way; chose.queryDoctorsRequest.service = service; $('.shaixuan').hide(); //TODO //调用查询接口 chose.offset = 1; chose.renderDoctorList({ form: "list", more: false }); }); $(".doctorBg").on("click", '.more', function() { _this.renderDoctorList({ form: "list", more: true }); }); $(".doctorBg").on("click", 'li', function() { var type = Utils.getRequest("linkType"); var doctorId = $(this).attr("doctorId"); var doctorName = $(this).attr("doctorName"); if (type == "wx") { Utils.pushNewWindow( "https://review-formal.iplusmed.com/wechatForLungCancer/dev/wechat_lung_push_doctor/pages/doctorHomePage.html?v=1.0.0&type=wx&doctorId=" + doctorId + '&wechatId=' + Utils.getRequest("wechatId")); return; } window.selectDoctorBean = { doctorId: doctorId, doctorName: doctorName } }); $(window).on("scroll", function() { if (!chose.isSroll) { return; } var scrollTop = $(window).scrollTop(); if (chose.scrollTopBefore >= scrollTop) { return; } chose.scrollTopBefore = scrollTop; var docH; if (chose.doctorHeightHasChange) { docH = doctorBg.height(); chose.doctorListHeight = docH; chose.doctorHeightHasChange = false; } else { docH = chose.doctorListHeight; } if (docH - (scrollTop + windowH) < 200) { chose.isSroll = false; if (!chose.hasMore) { return; } chose.loadMore(); } }); }, isSroll: true, init: function() { if (!!localStorage.medtapGlobalData == false) { localStorage.medtapGlobalData = JSON.stringify({ globalAppType: 0 }); } if (Utils.getRequest("applyReferral") == 1) { $('.options.options-2 span[type=customer]').addClass('on'); chose.queryDoctorsRequest.service.push("customer"); chose.shaixuanCount = 1; } chose.fetchCityData(); chose.fetchDiseasesData(); new Vue({ el: "#app", data: chose }); this.eventBind(); $(".doctorBg .more").trigger("click"); $("body").css("opacity", "1"); } } chose.init(); });