const app = getApp() Page({ data: { // 表单数据 name: '', pharmacyId: '', pharmacyName: '', // 项目选择 projectId: '', projectName: '', projectList: [] as Array<{ projectId: number; projectName: string }>, projectIndex: 0, projectDisabled: false, // 是否禁用项目选择(扫码进入时) // 药店选择弹窗 show: false, // 省市区选择 provinceId: '', provinceName: '', cityId: '', cityName: '', districtId: '', districtName: '', // 药店列表 pharmacyList: [] as any[], // 搜索关键词 keyword: '', // 分页 page: 1, pageSize: 20, loading: false, hasMore: true, pagination: { count: 0, page: 0, pages: 0, }, }, onLoad() { // 如果通过扫码进入,存在项目ID,则回显并禁用选择 const projectId = app.globalData.projectId if (projectId) { this.setData({ projectId, projectDisabled: true, }) } // 获取项目列表 this.getProjectList() }, // 获取项目列表 getProjectList() { wx.ajax({ method: 'GET', url: '/app/common/common/project-list', }).then((res: any) => { const list = res.data || res || [] // 转换数据格式:接口返回 id/name,组件使用 projectId/projectName const projectList = list.map((item: any) => ({ projectId: item.id, projectName: item.name, })) // 如果有预设的项目ID(扫码进入),找到对应索引并回显 let projectIndex = 0 let projectId = '' let projectName = '' if (this.data.projectId) { const index = projectList.findIndex((item: any) => String(item.projectId) === String(this.data.projectId)) if (index !== -1) { projectIndex = index projectId = projectList[index].projectId projectName = projectList[index].projectName } } this.setData({ projectList, projectIndex, projectId, projectName, }) }) }, // 项目选择变化 onProjectChange(e: WechatMiniprogram.CustomEvent) { const index = e.detail.value const project = this.data.projectList[index] this.setData({ projectIndex: index, projectId: project?.projectId || '', projectName: project?.projectName || '', }) }, // 输入姓名 handleNameInput(e: WechatMiniprogram.CustomEvent) { this.setData({ name: e.detail.value, }) }, // 打开药店选择弹窗 handleDrug() { this.setData({ show: true, page: 1, pharmacyList: [], hasMore: true, pagination: { count: 0, page: 0, pages: 0, }, }) this.getPharmacyList() }, // 关闭弹窗 onClose() { this.setData({ show: false, }) }, // 获取药店列表 getPharmacyList() { if (this.data.loading || !this.data.hasMore) return this.setData({ loading: true }) wx.ajax({ method: 'GET', url: '/app/common/common/pharmacy-list', data: { keyword: this.data.keyword, provinceId: this.data.provinceId, cityId: this.data.cityId, districtId: this.data.districtId, page: this.data.page, pageSize: this.data.pageSize, }, }) .then((res: any) => { const list = res.list || [] const currentPage = this.data.page const total = res.total || 0 const pages = Math.ceil(total / this.data.pageSize) // 判断是否有筛选条件(关键词或省市区) const hasFilter = this.data.keyword || this.data.provinceId || this.data.cityId || this.data.districtId // 只有在没有筛选条件且是最后一页时,才添加"其他药店" const isLastPage = currentPage >= pages const newList = [...this.data.pharmacyList, ...list] if (hasFilter && isLastPage) { const otherPharmacy = { id: '-1', name: '其他药店', address: '没有找到所在药店', } newList.push(otherPharmacy) } this.setData({ pharmacyList: newList, total, page: currentPage + 1, hasMore: currentPage < pages, loading: false, pagination: { count: total, page: currentPage, pages, }, }) }) .catch(() => { this.setData({ loading: false }) }) }, // 省市区选择变化 handleChange(e: WechatMiniprogram.CustomEvent) { const [province, city, district] = e.detail this.setData({ provinceId: province?.value || '', provinceName: province?.label || '', cityId: city?.value || '', cityName: city?.label || '', districtId: district?.value || '', districtName: district?.label || '', page: 1, pharmacyList: [], hasMore: true, pagination: { count: 0, page: 0, pages: 0, }, }) this.getPharmacyList() }, // 搜索药店 handleSearch(e: WechatMiniprogram.CustomEvent) { this.setData({ keyword: e.detail.value, page: 1, pharmacyList: [], hasMore: true, pagination: { count: 0, page: 0, pages: 0, }, }) this.getPharmacyList() }, // 加载更多 loadMore() { this.getPharmacyList() }, // 选择药店 selectPharmacy(e: WechatMiniprogram.CustomEvent) { const { id, name } = e.currentTarget.dataset this.setData({ pharmacyId: id, pharmacyName: name, show: false, }) }, // 提交注册 handleSubmit() { const { name, pharmacyId, projectId, projectDisabled } = this.data if (!name.trim()) { wx.showToast({ title: '请输入姓名', icon: 'none', }) return } if (!pharmacyId) { wx.showToast({ title: '请选择所属药店', icon: 'none', }) return } if (!projectId) { wx.showToast({ title: '请选择项目', icon: 'none', }) return } wx.showLoading({ title: '提交中...' }) wx.ajax({ method: 'POST', url: '/app/pharmacist/pharmacist/register', data: { name: name.trim(), pharmacyId, projectId, }, }) .then((res: any) => { wx.hideLoading() // 保存登录信息 app.globalData.initLoginInfo = { ...app.globalData.initLoginInfo, isLogin: 1, loginIdentity: 4, loginIdentityId: res.pharmacistId, } wx.showToast({ title: '注册成功', icon: 'success', }) // 跳转到药店端首页 setTimeout(() => { wx.reLaunch({ url: '/doctor/pages/home/index', }) }, 1500) }) .catch(() => { wx.hideLoading() wx.showToast({ title: '注册失败', icon: 'none', }) }) }, }) export {}