|
|
|
@ -1,41 +1,43 @@ |
|
|
|
|
|
|
|
import dayjs from 'dayjs' |
|
|
|
const app = getApp<IAppOption>() |
|
|
|
const app = getApp<IAppOption>() |
|
|
|
|
|
|
|
|
|
|
|
Page({ |
|
|
|
Page({ |
|
|
|
data: { |
|
|
|
data: { |
|
|
|
|
|
|
|
// 项目列表
|
|
|
|
|
|
|
|
projectList: [] as Array<{ projectId: number; projectName: string; projectDescription: string }>, |
|
|
|
|
|
|
|
currentProjectId: 0, |
|
|
|
|
|
|
|
currentProjectName: '特诺雅', |
|
|
|
|
|
|
|
projectIndex: 0, |
|
|
|
|
|
|
|
|
|
|
|
// 搜索关键词
|
|
|
|
// 搜索关键词
|
|
|
|
keyword: '', |
|
|
|
keyword: '', |
|
|
|
|
|
|
|
|
|
|
|
// 筛选条件
|
|
|
|
// 筛选条件
|
|
|
|
jumpStatus: 0, // 0-全部,1-已跳转
|
|
|
|
jumpStatus: '', // ''-全部,0-未跳转,1-已跳转
|
|
|
|
enrollStatus: 0, // 0-全部,1-已入组
|
|
|
|
jumpStatusIndex: 0, // picker 选中索引
|
|
|
|
|
|
|
|
jumpStatusLabel: '全部', |
|
|
|
|
|
|
|
jumpStatusOptions: [ |
|
|
|
|
|
|
|
{ value: '', label: '全部' }, |
|
|
|
|
|
|
|
{ value: 0, label: '未跳转' }, |
|
|
|
|
|
|
|
{ value: 1, label: '已跳转' }, |
|
|
|
|
|
|
|
] as Array<{ value: string | number; label: string }>, |
|
|
|
|
|
|
|
enrollStatus: '', // ''-全部,0-未入组,1-已入组
|
|
|
|
|
|
|
|
enrollStatusIndex: 0, // picker 选中索引
|
|
|
|
|
|
|
|
enrollStatusLabel: '全部', |
|
|
|
|
|
|
|
enrollStatusOptions: [ |
|
|
|
|
|
|
|
{ value: '', label: '全部' }, |
|
|
|
|
|
|
|
{ value: 0, label: '未入组' }, |
|
|
|
|
|
|
|
{ value: 1, label: '已入组' }, |
|
|
|
|
|
|
|
] as Array<{ value: string | number; label: string }>, |
|
|
|
timeType: 0, // 0-跳转时间,1-入组时间
|
|
|
|
timeType: 0, // 0-跳转时间,1-入组时间
|
|
|
|
jumpStartTime: '', |
|
|
|
jumpStartTime: '', |
|
|
|
jumpEndTime: '', |
|
|
|
jumpEndTime: '', |
|
|
|
enrollStartTime: '', |
|
|
|
enrollStartTime: '', |
|
|
|
enrollEndTime: '', |
|
|
|
enrollEndTime: '', |
|
|
|
|
|
|
|
|
|
|
|
// 患者列表(模拟数据,接口上线后删除)
|
|
|
|
// 患者列表
|
|
|
|
patientList: [ |
|
|
|
patientList: [] as any[], |
|
|
|
{ |
|
|
|
totalCount: 0, |
|
|
|
id: 100, |
|
|
|
|
|
|
|
patientId: 10, |
|
|
|
|
|
|
|
patientName: '患者A', |
|
|
|
|
|
|
|
patientAvatar: '', |
|
|
|
|
|
|
|
phone: '138****8888', |
|
|
|
|
|
|
|
indicationName: '银屑病', |
|
|
|
|
|
|
|
pharmacyName: '国大药房(XX店)', |
|
|
|
|
|
|
|
bindTime: 1700000000, |
|
|
|
|
|
|
|
bindTimeFormatted: '2023/11/14 22:13:20', |
|
|
|
|
|
|
|
jumpStatus: 1, |
|
|
|
|
|
|
|
jumpTime: 1700000100, |
|
|
|
|
|
|
|
jumpTimeFormatted: '2023/11/14 22:15:00', |
|
|
|
|
|
|
|
enrollStatus: 1, |
|
|
|
|
|
|
|
enrollTime: 1700000200, |
|
|
|
|
|
|
|
enrollTimeFormatted: '2023/11/14 22:16:40', |
|
|
|
|
|
|
|
materialStatus: 2, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
] as any[], |
|
|
|
|
|
|
|
totalCount: 1, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 分页
|
|
|
|
// 分页
|
|
|
|
page: 1, |
|
|
|
page: 1, |
|
|
|
@ -43,9 +45,9 @@ Page({ |
|
|
|
loading: false, |
|
|
|
loading: false, |
|
|
|
hasMore: true, |
|
|
|
hasMore: true, |
|
|
|
pagination: { |
|
|
|
pagination: { |
|
|
|
count: 1, |
|
|
|
count: 0, |
|
|
|
page: 1, |
|
|
|
page: 0, |
|
|
|
pages: 1, |
|
|
|
pages: 0, |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 弹窗
|
|
|
|
// 弹窗
|
|
|
|
@ -56,10 +58,69 @@ Page({ |
|
|
|
onLoad() { |
|
|
|
onLoad() { |
|
|
|
// 药店端患者列表页面,仅允许药店人员访问
|
|
|
|
// 药店端患者列表页面,仅允许药店人员访问
|
|
|
|
app.waitLogin({ types: [4] }).then(() => { |
|
|
|
app.waitLogin({ types: [4] }).then(() => { |
|
|
|
// TODO: 接口上线后取消注释
|
|
|
|
this.getProjectList() |
|
|
|
// this.getPatientList()
|
|
|
|
|
|
|
|
}) |
|
|
|
}) |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
// 获取项目列表
|
|
|
|
|
|
|
|
getProjectList() { |
|
|
|
|
|
|
|
wx.ajax({ |
|
|
|
|
|
|
|
method: 'GET', |
|
|
|
|
|
|
|
url: '/app/pharmacist/pharmacist/project-list', |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
.then((res: any) => { |
|
|
|
|
|
|
|
const list = res.list || [] |
|
|
|
|
|
|
|
const currentProjectId = res.currentProjectId || (list.length > 0 ? list[0].projectId : 0) |
|
|
|
|
|
|
|
const currentProject = list.find((p: any) => p.projectId === currentProjectId) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.setData({ |
|
|
|
|
|
|
|
projectList: list, |
|
|
|
|
|
|
|
currentProjectId, |
|
|
|
|
|
|
|
currentProjectName: currentProject?.projectName || '特诺雅', |
|
|
|
|
|
|
|
projectIndex: list.findIndex((p: any) => p.projectId === currentProjectId), |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取患者列表
|
|
|
|
|
|
|
|
this.getPatientList() |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
.catch(() => { |
|
|
|
|
|
|
|
// 接口失败,使用默认数据
|
|
|
|
|
|
|
|
this.getPatientList() |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
// 切换项目
|
|
|
|
|
|
|
|
onProjectChange(e: WechatMiniprogram.CustomEvent) { |
|
|
|
|
|
|
|
const index = e.detail.value |
|
|
|
|
|
|
|
const project = this.data.projectList[index] |
|
|
|
|
|
|
|
if (!project || project.projectId === this.data.currentProjectId) return |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用切换项目接口
|
|
|
|
|
|
|
|
wx.ajax({ |
|
|
|
|
|
|
|
method: 'POST', |
|
|
|
|
|
|
|
url: '/app/pharmacist/pharmacist/switch-project', |
|
|
|
|
|
|
|
data: { |
|
|
|
|
|
|
|
projectId: project.projectId, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
.then(() => { |
|
|
|
|
|
|
|
this.setData({ |
|
|
|
|
|
|
|
currentProjectId: project.projectId, |
|
|
|
|
|
|
|
currentProjectName: project.projectName, |
|
|
|
|
|
|
|
projectIndex: index, |
|
|
|
|
|
|
|
// 重置患者列表
|
|
|
|
|
|
|
|
patientList: [], |
|
|
|
|
|
|
|
page: 1, |
|
|
|
|
|
|
|
hasMore: true, |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
// 刷新患者列表
|
|
|
|
|
|
|
|
this.getPatientList() |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
.catch(() => { |
|
|
|
|
|
|
|
wx.showToast({ |
|
|
|
|
|
|
|
title: '切换项目失败', |
|
|
|
|
|
|
|
icon: 'none', |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
}, |
|
|
|
// 获取患者列表
|
|
|
|
// 获取患者列表
|
|
|
|
getPatientList() { |
|
|
|
getPatientList() { |
|
|
|
if (this.data.loading || !this.data.hasMore) return |
|
|
|
if (this.data.loading || !this.data.hasMore) return |
|
|
|
@ -67,15 +128,23 @@ Page({ |
|
|
|
this.setData({ loading: true }) |
|
|
|
this.setData({ loading: true }) |
|
|
|
|
|
|
|
|
|
|
|
// 根据时间类型判断传递哪个时间参数
|
|
|
|
// 根据时间类型判断传递哪个时间参数
|
|
|
|
const { timeType, jumpStartTime, jumpEndTime, enrollStartTime, enrollEndTime } = this.data |
|
|
|
const { timeType, jumpStartTime, jumpEndTime, enrollStartTime, enrollEndTime, jumpStatus, enrollStatus } = this.data |
|
|
|
const params: any = { |
|
|
|
const params: any = { |
|
|
|
keyword: this.data.keyword, |
|
|
|
keyword: this.data.keyword, |
|
|
|
jumpStatus: this.data.jumpStatus, |
|
|
|
|
|
|
|
enrollStatus: this.data.enrollStatus, |
|
|
|
|
|
|
|
page: this.data.page, |
|
|
|
page: this.data.page, |
|
|
|
pageSize: this.data.pageSize, |
|
|
|
pageSize: this.data.pageSize, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 跳转状态:空字符串表示全部,不传递参数
|
|
|
|
|
|
|
|
if (jumpStatus !== '') { |
|
|
|
|
|
|
|
params.jumpStatus = jumpStatus |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 入组状态:空字符串表示全部,不传递参数
|
|
|
|
|
|
|
|
if (enrollStatus !== '') { |
|
|
|
|
|
|
|
params.enrollStatus = enrollStatus |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 时间类型:0-跳转时间,1-入组时间
|
|
|
|
// 时间类型:0-跳转时间,1-入组时间
|
|
|
|
if (timeType === 0) { |
|
|
|
if (timeType === 0) { |
|
|
|
// 跳转时间
|
|
|
|
// 跳转时间
|
|
|
|
@ -91,31 +160,45 @@ Page({ |
|
|
|
method: 'GET', |
|
|
|
method: 'GET', |
|
|
|
url: '/app/pharmacist/pharmacist/patient-list', |
|
|
|
url: '/app/pharmacist/pharmacist/patient-list', |
|
|
|
data: params, |
|
|
|
data: params, |
|
|
|
}).then((res: any) => { |
|
|
|
}) |
|
|
|
const list = (res.list || []).map((item: any) => ({ |
|
|
|
.then((res: any) => { |
|
|
|
...item, |
|
|
|
const list = (res.list || []).map((item: any) => ({ |
|
|
|
bindTimeFormatted: item.bindTime ? this.formatDate(item.bindTime) : '-', |
|
|
|
...item, |
|
|
|
jumpTimeFormatted: item.jumpTime ? this.formatDate(item.jumpTime) : '', |
|
|
|
bindTimeFormatted: item.bindTime || '-', |
|
|
|
enrollTimeFormatted: item.enrollTime ? this.formatDate(item.enrollTime) : '', |
|
|
|
jumpTimeFormatted: item.jumpMaterial.updateTime |
|
|
|
})) |
|
|
|
? dayjs(item.jumpMaterial.updateTime).format('YYYY-MM-DD HH:mm') |
|
|
|
const total = res.total || 0 |
|
|
|
: '', |
|
|
|
const currentPage = this.data.page |
|
|
|
enrollTimeFormatted: item.enrollMaterial.updateTime |
|
|
|
|
|
|
|
? dayjs(item.enrollMaterial.updateTime).format('YYYY-MM-DD HH:mm') |
|
|
|
|
|
|
|
: '', |
|
|
|
|
|
|
|
// 跳转材料审核状态
|
|
|
|
|
|
|
|
jumpAuditStatus: item.jumpMaterial?.auditStatus ?? -1, |
|
|
|
|
|
|
|
jumpAuditStatusText: item.jumpMaterial?.auditStatusText || '', |
|
|
|
|
|
|
|
jumpRejectReason: item.jumpMaterial?.rejectReason || '', |
|
|
|
|
|
|
|
// 入组材料审核状态
|
|
|
|
|
|
|
|
enrollAuditStatus: item.enrollMaterial?.auditStatus ?? -1, |
|
|
|
|
|
|
|
enrollAuditStatusText: item.enrollMaterial?.auditStatusText || '', |
|
|
|
|
|
|
|
enrollRejectReason: item.enrollMaterial?.rejectReason || '', |
|
|
|
|
|
|
|
})) |
|
|
|
|
|
|
|
const total = res.total || 0 |
|
|
|
|
|
|
|
const currentPage = this.data.page |
|
|
|
|
|
|
|
|
|
|
|
this.setData({ |
|
|
|
this.setData({ |
|
|
|
patientList: [...this.data.patientList, ...list], |
|
|
|
patientList: this.data.page === 1 ? list : [...this.data.patientList, ...list], |
|
|
|
totalCount: total, |
|
|
|
totalCount: total, |
|
|
|
page: currentPage + 1, |
|
|
|
page: currentPage + 1, |
|
|
|
hasMore: list.length >= this.data.pageSize, |
|
|
|
hasMore: list.length >= this.data.pageSize, |
|
|
|
loading: false, |
|
|
|
loading: false, |
|
|
|
pagination: { |
|
|
|
pagination: { |
|
|
|
count: total, |
|
|
|
count: total, |
|
|
|
page: currentPage, |
|
|
|
page: currentPage, |
|
|
|
pages: Math.ceil(total / this.data.pageSize) || 1, |
|
|
|
pages: Math.ceil(total / this.data.pageSize) || 1, |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
.catch(() => { |
|
|
|
|
|
|
|
this.setData({ loading: false }) |
|
|
|
}) |
|
|
|
}) |
|
|
|
}).catch(() => { |
|
|
|
|
|
|
|
this.setData({ loading: false }) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
// 格式化日期
|
|
|
|
// 格式化日期
|
|
|
|
formatDate(timestamp: number): string { |
|
|
|
formatDate(timestamp: number): string { |
|
|
|
@ -140,9 +223,12 @@ Page({ |
|
|
|
}, |
|
|
|
}, |
|
|
|
// 跳转状态筛选
|
|
|
|
// 跳转状态筛选
|
|
|
|
handleJumpStatusChange(e: WechatMiniprogram.CustomEvent) { |
|
|
|
handleJumpStatusChange(e: WechatMiniprogram.CustomEvent) { |
|
|
|
const jumpStatus = e.detail.value === '1' ? 1 : 0 |
|
|
|
const index = e.detail.value |
|
|
|
|
|
|
|
const option = this.data.jumpStatusOptions[index] |
|
|
|
this.setData({ |
|
|
|
this.setData({ |
|
|
|
jumpStatus, |
|
|
|
jumpStatus: option.value, |
|
|
|
|
|
|
|
jumpStatusIndex: index, |
|
|
|
|
|
|
|
jumpStatusLabel: option.label, |
|
|
|
page: 1, |
|
|
|
page: 1, |
|
|
|
patientList: [], |
|
|
|
patientList: [], |
|
|
|
hasMore: true, |
|
|
|
hasMore: true, |
|
|
|
@ -151,9 +237,12 @@ Page({ |
|
|
|
}, |
|
|
|
}, |
|
|
|
// 入组状态筛选
|
|
|
|
// 入组状态筛选
|
|
|
|
handleEnrollStatusChange(e: WechatMiniprogram.CustomEvent) { |
|
|
|
handleEnrollStatusChange(e: WechatMiniprogram.CustomEvent) { |
|
|
|
const enrollStatus = e.detail.value === '1' ? 1 : 0 |
|
|
|
const index = e.detail.value |
|
|
|
|
|
|
|
const option = this.data.enrollStatusOptions[index] |
|
|
|
this.setData({ |
|
|
|
this.setData({ |
|
|
|
enrollStatus, |
|
|
|
enrollStatus: option.value, |
|
|
|
|
|
|
|
enrollStatusIndex: index, |
|
|
|
|
|
|
|
enrollStatusLabel: option.label, |
|
|
|
page: 1, |
|
|
|
page: 1, |
|
|
|
patientList: [], |
|
|
|
patientList: [], |
|
|
|
hasMore: true, |
|
|
|
hasMore: true, |
|
|
|
@ -250,24 +339,93 @@ Page({ |
|
|
|
} |
|
|
|
} |
|
|
|
this.getPatientList() |
|
|
|
this.getPatientList() |
|
|
|
}, |
|
|
|
}, |
|
|
|
// 查看详情
|
|
|
|
// 预览提交的材料图片
|
|
|
|
handleInfo(e: WechatMiniprogram.CustomEvent) { |
|
|
|
handlePreviewMaterial(e: WechatMiniprogram.CustomEvent) { |
|
|
|
const { id } = e.currentTarget.dataset |
|
|
|
const { url } = e.currentTarget.dataset |
|
|
|
wx.navigateTo({ |
|
|
|
if (!url) { |
|
|
|
url: `/doctor/pages/stat/index?id=${id}`, |
|
|
|
wx.showToast({ |
|
|
|
|
|
|
|
title: '暂无图片', |
|
|
|
|
|
|
|
icon: 'none', |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
wx.previewImage({ |
|
|
|
|
|
|
|
urls: [url], |
|
|
|
|
|
|
|
current: url, |
|
|
|
}) |
|
|
|
}) |
|
|
|
}, |
|
|
|
}, |
|
|
|
// 上传材料
|
|
|
|
// 上传材料
|
|
|
|
handleUpload(e: WechatMiniprogram.CustomEvent) { |
|
|
|
handleUpload(e: WechatMiniprogram.CustomEvent) { |
|
|
|
const { id } = e.currentTarget.dataset |
|
|
|
const { id } = e.currentTarget.dataset |
|
|
|
|
|
|
|
// 查找患者信息
|
|
|
|
|
|
|
|
const patient = this.data.patientList.find((p: any) => p.id === id) |
|
|
|
|
|
|
|
if (!patient) return |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 判断是跳转材料还是入组材料
|
|
|
|
|
|
|
|
const isJumpMaterial = patient.jumpAuditStatus === 0 || patient.jumpAuditStatus === 3 |
|
|
|
|
|
|
|
const auditType = isJumpMaterial ? 1 : 2 |
|
|
|
|
|
|
|
const title = isJumpMaterial ? '上传跳转证明材料' : '上传入组证明材料' |
|
|
|
|
|
|
|
|
|
|
|
this.setData({ |
|
|
|
this.setData({ |
|
|
|
popupShow: true, |
|
|
|
popupShow: true, |
|
|
|
popupType: 'upload', |
|
|
|
popupType: 'uploadMaterial', |
|
|
|
popupParams: { patientId: id }, |
|
|
|
popupParams: { |
|
|
|
|
|
|
|
patientId: patient.patientId, |
|
|
|
|
|
|
|
patientName: patient.patientName, |
|
|
|
|
|
|
|
phone: patient.phone, |
|
|
|
|
|
|
|
projectName: this.data.currentProjectName, |
|
|
|
|
|
|
|
indicationName: patient.indicationName, |
|
|
|
|
|
|
|
auditType, |
|
|
|
|
|
|
|
title, |
|
|
|
|
|
|
|
}, |
|
|
|
}) |
|
|
|
}) |
|
|
|
}, |
|
|
|
}, |
|
|
|
// 弹窗确认
|
|
|
|
// 弹窗确认
|
|
|
|
handlePopupOk() { |
|
|
|
handlePopupOk(e: WechatMiniprogram.CustomEvent) { |
|
|
|
|
|
|
|
const { detail } = e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理上传材料完成
|
|
|
|
|
|
|
|
if (detail && detail.type === 'uploadMaterialComplete') { |
|
|
|
|
|
|
|
const { patientId, auditType, imageUrl } = detail |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wx.showLoading({ title: '提交中...' }) |
|
|
|
|
|
|
|
wx.ajax({ |
|
|
|
|
|
|
|
method: 'POST', |
|
|
|
|
|
|
|
url: '/app/pharmacist/pharmacist/submit-material', |
|
|
|
|
|
|
|
data: { |
|
|
|
|
|
|
|
patientId, |
|
|
|
|
|
|
|
imageUrl, |
|
|
|
|
|
|
|
auditType, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
.then(() => { |
|
|
|
|
|
|
|
wx.hideLoading() |
|
|
|
|
|
|
|
wx.showToast({ |
|
|
|
|
|
|
|
title: '提交成功', |
|
|
|
|
|
|
|
icon: 'success', |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
this.setData({ |
|
|
|
|
|
|
|
popupShow: false, |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
// 刷新列表
|
|
|
|
|
|
|
|
this.setData({ |
|
|
|
|
|
|
|
page: 1, |
|
|
|
|
|
|
|
patientList: [], |
|
|
|
|
|
|
|
hasMore: true, |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
this.getPatientList() |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
.catch(() => { |
|
|
|
|
|
|
|
wx.hideLoading() |
|
|
|
|
|
|
|
wx.showToast({ |
|
|
|
|
|
|
|
title: '提交失败', |
|
|
|
|
|
|
|
icon: 'none', |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 其他弹窗类型处理
|
|
|
|
this.setData({ |
|
|
|
this.setData({ |
|
|
|
popupShow: false, |
|
|
|
popupShow: false, |
|
|
|
}) |
|
|
|
}) |
|
|
|
|