import {useState} from "react"; import Taro, {useDidShow} from '@tarojs/taro' import {Button, Cell, CellGroup, Space, Empty, ConfigProvider, Divider} from '@nutui/nutui-react-taro' import {Dongdong, ArrowRight, CheckNormal, Checked} from '@nutui/icons-react-taro' import {View} from '@tarojs/components' import {ShopUserAddress} from "@/api/shop/shopUserAddress/model"; import {listShopUserAddress, removeShopUserAddress, updateShopUserAddress} from "@/api/shop/shopUserAddress"; import FixedButton from "@/components/FixedButton"; import dayjs from "dayjs"; const Address = () => { const [list, setList] = useState([]) const [address, setAddress] = useState() const parseTime = (raw?: unknown) => { if (raw === undefined || raw === null || raw === '') return null; // 兼容秒/毫秒时间戳 if (typeof raw === 'number' || (typeof raw === 'string' && /^\d+$/.test(raw))) { const n = Number(raw); return dayjs(Number.isFinite(n) ? (n < 1e12 ? n * 1000 : n) : raw as any); } return dayjs(raw as any); } const canModifyOncePerMonth = (item: ShopUserAddress) => { const lastUpdate = parseTime(item.updateTime); if (!lastUpdate || !lastUpdate.isValid()) return { ok: true as const }; // 若 updateTime 与 createTime 基本一致,则视为“未修改过”,不做限制 const createdAt = parseTime(item.createTime); if (createdAt && createdAt.isValid() && Math.abs(lastUpdate.diff(createdAt, 'minute')) < 1) { return { ok: true as const }; } const nextAllowed = lastUpdate.add(1, 'month'); const now = dayjs(); if (now.isBefore(nextAllowed)) { return { ok: false as const, nextAllowed: nextAllowed.format('YYYY-MM-DD HH:mm') }; } return { ok: true as const }; } const reload = () => { listShopUserAddress({ userId: Taro.getStorageSync('UserId') }) .then(data => { setList(data || []) // 默认地址 setAddress(data.find(item => item.isDefault)) }) .catch(() => { Taro.showToast({ title: '获取地址失败', icon: 'error' }); }) } const onDefault = async (item: ShopUserAddress) => { if (address) { await updateShopUserAddress({ ...address, isDefault: false }) } await updateShopUserAddress({ id: item.id, isDefault: true }) Taro.showToast({ title: '设置成功', icon: 'success' }); reload(); } const onDel = async (id?: number) => { await removeShopUserAddress(id) Taro.showToast({ title: '删除成功', icon: 'success' }); reload(); } const selectAddress = async (item: ShopUserAddress) => { if (address) { await updateShopUserAddress({ ...address, isDefault: false }) } await updateShopUserAddress({ id: item.id, isDefault: true }) setTimeout(() => { Taro.navigateBack() }, 500) } useDidShow(() => { reload() }); if (list.length == 0) { return (
) } return ( <> Taro.navigateTo({url: '/user/address/wxAddress'})} >
获取微信地址
{list.map((item, _) => ( selectAddress(item)}> {item.name} {item.phone} {item.province} {item.city} {item.region} {item.address} onDefault(item)}> {item.isDefault ? : } 默认地址 } extra={ <> onDel(item.id)}> 删除 { const { ok, nextAllowed } = canModifyOncePerMonth(item); if (!ok) { Taro.showToast({ title: `一个月只能修改一次${nextAllowed ? ',' + nextAllowed + ' 后可再次修改' : ''}`, icon: 'none', }); return; } Taro.navigateTo({url: '/user/address/add?id=' + item.id}) }}> 修改 } /> ))} {/* 底部浮动按钮 */} Taro.navigateTo({url: '/user/address/add'})} /> ); }; export default Address;