|
@@ -0,0 +1,978 @@
|
|
|
|
|
+/**
|
|
|
|
|
+ * 页面公用逻辑函数
|
|
|
|
|
+ */
|
|
|
|
|
+import { common } from '@kasite/uni-app-base/utils';
|
|
|
|
|
+import icon from './icon.js';
|
|
|
|
|
+import { request } from '@kasite/uni-app-base';
|
|
|
|
|
+import { REQUEST_CONFIG } from '@/config';
|
|
|
|
|
+
|
|
|
|
|
+// Helper to simulate old base API return structure
|
|
|
|
|
+const callApi = async (url, data) => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const resData = await request.doPost(`${REQUEST_CONFIG.BASE_URL}${url}`, data);
|
|
|
|
|
+ return { resp: resData.Data, resData };
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ console.error('API Call Error', url, e);
|
|
|
|
|
+ return { resp: null, resData: { RespCode: -1 } };
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const app = getApp();
|
|
|
|
|
+
|
|
|
|
|
+export default {
|
|
|
|
|
+ // 判断app状态进行跳转
|
|
|
|
|
+ async judgeAppStatus() {
|
|
|
|
|
+ const {
|
|
|
|
|
+ fixedAppjsGlobalData
|
|
|
|
|
+ } = uni.getStorageSync("frontEndConfig")
|
|
|
|
|
+ const {
|
|
|
|
|
+ status,
|
|
|
|
|
+ content
|
|
|
|
|
+ } = await callApi('wsgw/basic/basicApi/GetAppStatus/callApiJSON.do', {
|
|
|
|
|
+ appId: fixedAppjsGlobalData?.appId
|
|
|
|
|
+ }).then(r => r.resp || {});
|
|
|
|
|
+
|
|
|
|
|
+ switch (status) {
|
|
|
|
|
+ case "maintain":
|
|
|
|
|
+ uni.reLaunch({
|
|
|
|
|
+ url: `/pages/st1/business/errorPage/maintain/maintain?content=${content}`,
|
|
|
|
|
+ });
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "offline":
|
|
|
|
|
+ uni.reLaunch({
|
|
|
|
|
+ url: "/pages/st1/business/errorPage/offline/offline",
|
|
|
|
|
+ });
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 首页 更多 个人中心 菜单点击
|
|
|
|
|
+ */
|
|
|
|
|
+ async menuClick(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 this.getHospitalLocationDistance(limitDistance);
|
|
|
|
|
+ } catch (err) {
|
|
|
|
|
+ await new Promise((resolve) => {
|
|
|
|
|
+ common.showModal('需到院后才能挂当日号,且不支持无就诊卡进行挂号操作', resolve, {
|
|
|
|
|
+ title: '温馨提示'
|
|
|
|
|
+ });
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**来院导航 */
|
|
|
|
|
+ if (item.MenuName == '来院导航') {
|
|
|
|
|
+ this.getLocation()
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ /**跳转小程序 */
|
|
|
|
|
+ if (item.AppId) {
|
|
|
|
|
+ uni.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 (this.isToAuthPage()) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ /**如果当前menu在上面数组中 判断是否有就诊人 有就诊人根据条件判断是否需要就诊卡、住院号、授权信息
|
|
|
|
|
+ * 不满足条件跳转到相应添加就诊卡或添加住院号页面
|
|
|
|
|
+ */
|
|
|
|
|
+ if (await this.toAddMemberOrNot(url)) {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ common.goToUrl(url, {
|
|
|
|
|
+ skipWay: skipWay
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 是否需要跳转授权页
|
|
|
|
|
+ */
|
|
|
|
|
+ isToAuthPage() {
|
|
|
|
|
+ // 判断小程序登录返回的wechatOpenid是否为null,null没有关注公众号,需要跳转授权页面进行授权处理
|
|
|
|
|
+ if (uni.getStorageSync('wechatOpenid') === null && getApp().globalData.officialAuthOn) {
|
|
|
|
|
+ common.goToUrl(`/pages/st1/business/h5/h5?type=0`, {
|
|
|
|
|
+ skipWay: 'redirectTo'
|
|
|
|
|
+ })
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 判断没有获取登录Account信息
|
|
|
|
|
+ if(common.isEmpty(getApp().globalData.userAccount)){
|
|
|
|
|
+ this.isLoginAccount()
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ return false
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 判断当前是否有就诊人 没有则前往添加页面
|
|
|
|
|
+ * 返回url 或 undefined
|
|
|
|
|
+ */
|
|
|
|
|
+ async toAddMemberOrNot(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 this.getDefaultMember({
|
|
|
|
|
+ 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
|
|
|
|
|
+
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取并全局默认操作人
|
|
|
|
|
+ * 默认卡号可以为空 默认获取报告单
|
|
|
|
|
+ * url(保留要跳转的页面)
|
|
|
|
|
+ * cardType(查询类型) 1查询就诊卡 14查询住院号 空查询就诊人
|
|
|
|
|
+ * isKeepPage(是否保留选择界面)
|
|
|
|
|
+ */
|
|
|
|
|
+ async getDefaultMember(data = {}) {
|
|
|
|
|
+ getApp().globalData.cardType = null
|
|
|
|
|
+ let member = {}
|
|
|
|
|
+ let defaultInfo = await this.getMember('defaultInfo', data.cardType)
|
|
|
|
|
+ if (!common.isEmpty(defaultInfo)) {
|
|
|
|
|
+ member = await this.currentUsersFilter(defaultInfo, data.cardType)
|
|
|
|
|
+ // 判断返回为空 或者 要查询到的是有卡类型的,当时过滤时返回的是没有的卡号的
|
|
|
|
|
+ if (common.isEmpty(member) || (common.isNotEmpty(data.cardType) && common.isEmpty(member.cardNo))) {
|
|
|
|
|
+ if (common.isNotEmpty(data.url)) {
|
|
|
|
|
+ getApp().globalData.toUrl = data.url;
|
|
|
|
|
+ }
|
|
|
|
|
+ let type = data.cardType == 1 ? 'card' : data.cardType == 14 ? 'hospital' : 'member'
|
|
|
|
|
+ let skipWay = data.isKeepPage ? 'navigateTo' : 'redirectTo'
|
|
|
|
|
+ common.goToUrl(`/pagesPersonal${uni.getStorageSync('wx_Slb')?'Slb':''}/st1/business/patientManagement/selecteCardOrHos/selecteCardOrHos?type=${type}`, {
|
|
|
|
|
+ skipWay: skipWay
|
|
|
|
|
+ })
|
|
|
|
|
+ return null
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ getApp().globalData.currentUser = member
|
|
|
|
|
+ return member
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 如果toUrl有值 即为添加就诊卡后跳转进toUrl页面 或 cardDeleted为true时(点击过删除按钮)
|
|
|
|
|
+ * 需要判断卡列表是否为空 为空返回上一页
|
|
|
|
|
+ * _this 当前调用页面
|
|
|
|
|
+ */
|
|
|
|
|
+ async cardListIsEmpty(cardType, _this) {
|
|
|
|
|
+ if (getApp().globalData.toUrl) {
|
|
|
|
|
+ getApp().globalData.toUrl = ""
|
|
|
|
|
+ let member = await this.getDefaultMember({
|
|
|
|
|
+ cardType: cardType,
|
|
|
|
|
+ });
|
|
|
|
|
+ if (common.isEmpty(member)) {
|
|
|
|
|
+ common.showModal(`该功能需要添加就诊卡`, () => {
|
|
|
|
|
+ common.navigateBack(1)
|
|
|
|
|
+ })
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
|
|
+ },
|
|
|
|
|
+ // cardType (type为获取默认操作人,才有效果,1:获取默认人下默认就诊卡;14:取默认人下默认住院号)
|
|
|
|
|
+ async getMember(type = 'memberList', cardType = 1) {
|
|
|
|
|
+ // type 值
|
|
|
|
|
+ // memberList: 查询就诊人列表,仅返回就诊人列表
|
|
|
|
|
+ // cardList: 查询就诊人列表并循环查询卡列表,返回所有就诊人下的所有卡
|
|
|
|
|
+ // defaultList: 查询就诊人列表,返回所有人列表,如果有默认就诊人就返回默认就诊人的就诊卡,如果没有就选第0条
|
|
|
|
|
+ // defaultInfo: 获取默认人下的所有卡,搭配cardType并过滤不是默认卡,仅返回默认cardTyp类型组合的一个对象
|
|
|
|
|
+ return new Promise(async (resolve, reject) => {
|
|
|
|
|
+ let resp = await uni.getStorageSync('memberList') || []
|
|
|
|
|
+ let memberList = []
|
|
|
|
|
+ let currentUser = {}
|
|
|
|
|
+ if (!resp.length && getApp().globalData.userAccount) {
|
|
|
|
|
+ await this.preserMember()
|
|
|
|
|
+ resp = uni.getStorageSync('memberList')
|
|
|
|
|
+ }
|
|
|
|
|
+ if (common.isNotEmpty(resp)) {
|
|
|
|
|
+ memberList = resp
|
|
|
|
|
+ // 判断为获取默认就诊人
|
|
|
|
|
+ if (type == 'defaultInfo') {
|
|
|
|
|
+ let memberLists = memberList.filter(item => item.userMemberList[0].isDefaultMember == 1)
|
|
|
|
|
+ // 判断过滤默认操作人
|
|
|
|
|
+ if (common.isNotEmpty(memberLists)) {
|
|
|
|
|
+ currentUser = memberLists[0]
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 没有默认操作人查询人列表第一条
|
|
|
|
|
+ currentUser = memberList[0]
|
|
|
|
|
+ }
|
|
|
|
|
+ if (common.isNotEmpty(cardType)) {
|
|
|
|
|
+ let resp = await this.queryMemberCardList_V3(currentUser.memberId)
|
|
|
|
|
+ if (common.isNotEmpty(resp)) {
|
|
|
|
|
+ currentUser.data_1 = resp
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ resolve(currentUser)
|
|
|
|
|
+ }
|
|
|
|
|
+ // 判断为获取默认列表 返回所有人列表,如果有默认就诊人就返回默认就诊人的就诊卡,如果没有就选第0条
|
|
|
|
|
+ if (type == 'defaultList') {
|
|
|
|
|
+ let memberListIndex = 0
|
|
|
|
|
+ let userInfo = memberList[memberListIndex]
|
|
|
|
|
+ memberList.forEach((item, index) => {
|
|
|
|
|
+ if (item.userMemberList[0].isDefaultMember == 1) {
|
|
|
|
|
+ userInfo = item
|
|
|
|
|
+ memberListIndex = index
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ let resp = await this.queryMemberCardList_V3(userInfo.memberId)
|
|
|
|
|
+ if (common.isNotEmpty(resp)) {
|
|
|
|
|
+ memberList[memberListIndex].data_1 = resp
|
|
|
|
|
+ }
|
|
|
|
|
+ resolve(memberList)
|
|
|
|
|
+ }
|
|
|
|
|
+ // 判断为获取所有人下所有卡列数据
|
|
|
|
|
+ if (type == 'cardList') {
|
|
|
|
|
+ for (var item of memberList) {
|
|
|
|
|
+ let resp = await this.queryMemberCardList_V3(item.memberId)
|
|
|
|
|
+ if (common.isNotEmpty(resp)) {
|
|
|
|
|
+ item.Data_1 = resp
|
|
|
|
|
+ } else {
|
|
|
|
|
+ item.Data_1 = []
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ resolve(memberList)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ resolve([])
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ // 获取就诊人下的his卡信息
|
|
|
|
|
+ async queryMemberCardList_V3(memberId) {
|
|
|
|
|
+ return new Promise(async (resolve, reject) => {
|
|
|
|
|
+ let querData = {
|
|
|
|
|
+ hosId: getApp().globalData.hosId,
|
|
|
|
|
+ memberId: memberId,
|
|
|
|
|
+ cardNoFormatDesensitization: "false"
|
|
|
|
|
+ }
|
|
|
|
|
+ let {
|
|
|
|
|
+ resp,
|
|
|
|
|
+ resData
|
|
|
|
|
+ } = await callApi('wsgw/accountMember/api/QueryMemberCardList_V3/callApiJSON.do', querData)
|
|
|
|
|
+ if (resData.RespCode == 10000 && common.isNotEmpty(resp)) {
|
|
|
|
|
+ resolve(resp)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ resolve([])
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ // 过滤使用人信息
|
|
|
|
|
+ async currentUsersFilter(currentUsers, cardType) {
|
|
|
|
|
+ return new Promise(async (resolve, reject) => {
|
|
|
|
|
+ let currentUser = {}
|
|
|
|
|
+ let cardUser = {}
|
|
|
|
|
+ // 判断存在数据进行过滤
|
|
|
|
|
+ if (currentUsers.data_1) {
|
|
|
|
|
+ let cardDataList = []
|
|
|
|
|
+ for (var item of currentUsers.data_1) {
|
|
|
|
|
+ if (item.cardType == cardType) {
|
|
|
|
|
+ cardDataList.push(item)
|
|
|
|
|
+ }
|
|
|
|
|
+ if (item.isDefault == 1 && item.cardType == cardType) {
|
|
|
|
|
+ cardUser = item
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (common.isEmpty(cardUser)) {
|
|
|
|
|
+ cardUser = cardDataList[0]
|
|
|
|
|
+ }
|
|
|
|
|
+ if (common.isNotEmpty(cardUser)) {
|
|
|
|
|
+ currentUser = common.mergeObject(currentUsers, cardUser)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if (common.isEmpty(cardType)) {
|
|
|
|
|
+ currentUser = currentUsers
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (common.isNotEmpty(currentUsers)) {
|
|
|
|
|
+ currentUser = currentUsers
|
|
|
|
|
+ }
|
|
|
|
|
+ resolve(currentUser)
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ //查询并保存全局所有就诊人数据信息 (就诊人改变后都要重新调用,并保存一遍)
|
|
|
|
|
+ async preserMember() {
|
|
|
|
|
+ let queryData = {
|
|
|
|
|
+ isCache: false,
|
|
|
|
|
+ isEncrypt: true,
|
|
|
|
|
+ hosId: getApp().globalData.districtId || getApp().globalData.hosId,
|
|
|
|
|
+ openid: uni.getStorageSync('openid'),
|
|
|
|
|
+ }
|
|
|
|
|
+ let {
|
|
|
|
|
+ resp,
|
|
|
|
|
+ resData
|
|
|
|
|
+ } = await callApi('wsgw/accountMember/api/QueryBaseMemberList_V3/callApiJSON.do', queryData)
|
|
|
|
|
+ // 请求成功且有返回值保存全局就诊人数据列表
|
|
|
|
|
+ getApp().globalData.currentUser = null;
|
|
|
|
|
+ if (resData.RespCode == 10000 && common.isNotEmpty(resp)) {
|
|
|
|
|
+ uni.setStorageSync('memberList', resp)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 否则保存空
|
|
|
|
|
+ uni.setStorageSync('memberList', null)
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 倒计时
|
|
|
|
|
+ */
|
|
|
|
|
+ countDown(timer) {
|
|
|
|
|
+ // This assumes this context has setData (Options API or legacy Page)
|
|
|
|
|
+ if (this.data && this.data.seconds <= 0) {
|
|
|
|
|
+ this.setData({
|
|
|
|
|
+ seconds: 120
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ let seconds = this.data ? this.data.seconds : 0;
|
|
|
|
|
+ if (timer) {
|
|
|
|
|
+ clearInterval(timer)
|
|
|
|
|
+ }
|
|
|
|
|
+ timer = setInterval(() => {
|
|
|
|
|
+ if (seconds > 0) {
|
|
|
|
|
+ seconds--
|
|
|
|
|
+ } else {
|
|
|
|
|
+ seconds = 0
|
|
|
|
|
+ clearInterval(timer)
|
|
|
|
|
+ }
|
|
|
|
|
+ if (this.setData) {
|
|
|
|
|
+ this.setData({
|
|
|
|
|
+ seconds
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ }, 1000)
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 来院导航
|
|
|
|
|
+ */
|
|
|
|
|
+ getLocation() {
|
|
|
|
|
+ let hospitalInfo = getApp().globalData.hospitalInfo;
|
|
|
|
|
+ let data = {
|
|
|
|
|
+ latitude: Number(hospitalInfo.Wd), //要去的纬度-地址
|
|
|
|
|
+ longitude: Number(hospitalInfo.Jd), //要去的经度-地址
|
|
|
|
|
+ name: hospitalInfo.HospitalAlias,
|
|
|
|
|
+ address: hospitalInfo.HospitalAddress
|
|
|
|
|
+ }
|
|
|
|
|
+ this.locationIsauthorization('gcj02', () => {
|
|
|
|
|
+ uni.openLocation(data)
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 地理位置是否授权
|
|
|
|
|
+ */
|
|
|
|
|
+ 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: '打开'
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+ // 判断当前业务页面用户是否需要授权
|
|
|
|
|
+ isPageUserAuth(currentUser, _this) {
|
|
|
|
|
+ return new Promise(async (resolve, reject) => {
|
|
|
|
|
+ // 返回值
|
|
|
|
|
+ let has = false
|
|
|
|
|
+ // 获取统一要授权的业务页面配置信息
|
|
|
|
|
+ let authBusinessPageObj = getApp().globalData.config.pageConfiguration.currency_config.authBusinessPage
|
|
|
|
|
+ // 获取当前业务页面地址
|
|
|
|
|
+ let pages = getCurrentPages()
|
|
|
|
|
+ let currentPage = pages[pages.length - 1]
|
|
|
|
|
+ let businessPageUrls = currentPage.route.split("/");
|
|
|
|
|
+ let pageObjName = businessPageUrls[businessPageUrls.length - 1]
|
|
|
|
|
+ // 获取当前业务页面配置的授权信息
|
|
|
|
|
+ let authLevel = authBusinessPageObj[pageObjName]
|
|
|
|
|
+ // 判断 authLevel不为空且当前用户信息小余当前业务需要授权的业务等级,代表当前业务页面需要先授权
|
|
|
|
|
+ if (common.isNotEmpty(authLevel)) {
|
|
|
|
|
+ let res = await callApi('wsgw/accountMember/api/QueryAccountUserLevel/callApiJSON.do', {
|
|
|
|
|
+ openId: uni.getStorageSync('openid'),
|
|
|
|
|
+ memberId: currentUser.memberId,
|
|
|
|
|
+ }).then(r => r.resp)
|
|
|
|
|
+
|
|
|
|
|
+ has = res && res[0] && res[0].accountUserLevel < authLevel ? true : false
|
|
|
|
|
+ }
|
|
|
|
|
+ _this.setData({
|
|
|
|
|
+ authorize: has,
|
|
|
|
|
+ authLevel: authLevel
|
|
|
|
|
+ })
|
|
|
|
|
+ resolve(has)
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ 判断当前用户是否被本人授权
|
|
|
|
|
+ currentUser:查询的用户
|
|
|
|
|
+ checkKey :{
|
|
|
|
|
+ Book: 预约挂号授权
|
|
|
|
|
+ Charge: 充值缴费授权
|
|
|
|
|
+ }
|
|
|
|
|
+ isShowMode: 是否弹窗提示
|
|
|
|
|
+ */
|
|
|
|
|
+ isCurrentUserAuth(currentUser, checkKey, isShowMode) {
|
|
|
|
|
+ return new Promise(async (resolve, reject) => {
|
|
|
|
|
+ // 判断如果是本人,不读取授权认证,皆为通过
|
|
|
|
|
+ if (currentUser.memberType == 1) {
|
|
|
|
|
+ resolve(false)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 没有accountSn就代表没有验证过本人,不做授权判断
|
|
|
|
|
+ if (common.isEmpty(currentUser.accountSn)) {
|
|
|
|
|
+ resolve(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ //否者就不是本人,查询授权数据信息,判断是否授权
|
|
|
|
|
+ let {
|
|
|
|
|
+ resp,
|
|
|
|
|
+ resData
|
|
|
|
|
+ } = await callApi('wsgw/accountMember/api/QueryAccountAuthDetail/callApiJSON.do', {
|
|
|
|
|
+ accountSn: currentUser.accountSn,
|
|
|
|
|
+ memberId: currentUser.memberId,
|
|
|
|
|
+ seniorOpen: 1
|
|
|
|
|
+ })
|
|
|
|
|
+ let has = false
|
|
|
|
|
+ if (resData.RespCode == '10000') {
|
|
|
|
|
+ let authInfo = resp[0]
|
|
|
|
|
+ // 判断当前用户 已开 启高级授权
|
|
|
|
|
+ if (authInfo.SeniorOpen == 1) {
|
|
|
|
|
+ // 判断 不在 授权时限内
|
|
|
|
|
+ if (common.isNotEmpty(authInfo.SeniorTime) && common.getTowNumDay(authInfo.SeniorTime, common.getDate()) < 0) {
|
|
|
|
|
+ has = true
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if (authInfo[checkKey + 'Open'] == 0 || (authInfo[checkKey + 'Open'] == 1 && common.isNotEmpty(authInfo[checkKey + 'Time']) && common.getTowNumDay(authInfo[checkKey + 'Time'], common.getDate()) < 0)) {
|
|
|
|
|
+ // 判断普通授权,根据
|
|
|
|
|
+ has = true
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (has && isShowMode) {
|
|
|
|
|
+ common.showModal('当前亲友成员未被授权,请联系本人授权后,在代为操作')
|
|
|
|
|
+ }
|
|
|
|
|
+ resolve(has)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ resolve(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ // 是否登陆账号
|
|
|
|
|
+ isLoginAccount() {
|
|
|
|
|
+ const userAccount = getApp().globalData.userAccount || {}
|
|
|
|
|
+ if (!Object.keys(userAccount).length) {
|
|
|
|
|
+ // 未登陆账号,跳转到登陆页面
|
|
|
|
|
+ common.goToUrl('/pages/st1/business/login/authorization/authorization')
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ // OpenID 获取账号信息
|
|
|
|
|
+ async getAccountByOpenid(clear) {
|
|
|
|
|
+ const userAccout = getApp().globalData.userAccount
|
|
|
|
|
+ if (userAccout && !clear) {
|
|
|
|
|
+ return userAccout
|
|
|
|
|
+ }
|
|
|
|
|
+ if (userAccout && userAccout.keep) {
|
|
|
|
|
+ delete userAccout.keep
|
|
|
|
|
+ return userAccout
|
|
|
|
|
+ }
|
|
|
|
|
+ const {
|
|
|
|
|
+ resp
|
|
|
|
|
+ } = await callApi('wsgw/accountMember/api/GetLastLoginAccount/callApiJSON.do', {
|
|
|
|
|
+ openId: uni.getStorageSync("openid")
|
|
|
|
|
+ })
|
|
|
|
|
+ if (resp) {
|
|
|
|
|
+ getApp().globalData.userAccount = resp.length ? resp[0] : null
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ // 手机号 获取账号信息,没有账号信息则默认新增
|
|
|
|
|
+ async getAccountByPhone(code) {
|
|
|
|
|
+ const {
|
|
|
|
|
+ fixedAppjsGlobalData,
|
|
|
|
|
+ webUiDiy
|
|
|
|
|
+ } = uni.getStorageSync("frontEndConfig")
|
|
|
|
|
+ // 获取账号信息
|
|
|
|
|
+ const openid = uni.getStorageSync("openid")
|
|
|
|
|
+ const {
|
|
|
|
|
+ resp
|
|
|
|
|
+ } = await callApi('wsgw/accountMember/api/CreateAccount/callApiJSON.do', {
|
|
|
|
|
+ openId: openid,
|
|
|
|
|
+ code,
|
|
|
|
|
+ smallProConfigKey: fixedAppjsGlobalData?.configKey,
|
|
|
|
|
+ })
|
|
|
|
|
+ if (!resp) return
|
|
|
|
|
+ // 如果没有最后一次登录信息,直接跳转
|
|
|
|
|
+ // 或者没开短信验证,则不做验证,直接返回前面的页面
|
|
|
|
|
+ // 或者openId 一直
|
|
|
|
|
+ if (!resp[0].lastLoginInfo || !webUiDiy.pageConfiguration?.login_config?.messageSys || openid == resp[0].lastLoginInfo.openId) {
|
|
|
|
|
+ getApp().globalData.userAccount = Object.assign({}, resp[0], {
|
|
|
|
|
+ keep: true
|
|
|
|
|
+ })
|
|
|
|
|
+ uni.navigateBack()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ // 对比OpenId,不一致则跳转到短信登录验证页面
|
|
|
|
|
+ if (openid != resp[0].lastLoginInfo.openId) {
|
|
|
|
|
+ uni.redirectTo({
|
|
|
|
|
+ url: `/pages/st1/business/login/verify/verify?accountSn=${resp[0].accountSn}&phone=${resp[0].mobile}`
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ async loadViewMenu() {
|
|
|
|
|
+ const { resp } = await callApi('wsgw/basic/basicApi/CacheGetValue/callApiJSON.do', {
|
|
|
|
|
+ key: 'smallproViewMenu'
|
|
|
|
|
+ })
|
|
|
|
|
+ if (resp && resp.length) {
|
|
|
|
|
+ const menu = JSON.parse(resp[0].Value || "[]")
|
|
|
|
|
+ menu.length && uni.setStorageSync('menuList', menu)
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取当前位置与医院的距离
|
|
|
|
|
+ * @param {Number} distance 距离半径(单位:公里)
|
|
|
|
|
+ */
|
|
|
|
|
+ getHospitalLocationDistance(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) => {
|
|
|
|
|
+ this.locationIsauthorization('gcj02', (res) => {
|
|
|
|
|
+ let distance = common.getDistance(res.latitude, res.longitude, hosLat, hosLng);
|
|
|
|
|
+ distance > limitDistance ? reject() : resolve();
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 处理首页和医院概况轮播图片地址
|
|
|
|
|
+ */
|
|
|
|
|
+ handlePhoto() {
|
|
|
|
|
+ let photoArr = []
|
|
|
|
|
+ let hospitalInfo = common.deepCopy(app.globalData.hospitalInfo);
|
|
|
|
|
+ if (!common.isEmpty(hospitalInfo.PhotoUrl)) {
|
|
|
|
|
+ hospitalInfo.PhotoUrl = JSON.parse(hospitalInfo.PhotoUrl)
|
|
|
|
|
+ /**处理图片url */
|
|
|
|
|
+ for (let i in hospitalInfo.PhotoUrl) {
|
|
|
|
|
+ hospitalInfo.PhotoUrl[i] = hospitalInfo.PhotoUrl[i].indexOf('http') != '-1' ? hospitalInfo.PhotoUrl[i] : `${REQUEST_CONFIG.BASE_URL}${hospitalInfo.PhotoUrl[i]}`
|
|
|
|
|
+ photoArr.push(hospitalInfo.PhotoUrl[i])
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return photoArr
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 调起人脸识别
|
|
|
|
|
+ */
|
|
|
|
|
+ startFacialRecognitionVerify(data) {
|
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
|
+ // #ifdef MP-WEIXIN
|
|
|
|
|
+ wx.startFacialRecognitionVerify({
|
|
|
|
|
+ name: data.memberName,
|
|
|
|
|
+ idCardNumber: data.idCardNo,
|
|
|
|
|
+ checkAliveType: 1,
|
|
|
|
|
+ success: function (res) {
|
|
|
|
|
+ resolve({
|
|
|
|
|
+ success: true,
|
|
|
|
|
+ value: res
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ fail: function (res) {
|
|
|
|
|
+ reject({
|
|
|
|
|
+ success: false,
|
|
|
|
|
+ value: res
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ // #endif
|
|
|
|
|
+ // #ifndef MP-WEIXIN
|
|
|
|
|
+ common.showToast('非微信小程序环境不支持人脸识别');
|
|
|
|
|
+ reject({ success: false, msg: 'Not supported' });
|
|
|
|
|
+ // #endif
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ // 处理医生返回值
|
|
|
|
|
+ doctorListHandle(list) {
|
|
|
|
|
+ if (common.isEmpty(list)) {
|
|
|
|
|
+ return list
|
|
|
|
|
+ }
|
|
|
|
|
+ for (let i of list) {
|
|
|
|
|
+ if (i.DoctorPhotourl) {
|
|
|
|
|
+ if (i.DoctorPhotourl.indexOf("http")) {
|
|
|
|
|
+ i.DoctorPhotourl = REQUEST_CONFIG.BASE_URL + i.DoctorPhotourl.replace(/\\/g, "/")
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ i.DoctorPhotourl = icon.equire_doctor
|
|
|
|
|
+ }
|
|
|
|
|
+ // 计算价格
|
|
|
|
|
+ i.phoneFeeDiy = i.PhoneFee ? common.centToYuan(i.PhoneFee).toFixed(2) : 0
|
|
|
|
|
+ i.videoFeeDiy = i.VideoFee ? common.centToYuan(i.VideoFee).toFixed(2) : 0
|
|
|
|
|
+ i.consultFeeDiy = i.ConsultFee ? common.centToYuan(i.ConsultFee).toFixed(2) : 0
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ let AvgAppraiseScore = '-';
|
|
|
|
|
+ // 用于做排序判断
|
|
|
|
|
+ let AvgAppraiseScoreTag = 0;
|
|
|
|
|
+ if (i.AppraiseCount > 0 && i.AppraiseScore > 0) {
|
|
|
|
|
+ AvgAppraiseScore = (i.AppraiseScore / i.AppraiseCount / 5 * 100).toFixed(0) + "%";
|
|
|
|
|
+ AvgAppraiseScoreTag = (i.AppraiseScore / i.AppraiseCount / 5 * 100).toFixed(0);
|
|
|
|
|
+ }
|
|
|
|
|
+ i.AvgAppraiseScore = AvgAppraiseScore;
|
|
|
|
|
+ i.AvgAppraiseScoreTag = AvgAppraiseScoreTag;
|
|
|
|
|
+
|
|
|
|
|
+ // 计算好评率
|
|
|
|
|
+ if (true) {
|
|
|
|
|
+ let highCount = getApp().globalData.config.net_pageConfiguration_patient.currency_config.iniHighAppraiseCount + i.HighAppraiseCountCons
|
|
|
|
|
+ let totalCount = getApp().globalData.config.net_pageConfiguration_patient.currency_config.iniHighAppraiseCount + (i.AppraiseCount !== undefined ? i.AppraiseCount : i.AppraiseCountCons)
|
|
|
|
|
+ let percentage = (highCount / totalCount) * 100
|
|
|
|
|
+ if (Number.isNaN(percentage)) {
|
|
|
|
|
+ i.percentage = '100%'
|
|
|
|
|
+ } else {
|
|
|
|
|
+ i.percentage = Math.ceil(percentage) > 100 ? 100 + "%" : Math.ceil(percentage) + "%"
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ i.scoreDiy = "5.0"
|
|
|
|
|
+ if ((i.AppraiseCount !== undefined ? i.AppraiseCount : i.AppraiseCountCons) && (i.AppraiseScore !== undefined ? i.AppraiseScore : i.AppraiseScoreCons)) {
|
|
|
|
|
+ // 评分
|
|
|
|
|
+ i.scoreDiy = Math.ceil((i.AppraiseScore !== undefined ? i.AppraiseScore : i.AppraiseScoreCons) / (i.AppraiseCount !== undefined ? i.AppraiseCount : i.AppraiseCountCons)).toFixed(1)
|
|
|
|
|
+ }
|
|
|
|
|
+ if (i.AppraiseRule) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ i.AppraiseRule = JSON.parse(i.AppraiseRule)
|
|
|
|
|
+ } catch (err) {
|
|
|
|
|
+ console.log('i.AppraiseRule格式化失败')
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return list
|
|
|
|
|
+ },
|
|
|
|
|
+ /** 查询患者分类列表
|
|
|
|
|
+ * 规则:
|
|
|
|
|
+ * 返参ClassificationType等于2为复诊患者规则,带入就诊记录(已签到)进行结果判断,符合则为复诊患者
|
|
|
|
|
+ * 若接口返回空,则为初诊患者
|
|
|
|
|
+ */
|
|
|
|
|
+ async queryPatientClassifiyList(member, doctorCode, self) {
|
|
|
|
|
+ return new Promise(async (resolve, reject) => {
|
|
|
|
|
+ let data = {
|
|
|
|
|
+ Status: 1
|
|
|
|
|
+ }
|
|
|
|
|
+ let {
|
|
|
|
|
+ resp,
|
|
|
|
|
+ resData
|
|
|
|
|
+ } = await callApi('wsgw/yy/yygh/QueryPatientClassifiyList/callApiJSON.do', data)
|
|
|
|
|
+ console.log("QueryPatientClassifiyList=====", resp)
|
|
|
|
|
+ if (resData.RespCode == "10000") {
|
|
|
|
|
+ if (common.isNotEmpty(resp)) {
|
|
|
|
|
+ // 筛选出复诊患者规则
|
|
|
|
|
+ let visit = resp.filter((item) => {
|
|
|
|
|
+ return item.ClassificationType == 2
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ console.log("visit=====", visit)
|
|
|
|
|
+ // 有复诊规则,执行预约记录的规则匹配逻辑
|
|
|
|
|
+ if (common.isNotEmpty(visit)) {
|
|
|
|
|
+ self.setData({
|
|
|
|
|
+ patientClassificationId: 2
|
|
|
|
|
+ })
|
|
|
|
|
+ try {
|
|
|
|
|
+ member.memberOtherInfo = JSON.parse(member.memberOtherInfo)
|
|
|
|
|
+ console.log("true")
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ member.memberOtherInfo = member.memberOtherInfo
|
|
|
|
|
+ console.log("false")
|
|
|
|
|
+ }
|
|
|
|
|
+ console.log("member=======", member)
|
|
|
|
|
+ resolve(await this.queryOutpatientVisitList(member, visit[0], doctorCode))
|
|
|
|
|
+ } else {
|
|
|
|
|
+ self.setData({
|
|
|
|
|
+ patientClassificationId: 1
|
|
|
|
|
+ })
|
|
|
|
|
+ resolve(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ resolve(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ resolve(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ /** 查询his预约记录并判断是否为复诊患者 */
|
|
|
|
|
+ async queryOutpatientVisitList(member, rule, doctorCode) {
|
|
|
|
|
+ return new Promise(async (resolve, reject) => {
|
|
|
|
|
+ let day = common.mul(rule.IntervalNum, 30)
|
|
|
|
|
+ var reqData = {
|
|
|
|
|
+ HosId: getApp().globalData.districtId || getApp().globalData.hosId,
|
|
|
|
|
+ StartDate: common.aFewDaysago(day),
|
|
|
|
|
+ EndDate: common.newDay(),
|
|
|
|
|
+ IgnoreHosId: true,
|
|
|
|
|
+ QueryAll: getApp().globalData.districtId || getApp().globalData.hosId,
|
|
|
|
|
+ MemberId: member.memberId,
|
|
|
|
|
+ CardType: member.cardType || "1",
|
|
|
|
|
+ CardNo: member.memberOtherInfo.defaultCard.cardNo,
|
|
|
|
|
+ Store: {
|
|
|
|
|
+ cardEncryptionStore: member.encryptionStore || '',
|
|
|
|
|
+ baseMemberEncryptionStore: member.baseMemberEncryptionStore
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ let {
|
|
|
|
|
+ resp,
|
|
|
|
|
+ resData
|
|
|
|
|
+ } = await callApi('wsgw/member/memberApi/QueryOutpatientVisitList/callApiJSON.do', reqData)
|
|
|
|
|
+ console.log("QueryOutpatientVisitList=====", resp)
|
|
|
|
|
+ if (resData.RespCode == "10000") {
|
|
|
|
|
+ if (common.isNotEmpty(resp)) {
|
|
|
|
|
+ resp = resp.filter((item) => {
|
|
|
|
|
+ return item.CardNo == member.cardNo
|
|
|
|
|
+ })
|
|
|
|
|
+ if (common.isNotEmpty(resp)) {
|
|
|
|
|
+ // 返回列表
|
|
|
|
|
+ if (member.List) {
|
|
|
|
|
+ resolve(resp)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ // 需判断就诊记录和对应医生的匹配次数
|
|
|
|
|
+ if (common.isNotEmpty(doctorCode)) {
|
|
|
|
|
+ let docRecord = resp.filter((item) => {
|
|
|
|
|
+ return item.DoctorCode == doctorCode
|
|
|
|
|
+ })
|
|
|
|
|
+ if (docRecord.length >= rule.HistoryMedicalTimesNum) {
|
|
|
|
|
+ resolve(true)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ resolve(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 直接判断就诊次数和配置中的是不是匹配
|
|
|
|
|
+ else {
|
|
|
|
|
+ if (resp.length >= rule.HistoryMedicalTimesNum) {
|
|
|
|
|
+ resolve(true)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ resolve(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ resolve(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ resolve(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ resolve(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 查询医生排班公共方法
|
|
|
|
|
+ * @param {Object} data - 查询参数
|
|
|
|
|
+ * @param {Object} options - 额外配置参数
|
|
|
|
|
+ * @returns {Array} - 处理后的医生排班数据
|
|
|
|
|
+ */
|
|
|
|
|
+ async queryClinicDoctorSchedule(resp, options = {}) {
|
|
|
|
|
+ if (!common.isEmpty(resp)) {
|
|
|
|
|
+ for (let i of resp) {
|
|
|
|
|
+ if (i.Data_1 && !common.isEmpty(i.Data_1)) {
|
|
|
|
|
+ i.Data_1.map(item => {
|
|
|
|
|
+ item.RegDateDiy = item.RegDate.substring(5),
|
|
|
|
|
+ item.WeekName = item.RegDate == common.newDay() ? '今天' : item.WeekName
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ /**如果医生头像没有域名 添加域名 */
|
|
|
|
|
+ if (i.PhotoUrl && i.PhotoUrl.indexOf('http') == '-1') {
|
|
|
|
|
+ i.PhotoUrl = REQUEST_CONFIG.BASE_URL + i.PhotoUrl
|
|
|
|
|
+ }
|
|
|
|
|
+ i.PhotoUrl = i.PhotoUrl.replace(/\\/g, '/')
|
|
|
|
|
+ if (i.Data_1.length > 6) {
|
|
|
|
|
+ i.Data_1_Diy = i.Data_1.slice(0, 5);
|
|
|
|
|
+ i.showAllSchedu = false
|
|
|
|
|
+ } else {
|
|
|
|
|
+ i.Data_1_Diy = i.Data_1;
|
|
|
|
|
+ i.showAllSchedu = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ resp.map(item => {
|
|
|
|
|
+ let obj = [{
|
|
|
|
|
+ Check: true,
|
|
|
|
|
+ DeptName: item.DeptName,
|
|
|
|
|
+ DeptCode: item.DeptCode,
|
|
|
|
|
+ DoctorName: item.DoctorName,
|
|
|
|
|
+ DoctorCode: item.DoctorCode,
|
|
|
|
|
+ Data_1: item.Data_1,
|
|
|
|
|
+ Data_1_Diy: item.Data_1_Diy,
|
|
|
|
|
+ showAllSchedu: item.showAllSchedu,
|
|
|
|
|
+ }]
|
|
|
|
|
+ item.Scheduling = obj
|
|
|
|
|
+ item.HosId = options.hosId
|
|
|
|
|
+ item.ChoiceHosId = options.hosId
|
|
|
|
|
+ })
|
|
|
|
|
+ return resp
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 医生与诊疗组匹配
|
|
|
|
|
+ * @param {Array} doctors - 医生列表
|
|
|
|
|
+ * @param {Array} groupList - 诊疗组列表
|
|
|
|
|
+ */
|
|
|
|
|
+ matchDoctorsWithGroup(doctors, groupList) {
|
|
|
|
|
+ if (!groupList || !Array.isArray(groupList)) return;
|
|
|
|
|
+
|
|
|
|
|
+ // 创建一个Map来存储诊疗组信息,key为医生代码
|
|
|
|
|
+ const doctorGroupMap = new Map();
|
|
|
|
|
+
|
|
|
|
|
+ // 遍历所有诊疗组,收集医生与诊疗组的对应关系
|
|
|
|
|
+ groupList.forEach(group => {
|
|
|
|
|
+ if (group.doctorList && Array.isArray(group.doctorList)) {
|
|
|
|
|
+ group.doctorList.forEach(doctor => {
|
|
|
|
|
+ if (doctor.code) {
|
|
|
|
|
+ doctorGroupMap.set(doctor.code, group);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 标记医生是否属于诊疗组,并赋值诊疗组信息
|
|
|
|
|
+ doctors.forEach(doctor => {
|
|
|
|
|
+ const groupInfo = doctorGroupMap.get(doctor.DoctorCode);
|
|
|
|
|
+ doctor.IsGroup = !!groupInfo;
|
|
|
|
|
+ if (groupInfo) {
|
|
|
|
|
+ doctor.GroupInfo = groupInfo;
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+ /** 全局开启分享 */
|
|
|
|
|
+ overShareMenu() {
|
|
|
|
|
+ // #ifdef MP-WEIXIN
|
|
|
|
|
+ wx.onAppRoute(() => {
|
|
|
|
|
+ //获取加载的页面
|
|
|
|
|
+ let pages = getCurrentPages(),
|
|
|
|
|
+ //获取当前页面的对象
|
|
|
|
|
+ view = pages[pages.length - 1];
|
|
|
|
|
+ if (view && view.onShareAppMessage) {
|
|
|
|
|
+ wx.showShareMenu({
|
|
|
|
|
+ withShareTicket: true,
|
|
|
|
|
+ menus: ['shareAppMessage', 'shareTimeline']
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ // #endif
|
|
|
|
|
+ }
|
|
|
|
|
+}
|