|
|
import http from '../../../utils/api'
Page({ /** * 页面的初始数据 */ data: { regionList: [], // 当前显示的区域列表
selectedRegions: [], // 已选择的区域路径
currentParentCode: '', // 当前父级code
loading: false, showPicker: false, regionTitle: '请选择区域', autoShowPicker: false // 新增:控制是否自动弹出选择器
},
/** * 生命周期函数--监听页面加载 */ onLoad(options) { // 首次加载,获取第一级数据
this.getRegionData('', () => { // 首次加载完成后自动弹出选择器
this.setData({ showPicker: true, regionTitle: '请选择区域' }) }) },
// 获取区域数据
getRegionData(parentCode, callback) { this.setData({ loading: true })
http.areaChildren({ data: { parentCode: parentCode || '' }, success: res => { console.log('区域数据响应:', res) if (res.code === 200 && res.data && res.data.length > 0) { this.setData({ regionList: res.data, currentParentCode: parentCode, loading: false }) } else { // 没有更多数据了,说明已经是最后一级
this.setData({ loading: false, regionList: [] })
// 如果是最后一级,关闭选择器
if (this.data.showPicker) { this.setData({ showPicker: false }) wx.showToast({ title: '已选择到最后一级', icon: 'none' }) } }
// 执行回调
if (callback) { callback() } }, fail: err => { console.error('请求失败:', err) this.setData({ loading: false }) wx.showToast({ title: '加载失败', icon: 'none' })
if (callback) { callback() } } }) },
// 开始选择(点击按钮时调用)
startSelection() { // 如果还没有选择任何区域,重新加载第一级
if (this.data.selectedRegions.length === 0) { this.getRegionData('', () => { this.setData({ showPicker: true, regionTitle: '请选择区域' }) }) } else { // 如果有已选择的区域,加载下一级
const lastRegion = this.data.selectedRegions[this.data.selectedRegions.length - 1] this.loadAndShowNextLevel(lastRegion.code) } },
// 加载并显示下一级区域选择器
loadAndShowNextLevel(parentCode) { this.getRegionData(parentCode, () => { if (this.data.regionList.length > 0) { // 有下一级数据,自动弹出选择器
this.setData({ showPicker: true, regionTitle: `请选择${this.data.selectedRegions[this.data.selectedRegions.length - 1].name}的下一级区域` }) } else { // 没有下一级数据,提示用户
wx.showToast({ title: '已经是最后一级,无法继续选择', icon: 'none' }) } }) },
// 关闭选择器
closePicker() { this.setData({ showPicker: false }) },
// 选择区域
selectRegion(e) { const index = e.currentTarget.dataset.index const region = this.data.regionList[index]
console.log('选择的区域:', region)
// 获取当前已选择的最后一级
const lastSelectedRegion = this.data.selectedRegions.length > 0 ? this.data.selectedRegions[this.data.selectedRegions.length - 1] : null
// 检查是否是同级选择(替换最后一级)
const isSameLevel = lastSelectedRegion && lastSelectedRegion.parentCode === region.parentCode
let selectedRegions = [...this.data.selectedRegions]
if (isSameLevel) { // 同级选择,替换最后一级
selectedRegions[selectedRegions.length - 1] = { code: region.code, name: region.name, parentCode: region.parentCode } } else { // 选择下一级,添加到路径
selectedRegions.push({ code: region.code, name: region.name, parentCode: region.parentCode }) }
this.setData({ selectedRegions })
// 关闭当前选择器
this.setData({ showPicker: false })
// 延迟一段时间后自动加载并显示下一级选择器
setTimeout(() => { this.loadAndShowNextLevel(region.code) }, 300) },
// 重新选择(点击已选择的任意层级)
reSelectRegion(e) { const index = e.currentTarget.dataset.index
// 截断到指定级别(包括点击的层级)
const selectedRegions = this.data.selectedRegions.slice(0, index + 1)
this.setData({ selectedRegions })
// 获取该层级的数据
const targetRegion = selectedRegions[selectedRegions.length - 1]
// 获取点击层级的同级数据并显示选择器
this.getRegionData(targetRegion.parentCode, () => { this.setData({ showPicker: true, regionTitle: index === 0 ? '请选择区域' : `请选择${this.data.selectedRegions[index - 1]?.name || '区域'}的下一级` }) }) },
// 完成选择
completeSelection() { if (this.data.selectedRegions.length === 0) { wx.showToast({ title: '请先选择区域', icon: 'none' }) return }
const lastRegion = this.data.selectedRegions[this.data.selectedRegions.length - 1]
// 这里可以调用你的业务接口,传递parentCode
this.submitRegion(lastRegion.code) },
// 提交选择的区域(示例)
submitRegion(parentCode) { console.log('提交的parentCode:', parentCode) console.log('完整选择路径:', this.data.selectedRegions) http.userCode({ data: { areaCode: parentCode }, success: res => { console.log(11111, res); if (res.code == 200) { wx.showModal({ title: '选择完成', content: `已选择到: ${this.data.selectedRegions.map(r => r.name).join(' > ')}`, showCancel: false, success: (res) => { if (res.confirm) { wx.switchTab({ url: '/pages/home/home', }) } } }) } } })
},
// 重置选择
resetSelection() { wx.showModal({ title: '确认重置', content: '确定要重置所有选择吗?', success: (res) => { if (res.confirm) { this.setData({ selectedRegions: [], regionList: [], currentParentCode: '', showPicker: false })
// 重新获取第一级数据
this.getRegionData('', () => { // 重置后自动弹出第一级选择器
this.setData({ showPicker: true, regionTitle: '请选择区域' }) }) } } }) },
/** * 生命周期函数--监听页面显示 */ onShow() {
}})
|