|
|
|
|
@ -29,6 +29,10 @@ Page({
@@ -29,6 +29,10 @@ Page({
|
|
|
|
|
selectedIndicationName: '', |
|
|
|
|
|
|
|
|
|
bannerList: [] as any[], |
|
|
|
|
|
|
|
|
|
// 用户信息
|
|
|
|
|
avatarUrl: '', |
|
|
|
|
nickname: '', |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
onLoad() { |
|
|
|
|
@ -44,34 +48,9 @@ Page({
@@ -44,34 +48,9 @@ Page({
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
app.waitLogin().then(() => { |
|
|
|
|
this.getProjectList() |
|
|
|
|
this.getBanner() |
|
|
|
|
this.checkStatus() |
|
|
|
|
}) |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
// 获取项目列表
|
|
|
|
|
getProjectList() { |
|
|
|
|
wx.ajax({ |
|
|
|
|
method: 'GET', |
|
|
|
|
url: '/app/patient/patient/project-list', |
|
|
|
|
}).then((res: any) => { |
|
|
|
|
const projectList = res.list || [] |
|
|
|
|
const currentProjectId = res.currentProjectId |
|
|
|
|
|
|
|
|
|
// 找到当前项目的索引
|
|
|
|
|
let projectIndex = 0 |
|
|
|
|
projectList.forEach((item: any, index: number) => { |
|
|
|
|
if (item.projectId === currentProjectId) { |
|
|
|
|
projectIndex = index |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
this.setData({ |
|
|
|
|
projectList, |
|
|
|
|
projectIndex, |
|
|
|
|
currentProjectName: projectList[projectIndex]?.projectName || '华观健康', |
|
|
|
|
}) |
|
|
|
|
this.getUserInfo() |
|
|
|
|
}) |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
@ -117,28 +96,63 @@ Page({
@@ -117,28 +96,63 @@ Page({
|
|
|
|
|
checkStatus() { |
|
|
|
|
wx.ajax({ |
|
|
|
|
method: 'GET', |
|
|
|
|
url: '/app/patient/patient/recent-project', |
|
|
|
|
url: '/app/patient/patient/patient-project-list', |
|
|
|
|
}) |
|
|
|
|
.then((res: any) => { |
|
|
|
|
if (res && res.projectId) { |
|
|
|
|
// 检查扫码的项目是否与当前项目一致
|
|
|
|
|
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 && String(scanProjectId) !== String(res.projectId)) { |
|
|
|
|
// 扫码的是不同项目,检查患者是否已参与过该项目
|
|
|
|
|
this.checkAndSwitchProject(scanProjectId, res) |
|
|
|
|
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: res.projectId, |
|
|
|
|
projectName: res.projectName, |
|
|
|
|
projectId: currentProject.projectId, |
|
|
|
|
projectName: currentProject.projectName, |
|
|
|
|
currentProjectName: currentProject.projectName, |
|
|
|
|
hasProject: true, |
|
|
|
|
selectedIndicationName: res.indicationName, |
|
|
|
|
selectedIndicationName: currentProject.indicationName, |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
// 没有项目,获取项目列表供选择
|
|
|
|
|
// 没有绑定任何项目,获取项目列表供选择
|
|
|
|
|
this.setData({ |
|
|
|
|
hasProject: false, |
|
|
|
|
}) |
|
|
|
|
@ -154,60 +168,118 @@ Page({
@@ -154,60 +168,118 @@ Page({
|
|
|
|
|
}) |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
// 检查并切换项目
|
|
|
|
|
checkAndSwitchProject(scanProjectId: string, currentProject: any) { |
|
|
|
|
// 获取患者的项目列表
|
|
|
|
|
// 切换项目
|
|
|
|
|
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/project-list', |
|
|
|
|
}).then((projectRes: any) => { |
|
|
|
|
const projectList = projectRes.list || [] |
|
|
|
|
// 检查扫码的项目是否在患者已参与的项目列表中
|
|
|
|
|
const hasProject = projectList.some((p: any) => String(p.projectId) === String(scanProjectId)) |
|
|
|
|
|
|
|
|
|
if (hasProject) { |
|
|
|
|
// 患者已参与过该项目,自动切换
|
|
|
|
|
wx.ajax({ |
|
|
|
|
method: 'POST', |
|
|
|
|
url: '/app/patient/patient/switch-project', |
|
|
|
|
data: { |
|
|
|
|
projectId: scanProjectId, |
|
|
|
|
}, |
|
|
|
|
}).then(() => { |
|
|
|
|
wx.showToast({ |
|
|
|
|
title: '已切换到该项目', |
|
|
|
|
icon: 'success', |
|
|
|
|
}) |
|
|
|
|
// 刷新页面数据
|
|
|
|
|
this.getProjectList() |
|
|
|
|
this.checkStatus() |
|
|
|
|
}).catch(() => { |
|
|
|
|
// 切换失败,显示当前项目
|
|
|
|
|
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({ |
|
|
|
|
isLogin: 1, |
|
|
|
|
isPatient: 1, |
|
|
|
|
projectId: currentProject.projectId, |
|
|
|
|
projectName: currentProject.projectName, |
|
|
|
|
hasProject: true, |
|
|
|
|
selectedIndicationName: currentProject.indicationName, |
|
|
|
|
avatarUrl: url, |
|
|
|
|
}) |
|
|
|
|
// 更新用户信息(头像)
|
|
|
|
|
this.updateUserInfo('avatar') |
|
|
|
|
} else { |
|
|
|
|
wx.showToast({ |
|
|
|
|
title: data.msg || '上传失败', |
|
|
|
|
icon: 'none', |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
fail: () => { |
|
|
|
|
wx.showToast({ |
|
|
|
|
title: '上传失败', |
|
|
|
|
icon: 'none', |
|
|
|
|
}) |
|
|
|
|
} else { |
|
|
|
|
// 患者未参与过该项目,进入选择流程
|
|
|
|
|
this.setData({ |
|
|
|
|
hasProject: false, |
|
|
|
|
}) |
|
|
|
|
this.getProjectInfo() |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
}) |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
// 昵称选择/输入时保存
|
|
|
|
|
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(() => { |
|
|
|
|
// 获取项目列表失败,显示当前项目
|
|
|
|
|
this.setData({ |
|
|
|
|
isLogin: 1, |
|
|
|
|
isPatient: 1, |
|
|
|
|
projectId: currentProject.projectId, |
|
|
|
|
projectName: currentProject.projectName, |
|
|
|
|
hasProject: true, |
|
|
|
|
selectedIndicationName: currentProject.indicationName, |
|
|
|
|
wx.showToast({ |
|
|
|
|
title: '保存失败', |
|
|
|
|
icon: 'none', |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
}, |
|
|
|
|
@ -227,6 +299,7 @@ Page({
@@ -227,6 +299,7 @@ Page({
|
|
|
|
|
this.setData({ |
|
|
|
|
projectId: res.projectId, |
|
|
|
|
projectName: res.projectName, |
|
|
|
|
currentProjectName: res.projectName, |
|
|
|
|
options: res.indications.map((item: any) => ({ |
|
|
|
|
indicationId: item.indicationId, |
|
|
|
|
indicationName: item.indicationName, |
|
|
|
|
@ -296,6 +369,9 @@ Page({
@@ -296,6 +369,9 @@ Page({
|
|
|
|
|
params.projectId = this.data.projectId |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 添加适应症ID
|
|
|
|
|
params.indicationId = selectedOption.indicationId |
|
|
|
|
|
|
|
|
|
wx.ajax({ |
|
|
|
|
method: 'POST', |
|
|
|
|
url: '/app/patient/patient/wx-login', |
|
|
|
|
@ -303,34 +379,17 @@ Page({
@@ -303,34 +379,17 @@ Page({
|
|
|
|
|
}).then((res: any) => { |
|
|
|
|
const jumpUrl = res.jumpUrl |
|
|
|
|
|
|
|
|
|
// 如果有药师ID,创建绑定关系
|
|
|
|
|
if (this.data.pharmacistId) { |
|
|
|
|
wx.ajax({ |
|
|
|
|
method: 'POST', |
|
|
|
|
url: '/app/patient/patient/bind-pharmacist', |
|
|
|
|
data: { |
|
|
|
|
pharmacistId: Number.parseInt(this.data.pharmacistId), |
|
|
|
|
projectId: this.data.projectId, |
|
|
|
|
indicationId: selectedOption.indicationId, |
|
|
|
|
}, |
|
|
|
|
}).then(() => { |
|
|
|
|
// 绑定成功后跳转
|
|
|
|
|
wx.navigateToMiniProgram({ |
|
|
|
|
appId: 'wx05551c5ee1fd1c12', |
|
|
|
|
path: jumpUrl, |
|
|
|
|
}) |
|
|
|
|
// 直接跳转药箱小程序
|
|
|
|
|
wx.navigateToMiniProgram({ |
|
|
|
|
appId: 'wx05551c5ee1fd1c12', |
|
|
|
|
path: jumpUrl, |
|
|
|
|
success: () => { |
|
|
|
|
this.checkStatus() |
|
|
|
|
}) |
|
|
|
|
} else { |
|
|
|
|
// 没有药师ID,直接跳转
|
|
|
|
|
wx.navigateToMiniProgram({ |
|
|
|
|
appId: 'wx05551c5ee1fd1c12', |
|
|
|
|
path: jumpUrl, |
|
|
|
|
success: () => { |
|
|
|
|
this.checkStatus() |
|
|
|
|
}, |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
fail: () => { |
|
|
|
|
this.checkStatus() |
|
|
|
|
}, |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
|