普兆健康管家前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

207 lines
5.0 KiB

  1. <template>
  2. <view class="page__view">
  3. <navbar title="选择地址" leftClick @leftClick="$utils.navigateBack" color="#191919" bgColor="#FFFFFF" />
  4. <view class="main">
  5. <view class="card" v-for="(item, index) in list" :key="item.id">
  6. <addressCard
  7. :data="item"
  8. @defaultChange="onDefaultChange(index, $event)"
  9. @click="onSelect(item)"
  10. @edit="onEdit(item)"
  11. @delete="onDelete(item.id)"
  12. ></addressCard>
  13. </view>
  14. </view>
  15. <view class="flex bottom">
  16. <button class="btn" @click="onAdd">新建地址</button>
  17. </view>
  18. <addressPopup ref="addressPopup" @submitted="getData"></addressPopup>
  19. </view>
  20. </template>
  21. <script>
  22. import mixinsList from '@/mixins/list.js'
  23. import addressCard from './addressCard.vue'
  24. import addressPopup from '@/pages_order/address/addressPopup.vue'
  25. export default {
  26. mixins: [mixinsList],
  27. components: {
  28. addressCard,
  29. addressPopup,
  30. },
  31. data() {
  32. return {
  33. // todo
  34. mixinsListApi: '',
  35. }
  36. },
  37. methods: {
  38. getData() {
  39. this.list = [
  40. {
  41. id: '001',
  42. name: '郑文锦',
  43. phone: '18108341643',
  44. area: ['海南省', '海口市', '秀英区'],
  45. address: '秀英街道5单元183室',
  46. default: true,
  47. },
  48. {
  49. id: '002',
  50. name: '周俊',
  51. phone: '13293992217',
  52. area: ['贵州省', '遵义市', '道真仡佬族苗族自治县'],
  53. address: '洛龙镇5幢172室',
  54. default: false,
  55. },
  56. {
  57. id: '003',
  58. name: '何炜',
  59. phone: '18108341643',
  60. area: ['新疆维吾尔自治区', '乌鲁木齐市', '沙依巴克区'],
  61. address: '仓房沟片区街道4单元50室',
  62. default: false,
  63. },
  64. {
  65. id: '004',
  66. name: '赵萸艳',
  67. phone: '15022123314',
  68. area: ['海南省', '海口市', '秀英区'],
  69. address: '海南省海口市秀英区秀英街道5单元183室',
  70. default: false,
  71. },
  72. {
  73. id: '005',
  74. name: '周俊',
  75. phone: '13293992217',
  76. area: ['贵州省', '遵义市', '道真仡佬族苗族自治县'],
  77. address: '贵州省遵义市道真仡佬族苗族自治县洛龙镇5幢172室',
  78. default: false,
  79. },
  80. {
  81. id: '006',
  82. name: '何炜',
  83. phone: '18108341643',
  84. area: ['新疆维吾尔自治区', '乌鲁木齐市', '沙依巴克区'],
  85. address: '新疆维吾尔自治区乌鲁木齐市沙依巴克区仓房沟片区街道4单元50室',
  86. default: false,
  87. },
  88. {
  89. id: '007',
  90. name: '赵萸艳',
  91. phone: '15022123314',
  92. area: ['海南省', '海口市', '秀英区'],
  93. address: '海南省海口市秀英区秀英街道5单元183室',
  94. default: false,
  95. },
  96. ]
  97. this.total = this.list.length
  98. },
  99. onDefaultChange(index) {
  100. console.log('onDefaultChange', index)
  101. this.list.forEach((item, idx) => {
  102. if (idx === index) {
  103. item.default = true
  104. } else {
  105. item.default = false
  106. }
  107. })
  108. },
  109. onSelect(data) {
  110. this.$store.commit('setAddressInfo', data)
  111. this.$utils.navigateBack()
  112. },
  113. onDelete(id) {
  114. uni.showToast({
  115. icon: 'loading',
  116. title: '正在删除',
  117. });
  118. setTimeout(() => {
  119. this.list = this.list.filter(item => item.id !== id)
  120. this.total = this.list.length
  121. uni.showToast({
  122. icon: 'success',
  123. title: '删除成功',
  124. });
  125. // uni.showToast({
  126. // icon: 'error',
  127. // title: '删除失败',
  128. // });
  129. }, 1000)
  130. },
  131. onEdit(data) {
  132. this.$refs.addressPopup.open(data)
  133. },
  134. onAdd() {
  135. this.$refs.addressPopup.open()
  136. },
  137. },
  138. }
  139. </script>
  140. <style scoped lang="scss">
  141. .page__view {
  142. width: 100vw;
  143. min-height: 100vh;
  144. background-color: $uni-bg-color;
  145. position: relative;
  146. /deep/ .nav-bar__view {
  147. position: fixed;
  148. top: 0;
  149. left: 0;
  150. }
  151. }
  152. .main {
  153. padding: calc(var(--status-bar-height) + 160rpx) 40rpx 254rpx 40rpx;
  154. }
  155. .card {
  156. & + & {
  157. margin-top: 40rpx;
  158. }
  159. }
  160. .bottom {
  161. position: fixed;
  162. left: 0;
  163. bottom: 0;
  164. align-items: flex-start;
  165. width: 100vw;
  166. height: 214rpx;
  167. padding: 32rpx 40rpx;
  168. background: #FFFFFF;
  169. box-sizing: border-box;
  170. .btn {
  171. width: 100%;
  172. padding: 16rpx 0;
  173. box-sizing: border-box;
  174. font-family: PingFang SC;
  175. font-weight: 500;
  176. font-size: 36rpx;
  177. line-height: 1;
  178. color: #FFFFFF;
  179. background-image: linear-gradient(to right, #4B348F, #845CFA);
  180. border-radius: 41rpx;
  181. }
  182. }
  183. </style>