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() { } })