|
|
|
|
Page({
|
|
|
|
|
data: {
|
|
|
|
|
background: 'transparent',
|
|
|
|
|
imageUrl: '',
|
|
|
|
|
Timestamp: Date.now(),
|
|
|
|
|
|
|
|
|
|
popupShow: false,
|
|
|
|
|
popupType: '',
|
|
|
|
|
popupParams: {},
|
|
|
|
|
|
|
|
|
|
options: [] as Array<{ indicationId: number; indicationName: string; active: boolean }>,
|
|
|
|
|
agreementChecked: true,
|
|
|
|
|
|
|
|
|
|
projectId: '',
|
|
|
|
|
projectName: '',
|
|
|
|
|
currentProjectName: '',
|
|
|
|
|
projectIndex: 0,
|
|
|
|
|
projectList: [] as Array<{ projectId: number; projectName: string; projectDescription: string }>,
|
|
|
|
|
|
|
|
|
|
// 扫码获取的药师ID
|
|
|
|
|
pharmacistId: '',
|
|
|
|
|
|
|
|
|
|
isLogin: 0,
|
|
|
|
|
isPatient: 0,
|
|
|
|
|
|
|
|
|
|
// 是否已有项目
|
|
|
|
|
hasProject: false,
|
|
|
|
|
// 选中的适应症名称
|
|
|
|
|
selectedIndicationName: '',
|
|
|
|
|
|
|
|
|
|
bannerList: [] as any[],
|
|
|
|
|
|
|
|
|
|
// 用户信息
|
|
|
|
|
avatarUrl: '',
|
|
|
|
|
nickname: '',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
onLoad() {
|
|
|
|
|
const app = getApp<IAppOption>()
|
|
|
|
|
|
|
|
|
|
// 从 globalData 初始化扫码参数
|
|
|
|
|
const pharmacistId = app.globalData.pharmacistId || ''
|
|
|
|
|
const projectId = app.globalData.projectId || ''
|
|
|
|
|
|
|
|
|
|
this.setData({
|
|
|
|
|
pharmacistId,
|
|
|
|
|
projectId,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
app.waitLogin().then(() => {
|
|
|
|
|
this.getBanner()
|
|
|
|
|
this.checkStatus()
|
|
|
|
|
this.getUserInfo()
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 切换项目
|
|
|
|
|
onProjectChange(e: WechatMiniprogram.CustomEvent) {
|
|
|
|
|
const index = e.detail.value
|
|
|
|
|
const project = this.data.projectList[index]
|
|
|
|
|
|
|
|
|
|
if (!project || project.projectId === this.data.projectList[this.data.projectIndex]?.projectId) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wx.ajax({
|
|
|
|
|
method: 'POST',
|
|
|
|
|
url: '/app/patient/patient/switch-project',
|
|
|
|
|
data: {
|
|
|
|
|
projectId: project.projectId,
|
|
|
|
|
},
|
|
|
|
|
}).then(() => {
|
|
|
|
|
this.setData({
|
|
|
|
|
projectIndex: index,
|
|
|
|
|
currentProjectName: project.projectName,
|
|
|
|
|
projectId: String(project.projectId),
|
|
|
|
|
})
|
|
|
|
|
// 刷新页面数据
|
|
|
|
|
this.getBanner()
|
|
|
|
|
this.checkStatus()
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
getBanner() {
|
|
|
|
|
wx.ajax({
|
|
|
|
|
method: 'GET',
|
|
|
|
|
url: '/app/patient/patient/banner-list',
|
|
|
|
|
data: {
|
|
|
|
|
projectId: this.data.projectId,
|
|
|
|
|
},
|
|
|
|
|
}).then((res: any) => {
|
|
|
|
|
this.setData({
|
|
|
|
|
bannerList: res,
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
checkStatus() {
|
|
|
|
|
wx.ajax({
|
|
|
|
|
method: 'GET',
|
|
|
|
|
url: '/app/patient/patient/patient-project-list',
|
|
|
|
|
})
|
|
|
|
|
.then((res: any) => {
|
|
|
|
|
const projectList = res.list || []
|
|
|
|
|
const currentProjectId = res.currentProjectId
|
|
|
|
|
|
|
|
|
|
// 存储项目列表和当前项目ID
|
|
|
|
|
this.setData({
|
|
|
|
|
projectList,
|
|
|
|
|
currentProjectId,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if (projectList.length > 0) {
|
|
|
|
|
// 找到当前项目
|
|
|
|
|
const currentProject = projectList.find((p: any) => p.projectId === currentProjectId) || projectList[0]
|
|
|
|
|
|
|
|
|
|
// 检查扫码的项目是否在已绑定项目列表中
|
|
|
|
|
const scanProjectId = this.data.projectId
|
|
|
|
|
if (scanProjectId) {
|
|
|
|
|
const scanProject = projectList.find((p: any) => String(p.projectId) === String(scanProjectId))
|
|
|
|
|
if (scanProject) {
|
|
|
|
|
// 扫码的项目已绑定,切换到该项目
|
|
|
|
|
if (String(scanProjectId) !== String(currentProjectId)) {
|
|
|
|
|
this.switchProject(scanProjectId)
|
|
|
|
|
} else {
|
|
|
|
|
// 已经是当前项目,直接显示
|
|
|
|
|
this.setData({
|
|
|
|
|
isLogin: 1,
|
|
|
|
|
isPatient: 1,
|
|
|
|
|
projectId: currentProject.projectId,
|
|
|
|
|
projectName: currentProject.projectName,
|
|
|
|
|
currentProjectName: currentProject.projectName,
|
|
|
|
|
hasProject: true,
|
|
|
|
|
selectedIndicationName: currentProject.indicationName,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// 扫码的项目未绑定,进入选择流程(需要绑定新项目)
|
|
|
|
|
this.setData({
|
|
|
|
|
hasProject: false,
|
|
|
|
|
})
|
|
|
|
|
this.getProjectInfo()
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// 没有扫码,显示当前项目
|
|
|
|
|
this.setData({
|
|
|
|
|
isLogin: 1,
|
|
|
|
|
isPatient: 1,
|
|
|
|
|
projectId: currentProject.projectId,
|
|
|
|
|
projectName: currentProject.projectName,
|
|
|
|
|
currentProjectName: currentProject.projectName,
|
|
|
|
|
hasProject: true,
|
|
|
|
|
selectedIndicationName: currentProject.indicationName,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// 没有绑定任何项目,获取项目列表供选择
|
|
|
|
|
this.setData({
|
|
|
|
|
hasProject: false,
|
|
|
|
|
})
|
|
|
|
|
this.getProjectInfo()
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.catch(() => {
|
|
|
|
|
// 接口失败,获取项目列表
|
|
|
|
|
this.setData({
|
|
|
|
|
hasProject: false,
|
|
|
|
|
})
|
|
|
|
|
this.getProjectInfo()
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 切换项目
|
|
|
|
|
switchProject(projectId: string) {
|
|
|
|
|
wx.ajax({
|
|
|
|
|
method: 'POST',
|
|
|
|
|
url: '/app/patient/patient/switch-project',
|
|
|
|
|
data: {
|
|
|
|
|
projectId,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
.then(() => {
|
|
|
|
|
wx.showToast({
|
|
|
|
|
title: '已切换到该项目',
|
|
|
|
|
icon: 'success',
|
|
|
|
|
})
|
|
|
|
|
// 刷新页面数据
|
|
|
|
|
this.checkStatus()
|
|
|
|
|
})
|
|
|
|
|
.catch(() => {
|
|
|
|
|
// 切换失败,重新检查状态
|
|
|
|
|
this.checkStatus()
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 获取用户信息
|
|
|
|
|
getUserInfo() {
|
|
|
|
|
wx.ajax({
|
|
|
|
|
method: 'GET',
|
|
|
|
|
url: '/app/patient/patient/patient-info',
|
|
|
|
|
}).then((res: any) => {
|
|
|
|
|
this.setData({
|
|
|
|
|
avatarUrl: res.avatar || '',
|
|
|
|
|
nickname: res.name || '',
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 选择头像
|
|
|
|
|
onChooseAvatar(e: WechatMiniprogram.CustomEvent) {
|
|
|
|
|
const { avatarUrl } = e.detail
|
|
|
|
|
const app = getApp<IAppOption>()
|
|
|
|
|
// 上传头像
|
|
|
|
|
wx.uploadFile({
|
|
|
|
|
url: `${app.globalData.url }/app/common/common/upload`,
|
|
|
|
|
filePath: avatarUrl,
|
|
|
|
|
name: 'file',
|
|
|
|
|
header: {
|
|
|
|
|
Authorization: wx.getStorageSync('token'),
|
|
|
|
|
},
|
|
|
|
|
success: (res) => {
|
|
|
|
|
const data = JSON.parse(res.data)
|
|
|
|
|
if (data.code === 0) {
|
|
|
|
|
const url = data.data.url
|
|
|
|
|
this.setData({
|
|
|
|
|
avatarUrl: url,
|
|
|
|
|
})
|
|
|
|
|
// 更新用户信息(头像)
|
|
|
|
|
this.updateUserInfo('avatar')
|
|
|
|
|
} else {
|
|
|
|
|
wx.showToast({
|
|
|
|
|
title: data.msg || '上传失败',
|
|
|
|
|
icon: 'none',
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
fail: () => {
|
|
|
|
|
wx.showToast({
|
|
|
|
|
title: '上传失败',
|
|
|
|
|
icon: 'none',
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 昵称选择/输入时保存
|
|
|
|
|
onNicknameReview(e: WechatMiniprogram.CustomEvent) {
|
|
|
|
|
const nickname = e.detail.value
|
|
|
|
|
this.setData({
|
|
|
|
|
nickname,
|
|
|
|
|
})
|
|
|
|
|
// 昵称修改后保存,允许空值(清空昵称)
|
|
|
|
|
this.updateUserInfo('name')
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 更新用户信息
|
|
|
|
|
updateUserInfo(type?: 'avatar' | 'name') {
|
|
|
|
|
const data: any = {}
|
|
|
|
|
// 如果是头像更新,只传头像
|
|
|
|
|
if (type === 'avatar' && this.data.avatarUrl) {
|
|
|
|
|
data.avatar = this.data.avatarUrl
|
|
|
|
|
}
|
|
|
|
|
// 如果是昵称更新,只传昵称
|
|
|
|
|
if (type === 'name') {
|
|
|
|
|
data.name = this.data.nickname
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!data.avatar && !data.name) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wx.ajax({
|
|
|
|
|
method: 'POST',
|
|
|
|
|
url: '/app/patient/patient/update-info',
|
|
|
|
|
data,
|
|
|
|
|
}).then(() => {
|
|
|
|
|
wx.showToast({
|
|
|
|
|
title: '保存成功',
|
|
|
|
|
icon: 'success',
|
|
|
|
|
})
|
|
|
|
|
}).catch(() => {
|
|
|
|
|
wx.showToast({
|
|
|
|
|
title: '保存失败',
|
|
|
|
|
icon: 'none',
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
getProjectInfo() {
|
|
|
|
|
const params: any = {}
|
|
|
|
|
// 如果有 projectId,传入获取指定项目信息
|
|
|
|
|
if (this.data.projectId) {
|
|
|
|
|
params.projectId = this.data.projectId
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wx.ajax({
|
|
|
|
|
method: 'GET',
|
|
|
|
|
url: '/app/patient/patient/project-info',
|
|
|
|
|
data: params,
|
|
|
|
|
}).then((res: any) => {
|
|
|
|
|
this.setData({
|
|
|
|
|
projectId: res.projectId,
|
|
|
|
|
projectName: res.projectName,
|
|
|
|
|
currentProjectName: res.projectName,
|
|
|
|
|
options: res.indications.map((item: any) => ({
|
|
|
|
|
indicationId: item.indicationId,
|
|
|
|
|
indicationName: item.indicationName,
|
|
|
|
|
active: false,
|
|
|
|
|
})),
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
handlePopupOk() {
|
|
|
|
|
this.setData({
|
|
|
|
|
popupShow: false,
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
handlePopupCancel() {
|
|
|
|
|
this.setData({
|
|
|
|
|
popupShow: false,
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
selectOption(e) {
|
|
|
|
|
const indicationId = e.currentTarget.dataset.id as number
|
|
|
|
|
const newOptions = this.data.options.map((option) => ({
|
|
|
|
|
...option,
|
|
|
|
|
active: option.indicationId === indicationId,
|
|
|
|
|
}))
|
|
|
|
|
this.setData({
|
|
|
|
|
options: newOptions,
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
handleWxSubmit(e: WechatMiniprogram.CustomEvent) {
|
|
|
|
|
if (!this.data.agreementChecked) {
|
|
|
|
|
wx.showToast({
|
|
|
|
|
icon: 'none',
|
|
|
|
|
title: '请同意用户协议',
|
|
|
|
|
})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const selectedOption = this.data.options.find((item) => item.active)
|
|
|
|
|
if (!selectedOption) {
|
|
|
|
|
wx.showToast({
|
|
|
|
|
icon: 'none',
|
|
|
|
|
title: '请选择适应症',
|
|
|
|
|
})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const { iv, encryptedData } = e.detail
|
|
|
|
|
if (iv && encryptedData) {
|
|
|
|
|
const app = getApp<IAppOption>()
|
|
|
|
|
const sessionKey = app.globalData.initLoginInfo?.sessionKey || ''
|
|
|
|
|
|
|
|
|
|
// 患者微信登录/注册
|
|
|
|
|
const params: any = {
|
|
|
|
|
sessionKey,
|
|
|
|
|
encryptedData,
|
|
|
|
|
iv,
|
|
|
|
|
}
|
|
|
|
|
// 如果有扫码参数,传入
|
|
|
|
|
if (this.data.pharmacistId) {
|
|
|
|
|
params.pharmacistId = Number.parseInt(this.data.pharmacistId)
|
|
|
|
|
}
|
|
|
|
|
if (this.data.projectId) {
|
|
|
|
|
params.projectId = this.data.projectId
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 添加适应症ID
|
|
|
|
|
params.indicationId = selectedOption.indicationId
|
|
|
|
|
|
|
|
|
|
wx.ajax({
|
|
|
|
|
method: 'POST',
|
|
|
|
|
url: '/app/patient/patient/wx-login',
|
|
|
|
|
data: params,
|
|
|
|
|
}).then((res: any) => {
|
|
|
|
|
const jumpUrl = res.jumpUrl
|
|
|
|
|
|
|
|
|
|
// 直接跳转药箱小程序
|
|
|
|
|
wx.navigateToMiniProgram({
|
|
|
|
|
appId: 'wx05551c5ee1fd1c12',
|
|
|
|
|
path: jumpUrl,
|
|
|
|
|
success: () => {
|
|
|
|
|
this.checkStatus()
|
|
|
|
|
},
|
|
|
|
|
fail: () => {
|
|
|
|
|
this.checkStatus()
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
toggleAgreement() {
|
|
|
|
|
this.setData({
|
|
|
|
|
agreementChecked: !this.data.agreementChecked,
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
handleAgreement() {
|
|
|
|
|
wx.navigateTo({
|
|
|
|
|
url: '/privacy/pages/policy1/index',
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
handleWork() {
|
|
|
|
|
wx.navigateTo({
|
|
|
|
|
url: '/pages/work/index',
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
handleJump() {
|
|
|
|
|
// 跳转到腾讯药箱小程序
|
|
|
|
|
wx.navigateToMiniProgram({
|
|
|
|
|
appId: 'wx05551c5ee1fd1c12',
|
|
|
|
|
path: '',
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
onShareAppMessage() {
|
|
|
|
|
return {
|
|
|
|
|
title: '华观健康',
|
|
|
|
|
path: '/pages/index/index',
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
})
|