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.

257 lines
5.5 KiB

const app = getApp<IAppOption>()
Page({
data: {
// 扫码参数
promoterId: '',
projectId: '',
// 表单数据
name: '',
pharmacyId: '',
pharmacyName: '',
// 药店选择弹窗
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(option: { promoterId?: string; projectId?: string; scene?: string }) {
// 解析扫码参数
let promoterId = option.promoterId || ''
let projectId = option.projectId || ''
// 如果是扫码进入,解析 scene 参数
if (option.scene) {
const scene = decodeURIComponent(option.scene)
const params = this.parseScene(scene)
promoterId = params.promoterId || ''
projectId = params.projectId || ''
}
if (!promoterId || !projectId) {
wx.showToast({
title: '缺少必要参数',
icon: 'none',
})
return
}
this.setData({
promoterId,
projectId,
})
},
// 解析 scene 参数
parseScene(scene: string): { promoterId?: string; projectId?: string } {
const params: { promoterId?: string; projectId?: string } = {}
const pairs = scene.split('&')
pairs.forEach((pair) => {
const [key, value] = pair.split('=')
if (key === 'promoterId') {
params.promoterId = value
} else if (key === 'projectId') {
params.projectId = value
}
})
return params
},
// 输入姓名
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)
this.setData({
pharmacyList: [...this.data.pharmacyList, ...list],
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 { promoterId, projectId, name, pharmacyId } = this.data
if (!name.trim()) {
wx.showToast({
title: '请输入姓名',
icon: 'none',
})
return
}
if (!pharmacyId) {
wx.showToast({
title: '请选择所属药店',
icon: 'none',
})
return
}
wx.showLoading({ title: '提交中...' })
wx.ajax({
method: 'POST',
url: '/app/pharmacist/pharmacist/bind-promoter',
data: {
promoterId,
projectId,
name: name.trim(),
pharmacyId,
},
}).then((res: any) => {
wx.hideLoading()
// 保存登录信息
app.globalData.initLoginInfo = {
loginType: 4,
isLogin: 1,
isReg: 1,
...res,
}
wx.showToast({
title: '绑定成功',
icon: 'success',
})
// 跳转到药店端首页
setTimeout(() => {
wx.reLaunch({
url: '/doctor/pages/home/index',
})
}, 1500)
}).catch(() => {
wx.hideLoading()
wx.showToast({
title: '绑定失败',
icon: 'none',
})
})
},
})
export {}