address_list.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <template>
  2. <view class="address-page">
  3. <!-- 地址列表 -->
  4. <scroll-view class="address-list" scroll-y>
  5. <!-- 地址项组件 -->
  6. <address-item v-for="(item, index) in addressList" :key="item.id" :address="item"
  7. :is-default="item.isDefault" @set-default="handleSetDefault(index)" @edit="handleEdit(index)"
  8. @delete="handleDelete(index)" />
  9. </scroll-view>
  10. <!-- 添加新地址按钮 -->
  11. <view class="add-btn-container">
  12. <button class="add-btn" @click="handleAddAddress">
  13. <text class="add-btn-text">添加新地址</text>
  14. </button>
  15. </view>
  16. </view>
  17. </template>
  18. <script setup>
  19. import {
  20. ref
  21. } from 'vue'
  22. import AddressItem from '@/components/AddressItem.vue'
  23. // 模拟地址数据
  24. const addressList = ref([{
  25. id: 1,
  26. name: '张三',
  27. phone: '132****5678',
  28. address: '广东省深圳市罗湖区贝丽北路广东省深圳市罗湖区贝丽北路广东省深圳市罗湖区贝丽北路广东省深圳市罗湖区贝丽北路广东省深圳市罗湖区贝丽北路广东省深圳市罗湖区贝丽北路97号',
  29. isDefault: true
  30. },
  31. {
  32. id: 2,
  33. name: '张三',
  34. phone: '132****5678',
  35. address: '广东省深圳市罗湖区贝丽北路97号',
  36. isDefault: false
  37. },
  38. {
  39. id: 3,
  40. name: '张三',
  41. phone: '132****5678',
  42. address: '广东省深圳市罗湖区贝丽北路97号',
  43. isDefault: false
  44. },
  45. {
  46. id: 3,
  47. name: '张三',
  48. phone: '132****5678',
  49. address: '广东省深圳市罗湖区贝丽北路97号',
  50. isDefault: false
  51. },
  52. {
  53. id: 3,
  54. name: '张三',
  55. phone: '132****5678',
  56. address: '广东省深圳市罗湖区贝丽北路97号',
  57. isDefault: false
  58. },
  59. {
  60. id: 3,
  61. name: '张三',
  62. phone: '132****5678',
  63. address: '广东省深圳市罗湖区贝丽北路97号',
  64. isDefault: false
  65. },
  66. {
  67. id: 3,
  68. name: '张三',
  69. phone: '132****5678',
  70. address: '广东省深圳市罗湖区贝丽北路97号',
  71. isDefault: false
  72. },
  73. {
  74. id: 3,
  75. name: '张三',
  76. phone: '132****5678',
  77. address: '广东省深圳市罗湖区贝丽北路97号',
  78. isDefault: false
  79. },
  80. {
  81. id: 3,
  82. name: '张三',
  83. phone: '132****5678',
  84. address: '广东省深圳市罗湖区贝丽北路97号',
  85. isDefault: false
  86. },
  87. {
  88. id: 3,
  89. name: '张三',
  90. phone: '132****5678',
  91. address: '广东省深圳市罗湖区贝丽北路97号',
  92. isDefault: false
  93. }
  94. ])
  95. // 当前要操作的地址索引
  96. const currentIndex = ref(-1)
  97. // 设置默认地址
  98. const handleSetDefault = (index) => {
  99. addressList.value.forEach((item, i) => {
  100. item.isDefault = i === index
  101. })
  102. }
  103. // 编辑地址
  104. const handleEdit = (index) => {
  105. console.log('编辑地址:', index)
  106. // 这里可以跳转到编辑页面
  107. // uni.navigateTo({ url: '/pages/address/edit?id=' + addressList.value[index].id })
  108. }
  109. // 删除地址
  110. const handleDelete = (index) => {
  111. currentIndex.value = index
  112. uni.showModal({
  113. title: '确认删除',
  114. content: '是否确认删除这个地址',
  115. // showCancel:false,
  116. success: function(res) {
  117. if (res.confirm) {
  118. confirmDelete()
  119. } else if (res.cancel) {
  120. console.log('用户点击取消');
  121. }
  122. }
  123. });
  124. }
  125. // 确认删除
  126. const confirmDelete = () => {
  127. if (currentIndex.value >= 0) {
  128. addressList.value.splice(currentIndex.value, 1)
  129. currentIndex.value = -1
  130. }
  131. }
  132. // 添加新地址
  133. const handleAddAddress = () => {
  134. console.log('添加新地址')
  135. uni.navigateTo({
  136. url: '/pages/address/edit'
  137. })
  138. }
  139. </script>
  140. <style scoped>
  141. .address-page {
  142. display: flex;
  143. flex-direction: column;
  144. height: 100vh;
  145. background-color: #F5F7FA;
  146. }
  147. .address-list {
  148. flex: 1;
  149. padding: 20rpx 30rpx;
  150. box-sizing: border-box;
  151. }
  152. .add-btn-container {
  153. width: 100%;
  154. position: fixed;
  155. bottom: 0rpx;
  156. padding: 32rpx;
  157. background-color: #fff;
  158. border-top: 1rpx solid #eee;
  159. }
  160. .add-btn {
  161. height: 88rpx;
  162. background: #1B64F0;
  163. border-radius: 44rpx;
  164. }
  165. .add-btn-text {
  166. color: #fff;
  167. font-size: 32rpx;
  168. font-weight: 500;
  169. height: 88rpx;
  170. line-height: 88rpx;
  171. }
  172. /* 按钮激活效果 */
  173. .add-btn:active {
  174. opacity: 0.8;
  175. }
  176. </style>