信达小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

537 lines
13 KiB

import dayjs from 'dayjs'
import licia from 'miniprogram-licia'
import component from '@/utils/component'
import relativeTime from '@/utils/dayjs/relativeTime.js'
import page from '@/utils/page'
import { request } from '@/utils/request'
import { parseScene } from './utils/util'
require('/utils/dayjs/day-zh-cn.js')
dayjs.locale('zh-cn') // 全局使用
dayjs.extend(relativeTime)
App<IAppOption>({
globalData: {
// 测试号 wx2b0bb13edf717c1d
// dev
// appid:wxf9ce8010f1ad24aa
url: 'https://m.xd.hbraas.com',
upFileUrl: 'https://m.xd.hbraas.com/',
imageUrl: 'https://m.xd.hbraas.com/xd/',
// pro
// appid:wx71ac9c27c3c3e3f4
// url: 'https://m.xd.hbsaas.com',
// upFileUrl: 'https://m.xd.hbsaas.com/',
// imageUrl: 'https://m.xd.hbsaas.com/api/xd/',
loginState: '',
isLogin: 0,
isNewReg: 0,
loginType: 0,
anyWhere: false,
scene: {},
backPath: '',
zdUserInfo: {},
DiagnoseType: [
{
id: 1,
name: 'Ⅰ型 眼肌无力,可伴闭眼无力,其它肌群肌力正常',
},
{
id: 2,
name: 'Ⅱa 型 主要累及四肢肌或(和)躯干肌,可有较轻的咽喉肌受累',
},
{
id: 3,
name: 'Ⅱb 型 主要累及咽喉肌或(和)呼吸肌,可有轻度或相同的四肢肌或(和)躯干肌受累',
},
{
id: 4,
name: 'Ⅲa 型 主要累及四肢肌或(和)躯干肌,可有较轻的咽喉肌受累',
},
{
id: 5,
name: 'Ⅲb 型 主要累及咽喉肌或(和)呼吸肌,可有轻度或相同的四肢肌或(和)躯干肌受累',
},
{
id: 6,
name: 'Ⅳa 型 主要累及四肢肌或(和)躯干肌受累,可有较轻的咽喉肌受累',
},
{
id: 7,
name: 'Ⅳb 型 主要累及咽喉肌或(和)呼吸肌,可有轻度或相同的四肢肌或(和)躯干肌受累',
},
{
id: 8,
name: 'Ⅴ型 气管插管,伴或不伴机械通气(除外术后常规使用);仅鼻饲而不进行气管插管的病例为Ⅳb 型',
},
{
id: 9,
name: '其它',
},
],
storyStatus: {
1: '已提交待审核',
2: '审核未通过',
3: '审核通过待校正',
4: '校正完成',
5: '已发布',
100: '审核未通过',
},
liveStatus: {
1: '待开始',
2: '会议中',
3: '已结束',
99: '取消',
100: '已删除',
},
activityStatus: {
1: '待开始',
2: '进行中',
3: '已结束',
99: '取消',
100: '已删除',
},
liveSubscribe: {
sub: false,
tmplIds: [],
},
},
onLaunch() {
Page = page as WechatMiniprogram.Page.Constructor
Component = component as WechatMiniprogram.Component.Constructor
wx.ajax = licia.curry(request)({ gUrl: this.globalData.url })
this.startLogin()
wx.setInnerAudioOption({
obeyMuteSwitch: false,
mixWithOther: false,
})
},
onShow(options) {
if (options.query.scene) {
this.globalData.scene = parseScene(options.query.scene)
}
else if (options.query.proMethodId) {
this.globalData.scene.proMethodId = options.query.proMethodId
}
},
startLogin(callback) {
wx.login({
success: (res) => {
wx.ajax({
method: 'GET',
url: '?r=xd/user/init-login',
data: {
code: res.code,
},
}).then((res: any) => {
this.globalData.loginState = res.loginState
this.globalData.isLogin = res.isLogin
this.globalData.isNewReg = res.isNewReg
this.globalData.loginType = res.loginType
if (callback) {
callback()
}
})
},
})
},
updateLoginInfo(callback?: (any) => void) {
wx.ajax({
method: 'GET',
url: '?r=xd/user/get-account-info',
data: {},
}).then((res) => {
this.globalData.isLogin = res.isLogin
this.globalData.loginType = res.loginType
this.globalData.isNewReg = res.isNewReg
if (callback) {
callback(res)
}
})
},
waitLogin({ type = [0] } = { type: 'any' }) {
return new Promise((resolve) => {
const checkLogin = () => {
if (this.globalData.loginState) {
if (this.checkLoginType(type as pageType[] | 'any')) {
resolve()
}
return
}
setTimeout(() => {
checkLogin()
}, 500)
}
checkLogin()
})
},
checkLoginType(type, backPath = '') {
const { loginType, isLogin, isNewReg } = this.globalData
if (backPath) {
this.globalData.backPath = backPath
}
if (type === 'any') {
return true
}
if (isLogin !== 1) {
if (type.includes(0) && [0, 1, 2].includes(loginType)) {
return true
}
if ([0, 1].includes(loginType)) {
wx.reLaunch({
url: '/patient/pages/login/index',
})
return false
}
if (loginType === 2) {
wx.reLaunch({
url: '/pages/login/index',
})
return false
}
return false
}
if (isNewReg !== 1) {
const typePageUrl = {
1: '/patient/pages/enterInfo/index',
2: '/pages/login/index',
}[loginType as 1 | 2]
wx.reLaunch({
url: typePageUrl,
fail(err) {
console.log(err)
},
})
return false
}
if (!type.includes(loginType)) {
const typePageUrl = {
1: '/patient/pages/index/index',
2: '/pages/home/index',
}[loginType as 1 | 2]
wx.reLaunch({
url: typePageUrl,
})
return false
}
return true
},
getUserInfo(type: 0 | 1 | 2): Promise<never> {
const url = {
2: '?r=xd/doctor/index/get-doctor',
}[type]
return wx.ajax({
method: 'GET',
url,
data: {},
}) as Promise<never>
},
mpBehavior(data: { doctor?: boolean, PageName: string }) {
let url = '?r=zd/mp-behavior/add'
if (data.doctor) {
url = '?r=zd/doctor/mp-behavior/add'
delete data.doctor
}
wx.ajax({
method: 'POST',
url,
data,
loading: false,
showMsg: false,
}).then((res) => {
console.log('res: ', res)
})
},
oldMpBehavior(data) {
wx.ajax({
method: 'POST',
url: '?r=xd/doctor/index/operate-action-submit',
data,
loading: false,
showMsg: false,
})
},
getMenuInfo(self) {
const menuButtonInfo = wx.getMenuButtonBoundingClientRect()
self.setData({
menuButtonInfo,
})
},
// zd相关函数
zdMpBehavior(data: { PageName: string, doctor?: boolean }) {
const { loginType } = this.globalData
if (loginType === 0)
return
let url = '?r=zd/mp-behavior/add'
if (data.doctor) {
url = '?r=zd/doctor/mp-behavior/add'
}
delete data.doctor
wx.ajax({
method: 'POST',
url,
data,
loading: false,
showMsg: false,
}).then((res) => {
console.log('res: ', res)
})
},
zdGetTheme() {
return new Promise((resolve) => {
resolve('PATIENT')
})
},
zdWaitLogin({ isReg = true, loginPage = false, pub = false } = { isReg: true, loginPage: false, pub: false }) {
let time: number
const regFun = (resolve) => {
if (this.zdVerifySys(pub)) {
if (this.globalData.loginType === 1) {
this.zdRegistrationVerification(() => resolve(), loginPage)
}
else {
resolve()
}
}
}
const unRegFun = (resolve) => {
if (!this.zdVerifySys(pub))
return
resolve()
}
return new Promise((resolve: (value?) => void) => {
if (isReg) {
if (Object.keys(this.globalData.zdUserInfo).length) {
regFun(resolve)
return
}
time = setInterval(() => {
if (Object.keys(this.globalData.zdUserInfo).length) {
clearInterval(time)
regFun(resolve)
}
}, 500)
return
}
this.globalData.anyWhere = true
if (this.globalData.loginState) {
unRegFun(resolve)
return
}
time = setInterval(() => {
if (this.globalData.loginState) {
clearInterval(time)
unRegFun(resolve)
}
}, 500)
})
},
zdRegistrationVerification(callback: () => void, loginPage = false) {
// 1-空白用户,2-注册用户,3-疾病患者,4-用药患者
const { PatientId, AuditStatus, isFollow, UserType } = this.globalData.zdUserInfo
const { anyWhere, first } = this.globalData
if (loginPage || (anyWhere && first)) {
callback()
return
}
if (UserType == 4) {
this.globalData.first = false
callback()
return
}
if (UserType == 1) {
this.globalData.registChannel = 0
this.globalData.first = false
wx.reLaunch({
url: '/patient/pages/login/index',
})
return
}
let urlKey = ''
if (!PatientId) {
urlKey = 'enterInfo'
}
else if (AuditStatus == 0) {
urlKey = 'noCert'
}
else if (AuditStatus == 1) {
urlKey = isFollow ? 'nopending' : 'pending'
}
else if (AuditStatus == 2) {
urlKey = 'reject'
}
const navUrl = {
enterInfo: '/patient/pages/enterInfo/index',
noCert: '/patient/pages/enterInfo/index',
reject: '/patient/pages/enterInfo/index',
pending: '/patient/pages/enterInfo/index',
nopending: '/patient/pages/enterInfo/index',
}[urlKey]
if (navUrl && first) {
this.globalData.registChannel = 0
this.globalData.first = false
wx.reLaunch({
url: navUrl,
})
this.globalData.first = false
return
}
this.globalData.first = false
callback()
},
zdVerifySys(pub = false) {
// 1:患者 2:医生
const { loginType, isLogin, anyWhere } = this.globalData
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
const url = currentPage.route
const options = currentPage.options
const ignorePath = ['pages/start/index']
// 未登录用户
if (!isLogin) {
// 医生端页面重定向到医生端登录页
if (url.includes('doctor/pages')) {
wx.reLaunch({
url: '/doctor/pages/d_login/index',
})
return false
}
// 患者端随便看看
if (anyWhere) {
return true
}
wx.reLaunch({
url: '/patient/pages/login/index',
})
return false
}
if (ignorePath.includes(url))
return true
if (loginType === 1) {
if (url.includes('doctor/pages')) {
wx.reLaunch({
url: '/pages/index/index',
})
return false
}
else {
return true
}
}
if (loginType === 2 && !pub) {
if (url.includes('doctor/pages')) {
return true
}
else {
const params = Object.entries(options)
.map(([key, value]) => `${key}=${value}`)
.join('&')
wx.reLaunch({
url: `/doctor/pages/d_trans/index?path=${encodeURIComponent(`/${url}?${params}`)}`,
})
return false
}
}
return true
},
zdPermissionVerification(grade = 1, registChannel = 0, backPage = null, regBusinessId = '') {
const { isLogin, isNewReg } = this.globalData
const that = this
this.globalData.registChannel = registChannel
this.globalData.regBusinessId = regBusinessId
let isReject = false
return new Promise((resolve, reject) => {
if (grade > 1) {
if (!isLogin) {
wx.reLaunch({
url: '/patient/pages/login/index',
})
isReject = true
}
else if (!isNewReg) {
wx.reLaunch({
url: '/patient/pages/enterInfo/index',
})
isReject = true
}
}
if (isReject) {
that.globalData.backPage = backPage
reject(new Error('非登录用户拦截'))
return
}
resolve(null)
})
},
getZdUserInfo(self, update = false, callback = (_zdUserInfo) => {}) {
if (this.globalData.zdUserInfo?.UserId && !update) {
self?.setData({
zdUserInfo: this.globalData.zdUserInfo,
})
callback(this.globalData.zdUserInfo)
return
}
wx.ajax({
method: 'GET',
url: '?r=zd/account/info',
showMsg: false,
}).then((res) => {
res.UserType = res.UserType || 1
if (res.UserType > 2) {
this.globalData.anyWhere = false
}
this.globalData.zdUserInfo = res
self?.setData({
zdUserInfo: res,
})
const { doctorId, inviteChan, proMethodId } = this.globalData.scene
if (doctorId && res.InviteDoctorId != doctorId && this.globalData.isLogin && res.PatientId) {
wx.ajax({
method: 'POST',
url: '?r=zd/account/update-doctor',
data: {
inviteDoctorId: doctorId,
inviteChannel: inviteChan,
},
}).then(() => {
this.globalData.scene = {}
this.getZdUserInfo(self, update, callback)
})
}
if (proMethodId) {
wx.ajax({
method: 'POST',
url: '?r=zd/account/set-user-promotion-method',
showMsg: false,
data: {
promotionMethodId: proMethodId,
},
})
}
callback(res)
})
},
})