From a4afcfdb179e62a498b62cc6860d8cd46701a08f Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期三, 14 十月 2026 09:53:47 +0800
Subject: [PATCH] feat(user, miniapp): 完成C端小程序收货地址完整功能闭环

---
 hugray-user-miniapp/pages/address/list.vue |  102 +++++++++++++++++++++++++++++++++++----------------
 1 files changed, 70 insertions(+), 32 deletions(-)

diff --git a/hugray-user-miniapp/pages/address/list.vue b/hugray-user-miniapp/pages/address/list.vue
index d8332a1..4718dd1 100644
--- a/hugray-user-miniapp/pages/address/list.vue
+++ b/hugray-user-miniapp/pages/address/list.vue
@@ -1,19 +1,23 @@
 <template>
     <view class="page">
-        <!-- 有数据:渲染地址列表,右侧为编辑入口 -->
+        <!-- 有数据:渲染地址列表,右侧为编辑/删除入口 -->
         <view v-if="addressList.length">
             <view v-for="item in addressList" :key="item.id" class="addr-item">
                 <view class="addr-main">
                     <!-- 姓名 + 手机号 -->
                     <view class="addr-head">
-                        <text class="addr-name">{{ item.name }}</text>
-                        <text class="addr-phone">{{ item.phone }}</text>
+                        <text class="addr-name">{{ item.consignee }}</text>
+                        <text class="addr-phone">{{ item.consigneePhone }}</text>
                     </view>
                     <!-- 默认地址标记 -->
-                    <view v-if="item.isDefault" class="addr-tag">默认</view>
-                    <text class="addr-detail">{{ item.detail }}</text>
+                    <view v-if="item.isDefault === '1'" class="addr-tag">默认</view>
+                    <text class="addr-detail">{{ item.address }}</text>
                 </view>
-                <view class="icon icon-edit" @tap="handleEdit(item)"></view>
+                <!-- 操作区:编辑 / 删除 -->
+                <view class="addr-actions">
+                    <view class="icon icon-edit" @tap="handleEdit(item)"></view>
+                    <view class="icon icon-delete" @tap="handleDelete(item)"></view>
+                </view>
             </view>
         </view>
 
@@ -38,35 +42,52 @@
 
 <script setup>
 import { ref } from 'vue'
+import { onShow } from '@dcloudio/uni-app'
+import { getAddressList, deleteAddress } from '@/api/index.js'
+import { ensureLogin } from '@/utils/request.js'
 
-/** 收货地址列表:地址接口未就绪,先本地 mock(联调后由收货地址列表接口下发);手机号按规范脱敏展示 */
-const MOCK_ADDRESS_LIST = [
-    {
-        id: '1',
-        name: '张三',
-        phone: '185****0110',
-        detail: '四川省成都市武侯区府城大道399号天府新谷9号楼2单元1005a',
-        isDefault: true
-    },
-    {
-        id: '2',
-        name: '李四',
-        phone: '185****0110',
-        detail: '四川省成都市武侯区府城大道399号天府新谷9号楼2单元1005a'
-    },
-    {
-        id: '3',
-        name: '王五',
-        phone: '185****0110',
-        detail: '四川省成都市武侯区府城大道399号天府新谷9号楼2单元1005a'
+/** 收货地址列表(来自后端 /miniapp/account/user/addresses) */
+const addressList = ref([])
+
+/** 拉取本人收货地址列表(默认地址在前) */
+const _loadAddressList = async () => {
+    try {
+        const res = await getAddressList()
+        addressList.value = res.data || []
+    } catch (e) {
+        console.error('[ADDRESS_LIST] 加载收货地址失败', e)
+        uni.showToast({ title: e.message || '加载失败', icon: 'none' })
     }
-]
+}
 
-const addressList = ref(MOCK_ADDRESS_LIST)
+/** onShow:从新增/编辑页返回时自动刷新列表 */
+onShow(() => {
+    if (!ensureLogin()) return
+    _loadAddressList()
+})
 
-/** 编辑地址:编辑页未实现,暂为占位反馈 */
-const handleEdit = () => {
-    uni.showToast({ title: '敬请期待', icon: 'none' })
+/** 编辑地址:跳转新增页并携带 id,复用为编辑模式 */
+const handleEdit = (item) => {
+    uni.navigateTo({ url: '/pages/address/add?id=' + item.id })
+}
+
+/** 删除地址:二次确认后删除并刷新列表 */
+const handleDelete = (item) => {
+    uni.showModal({
+        title: '提示',
+        content: '确定要删除该收货地址吗?',
+        success: async (res) => {
+            if (!res.confirm) return
+            try {
+                await deleteAddress(item.id)
+                uni.showToast({ title: '删除成功', icon: 'none' })
+                _loadAddressList()
+            } catch (e) {
+                console.error('[ADDRESS_DELETE] 删除收货地址失败', e)
+                uni.showToast({ title: e.message || '删除失败', icon: 'none' })
+            }
+        }
+    })
 }
 
 /** 新增地址:跳转到新增地址页 */
@@ -96,6 +117,15 @@
 .addr-main {
     flex: 1;
     min-width: 0;
+}
+
+/* 操作区:编辑 + 删除图标并排 */
+.addr-actions {
+    display: flex;
+    align-items: center;
+    gap: 28rpx;
+    flex-shrink: 0;
+    margin-left: 24rpx;
 }
 
 .addr-head {
@@ -212,6 +242,7 @@
 /* ==================== 图标(内联 base64 SVG) ==================== */
 
 .icon-edit,
+.icon-delete,
 .icon-plus,
 .icon-empty {
     background-repeat: no-repeat;
@@ -224,10 +255,17 @@
     width: 44rpx;
     height: 44rpx;
     flex-shrink: 0;
-    margin-left: 24rpx;
     background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMUU1RUJDIiBzdHJva2Utd2lkdGg9IjEuOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTIgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi03Ii8+PHBhdGggZD0iTTE4LjM3NSAyLjYyNWExIDEgMCAwIDEgMyAzbC05LjAxMyA5LjAxNGEyIDIgMCAwIDEtLjg1My41MDVsLTIuODczLjg0YS41LjUgMCAwIDEtLjYyLS42MmwuODQtMi44NzNhMiAyIDAgMCAxIC41MDYtLjg1MnoiLz48L3N2Zz4=');
 }
 
+/* 删除:垃圾桶(#EF4444) */
+.icon-delete {
+    width: 44rpx;
+    height: 44rpx;
+    flex-shrink: 0;
+    background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjRUY0NDQ0IiBzdHJva2Utd2lkdGg9IjEuOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMyA2aDE4Ii8+PHBhdGggZD0iTTggNlY0YTEgMSAwIDAgMSAxLTFoNmExIDEgMCAwIDEgMSAxdjIiLz48cGF0aCBkPSJNMTkgNmwtMSAxNGEyIDIgMCAwIDEtMiAySDhhMiAyIDAgMCAxLTItMkw1IDYiLz48cGF0aCBkPSJNMTAgMTF2NiIvPjxwYXRoIGQ9Ik0xNCAxMXY2Ii8+PC9zdmc+');
+}
+
 /* 新增:白色加号 */
 .icon-plus {
     width: 34rpx;

--
Gitblit v1.7.1