index.vue 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <template>
  2. <app-view class="mine-address">
  3. <template #header>
  4. <app-navbar title="收货地址管理" />
  5. </template>
  6. <div class="mine-address__container">
  7. <ul class="list">
  8. <li class="list-item" v-for="(item, index) in dataList" :key="index">
  9. <div class="list-item__">
  10. <Checkbox v-model="item.isdefault" />
  11. </div>
  12. <div class="list-item__">
  13. <div>{{ item.receivername }}</div>
  14. <div>{{ [item.provincename, item.cityname, item.districtname, item.address].join(' ') }}</div>
  15. </div>
  16. <div class="list-item__">
  17. <Button icon="edit" @click="onEdit(item)" />
  18. </div>
  19. </li>
  20. </ul>
  21. </div>
  22. <template #footer>
  23. <div class="g-form__footer">
  24. <Button type="primary" @click="onEdit" round block>新增地址</Button>
  25. </div>
  26. <component ref="componentRef" v-bind="{selectedRow}" :is="componentMap.get(componentId)"
  27. @closed="closeComponent" v-if="componentId" />
  28. </template>
  29. </app-view>
  30. </template>
  31. <script lang="ts" setup>
  32. import { shallowRef, defineAsyncComponent } from 'vue'
  33. import { Checkbox, Button } from 'vant'
  34. import { useNavigation } from '@/hooks/navigation'
  35. import { useComponent } from '@/hooks/component'
  36. import { useAddress } from '@/business/user'
  37. const componentMap = new Map<string, unknown>([
  38. ['edit', defineAsyncComponent(() => import('./components/edit/index.vue'))],
  39. ])
  40. const { beforeRouteLeave } = useNavigation()
  41. const { dataList, getUserAddressList } = useAddress()
  42. const { componentRef, componentId, openComponent, closeComponent, closeComponentEach } = useComponent(getUserAddressList)
  43. const selectedRow = shallowRef<Model.UserReceiveInfoRsp>()
  44. const onEdit = (item?: Model.UserReceiveInfoRsp) => {
  45. selectedRow.value = item
  46. openComponent('edit')
  47. }
  48. getUserAddressList()
  49. beforeRouteLeave(() => closeComponentEach())
  50. </script>
  51. <style lang="less">
  52. @import './index.less';
  53. </style>