import { View, Text, Image, Input, Picker } from '@tarojs/components' import Taro from '@tarojs/taro' import { useState, useEffect } from 'react' import './index.scss' import { getAddressList, addAddress, updateAddress, deleteAddress } from '../../utils/store' import type { AddressItem } from '../../types' import { useThemeContext } from '../../context/ThemeContext' export default function AddressPage() { const { theme, resolvedTheme } = useThemeContext() const [list, setList] = useState([]) const [editing, setEditing] = useState(null) const [showForm, setShowForm] = useState(false) const [name, setName] = useState('') const [phone, setPhone] = useState('') const [region, setRegion] = useState([]) const [detail, setDetail] = useState('') const [isDefault, setIsDefault] = useState(false) const load = () => setList(getAddressList()) useEffect(() => { load() }, []) const resetForm = () => { setName('') setPhone('') setRegion([]) setDetail('') setIsDefault(false) setEditing(null) } const openAdd = () => { resetForm() setShowForm(true) } const openEdit = (item: AddressItem) => { setEditing(item) setName(item.name) setPhone(item.phone) setRegion(item.region) setDetail(item.detail) setIsDefault(item.isDefault) setShowForm(true) } const handleDelete = (id: string) => { Taro.showModal({ title: '确认删除', content: '删除后将无法恢复该地址', success: (res) => { if (res.confirm) { deleteAddress(id) load() } } }) } const handleCopy = (item: AddressItem) => { const text = `${item.name} ${item.phone}\n${item.region.join(' ')} ${item.detail}` Taro.setClipboardData({ data: text }) } const handleSave = () => { if (!name.trim() || !phone.trim() || region.length === 0 || !detail.trim()) { Taro.showToast({ title: '请填写完整信息', icon: 'none' }) return } const payload = { name, phone, region, detail, isDefault } if (editing) { updateAddress(editing.id, payload) } else { addAddress(payload) } Taro.showToast({ title: '保存成功', icon: 'success' }) setShowForm(false) resetForm() load() } const onRegionChange = (e: any) => { setRegion(e.detail.value || []) } return ( Taro.navigateBack()}>← 收货地址 {/* 地址列表 */} {list.map(item => ( {item.name} {item.phone} {item.isDefault && ( 默认 )} {item.region.join(' ')} {item.detail} openEdit(item)}>✏️ 编辑 handleCopy(item)}>📋 复制 handleDelete(item.id)}>🗑️ 删除 ))} {list.length === 0 && ( 还没有收货地址 点击下方按钮添加新地址 )} {/* 底部添加按钮 */} 新增收货地址 {/* 新增/编辑弹窗 */} {showForm && ( {editing ? '编辑地址' : '新增地址'} setName(e.detail.value)} /> setPhone(e.detail.value)} /> {region.length ? region.join(' / ') : '选择省 / 市 / 区'} setDetail(e.detail.value)} /> setIsDefault(!isDefault)}> 设为默认地址 { setShowForm(false); resetForm() }}> 取消 保存 )} ) }