import { common } from '@kasite/uni-app-base/utils'; import { useIsToAuthPage, useGetDefaultMember } from '../hook'; export { common } from '@kasite/uni-app-base/utils'; export const menuClick = async (e, _this, skipWay = 'navigateTo') => { let itemParent = e.currentTarget ? e.currentTarget.dataset.itemParent : {}; let item = e.currentTarget ? e.currentTarget.dataset.item : e; let url = item.Url; // 判断为分院区 if (getApp().globalData.hasDistrict && item.MenuName == '预约挂号') { url = `/pagesPatient/st1/business/otherService/hospitalDistrict/hospitalDistrict`; } /**判断是否使用 */ if ( (itemParent && itemParent.IsUse && itemParent.IsUse != '1') || (item.IsUse && item.IsUse != '1') ) { url = `/pages/st1/business/otherService/building/building`; common.goToUrl(url); return; } // 当日挂号需要判断距离 if (item.MenuName == '当日挂号') { try { const limitDistance = getApp().globalData.config.pageConfiguration.signInList_config.signDistance || 1; // 判断半径(取签到距离配置) await getHospitalLocationDistance(limitDistance); } catch (err) { await new Promise((resolve) => { common.showModal('需到院后才能挂当日号,且不支持无就诊卡进行挂号操作', resolve, { title: '温馨提示', }); }); } } /**来院导航 */ if (item.MenuName == '来院导航') { getLocation(); return; } /**跳转小程序 */ if (item.AppId) { wx.navigateToMiniProgram({ appId: item.AppId, path: item.Url, }); return; } /**判跳转第三方地址 */ if (url.startsWith('https')) { common.goToUrl(`/pages/st1/business/h5/h5?url=${encodeURIComponent(url)}`); return; } /**如果有二级菜单页 */ if (!common.isEmpty(item.Children)) { let queryBean = JSON.stringify(item); url = `${item.Url}`; /**queryBena太长无法传值 赋值给globalData */ getApp().globalData.selectUrl_x = queryBean; } /** * 以下菜单 判断是否有就诊人 没有则进入添加页面 */ let needMemberMenu = [ 'rechargeMoney', // 充值缴费 'reportIndex', // 报告查询 'appointmentRecord', // 预约记录 'outpatientCosts', // 门诊清单 'hospitalCosts', // 住院清单 'cardRecord', // 门诊记录 'hosRecord', // 住院记录 'supplement', // 互联网医院提交咨询 'enquireList', // 互联网医院咨询记录 'doctorLike', // 互联网医院关注医生 'signInList', // 在线签到 'queueList', // 候诊查询 'orderPayment', // 门诊结算 'prescriptionList', // 当日处方 'paymentRecord', // 缴费记录 'personalCenter', // 个人中心 'continuationList', // 在线续方 'drugCredentials', // 取药凭证 'settlementRecord', // 结算记录 'waitRecord', // 候补记录 'dischargeMedication', // 出院带药 'home', // 我的随访 'chat-room', // AI智能就医助手 'topUpRecord', //充值记录 'newPrescriptionList', //当日处方2.0 'prescriptionRecipe', //处方取药2.0 'medicalTech', // 医技预约 'outpatientRefund', //在线退费 'selfProject', // 自助开单 'mdtList', // MDT列表 'recordList', // MDT记录 'diseaseIndex', // 罕见病 ]; let has = false; for (let i of needMemberMenu) { if (url.indexOf(i) != '-1') { has = true; break; } } if (has) { // 是否需要跳转授权页 if (useIsToAuthPage()) { return; } /**如果当前menu在上面数组中 判断是否有就诊人 有就诊人根据条件判断是否需要就诊卡、住院号、授权信息 * 不满足条件跳转到相应添加就诊卡或添加住院号页面 */ if (await toAddMemberOrNot(url)) { return; } } common.goToUrl(url, { skipWay: skipWay, }); }; /** 来院导航 */ export const getLocation = () => { let hospitalInfo = getApp().globalData.hospitalInfo; let data = { latitude: Number(hospitalInfo.Wd), //要去的纬度-地址 longitude: Number(hospitalInfo.Jd), //要去的经度-地址 name: hospitalInfo.HospitalAlias, address: hospitalInfo.HospitalAddress, }; locationIsauthorization('gcj02', () => { uni.openLocation(data); }); }; /** 地理位置是否授权 */ const locationIsauthorization = (type, callBack) => { uni.getLocation({ type: type, success: function (res) { callBack(res); }, fail: function (err) { if (err.errMsg.includes('1')) { common.showToast('访问个人地址失败,请查看是否开启地理位置权限'); } else { common.showModal( '位置信息获取失败,请打开应用权限', () => { uni.openSetting({ success: function (res) { res.authSetting['scope.userLocation']; }, }); }, { cancelText: '取消', confirmText: '打开', } ); } }, }); }; /** * 获取当前位置与医院的距离 * @param {Number} distance 距离半径(单位:公里) */ export const getHospitalLocationDistance = async (limitDistance = 1) => { const { hospitalInfo } = getApp().globalData; // 获取医院信息 if (common.isEmpty(hospitalInfo)) { common.showModal(`获取医院信息失败`); return; } const { Wd: hosLat, Jd: hosLng } = hospitalInfo; if (common.isEmpty(hosLat) || common.isEmpty(hosLng)) { common.showModal(`获取医院配置失败`); return; } return new Promise((resolve, reject) => { locationIsauthorization('gcj02', (res) => { let distance = common.getDistance(res.latitude, res.longitude, hosLat, hosLng); distance > limitDistance ? reject() : resolve(true); }); }); }; /** * 判断当前是否有就诊人 没有则前往添加页面 * 返回url 或 undefined */ export const toAddMemberOrNot = async (url) => { let cardType = '1'; /**如果支持无卡预约 以下菜单不判断是否有就诊卡:挂号记录 在线签到 结算记录*/ if (getApp().globalData.withoutCard) { let needCardArr = ['appointmentRecord', 'signInList', 'settlementRecord']; for (let i of needCardArr) { if (url.indexOf(i) != '-1') { cardType = ''; break; } } } /**以下菜单需要住院号:住院充值 住院报告 住院清单 住院记录 出院带药*/ let needHosArr = [ 'rechargeMoney?pageType=zyjf', 'reportIndex?queryType=2', 'hospitalCosts', 'hosRecord', 'dischargeMedication', ]; for (let i of needHosArr) { if (url.indexOf(i) != '-1') { cardType = '14'; break; } } let member = await useGetDefaultMember({ isKeepPage: true, cardType: cardType, url: url, }); if (common.isEmpty(member)) { // 判断如果是不全等于null 是跳转添加界面 ,因如果全等于null安卓机跳转中间件 if (member !== null) { getApp().globalData.toUrl = url; getApp().globalData.cardType = cardType; common.goToUrl( `/pagesPersonal${ uni.getStorageSync('wx_Slb') ? 'Slb' : '' }/st1/business/patientManagement/addMember/addMember` ); } return true; } return false; };