// pages/mine/comp_address/comp_address.js Component({ properties: { visible: { type: Boolean, value: false } }, data: { addresses: [], editData: { _index: -1, label: '', province: '', city: '', district: '', address: '', postcode: '', isDefault: false }, isEditing: false }, observers: { visible(newVal) { if (newVal) { this.initAddressData() } } }, methods: { initAddressData() { const app = getApp() const user = app.globalData.user || {} const addresses = user.addresses || [] this.setData({ addresses: addresses.map(item => ({ ...item })), isEditing: false, editData: { _index: -1, label: '', province: '', city: '', district: '', address: '', postcode: '', isDefault: false } }) }, onClose() { this.triggerEvent('close') }, onSheetTap() {}, onAddAddress() { this.setData({ isEditing: true, editData: { _index: -1, label: '', province: '', city: '', district: '', address: '', postcode: '', isDefault: this.data.addresses.length === 0 } }) }, onEditAddress(e) { const index = e.currentTarget.dataset.index const item = this.data.addresses[index] this.setData({ isEditing: true, editData: { _index: index, label: item.label || '', province: item.province || '', city: item.city || '', district: item.district || '', address: item.address || '', postcode: item.postcode || '', isDefault: item.isDefault || false } }) }, onDeleteAddress(e) { const index = e.currentTarget.dataset.index wx.showModal({ title: '提示', content: '确定删除该地址吗?', success: (res) => { if (res.confirm) { const addresses = this.data.addresses.slice() addresses.splice(index, 1) if (addresses.length > 0 && !addresses.some(a => a.isDefault)) { addresses[0].isDefault = true } this.setData({ addresses }) this.triggerEvent('save', { addresses }) } } }) }, onSetDefault(e) { const index = e.currentTarget.dataset.index const addresses = this.data.addresses.map((item, i) => ({ ...item, isDefault: i === index })) this.setData({ addresses }) this.triggerEvent('save', { addresses }) }, onBackToList() { this.setData({ isEditing: false }) }, onRegionChange(e) { const region = e.detail.value this.setData({ 'editData.province': region[0] || '', 'editData.city': region[1] || '', 'editData.district': region[2] || '' }) }, onFieldInput(e) { const field = e.currentTarget.dataset.field this.setData({ [`editData.${field}`]: e.detail.value }) }, onDefaultChange(e) { this.setData({ 'editData.isDefault': e.detail.value }) }, onSaveEdit() { const editData = this.data.editData if (!editData.label.trim()) { wx.showToast({ title: '请输入地址标签', icon: 'none' }) return } if (!editData.province || !editData.city || !editData.district) { wx.showToast({ title: '请选择所在地区', icon: 'none' }) return } if (!editData.address.trim()) { wx.showToast({ title: '请输入详细地址', icon: 'none' }) return } const addresses = this.data.addresses.slice() const newItem = { label: editData.label.trim(), province: editData.province, city: editData.city, district: editData.district, address: editData.address.trim(), postcode: editData.postcode.trim(), isDefault: editData.isDefault } if (editData.isDefault) { addresses.forEach(item => { item.isDefault = false }) } if (editData._index >= 0) { addresses[editData._index] = newItem } else { if (addresses.length === 0) { newItem.isDefault = true } addresses.push(newItem) } this.setData({ addresses, isEditing: false }) this.triggerEvent('save', { addresses }) } } })