HomeAddressCom.jsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import * as WebBrowser from 'expo-web-browser';
  2. import * as React from 'react';
  3. import { StyleSheet, View } from 'react-native';
  4. import { Div, Button, Select, Image, Text, Avatar } from 'react-native-magnus';
  5. import { ScrollView } from 'react-native-gesture-handler';
  6. import { Modal, Portal, TouchableRipple, Badge } from 'react-native-paper';
  7. import Icon from 'react-native-vector-icons/FontAwesome';
  8. import { useTranslation } from 'react-i18next';
  9. import { useRequest, useCreation, useUnmount } from '@umijs/hooks';
  10. import { useNavigation, useFocusEffect } from '@react-navigation/native';
  11. import useModel from 'flooks';
  12. import AddressModel from './model'; // detail模块通用方法
  13. import MapModel from '../Map/model';
  14. const AddressItem = ({ info, onPress }) => {
  15. return (
  16. <>
  17. <Button onPress={onPress} bg="hide" p={0} block>
  18. <Div flex={1} row alignItems="center" py={15}>
  19. <Div flex={1} mx={15}>
  20. <Text fontSize="sm" textAlign="left">
  21. {info.addressName}
  22. </Text>
  23. <Text fontSize="sm" color="gray300" textAlign="left">
  24. {info.number}
  25. </Text>
  26. <Div row>
  27. <Text fontSize="sm" color="gray300" textAlign="left">
  28. {info.name}
  29. </Text>
  30. <Text fontSize="sm" color="gray300" textAlign="left">
  31. ({info.sex})
  32. </Text>
  33. <Text ml={15} fontSize="sm" color="gray300" textAlign="left">
  34. {info.phone}
  35. </Text>
  36. </Div>
  37. </Div>
  38. </Div>
  39. </Button>
  40. <Div h={1} bg="gray200" />
  41. </>
  42. );
  43. };
  44. export default function HomeAddressCom() {
  45. const { t } = useTranslation();
  46. const {
  47. addressList,
  48. getAddressList,
  49. goEdit,
  50. setShow,
  51. chooseAddressId,
  52. setChoose,
  53. } = useModel(AddressModel, ['addressList', 'goEdit', 'chooseAddressId']);
  54. useRequest(getAddressList);
  55. const navigation = useNavigation();
  56. const { changeChooseInfo } = useModel(MapModel, []);
  57. useUnmount(() => {
  58. setShow(false);
  59. });
  60. return (
  61. <>
  62. <Div bg="white" px={15} pb={15}>
  63. <Div h={1} bg="gray200" />
  64. <Text py={12} fontSize="sm" color="gray500">
  65. {t('shou-huo-di-zhi')}
  66. </Text>
  67. <Div h={1} bg="gray200" />
  68. {addressList.map((item) => {
  69. return (
  70. <AddressItem
  71. key={item.id}
  72. info={item}
  73. isChoose={chooseAddressId === item.id}
  74. onPress={() => {
  75. changeChooseInfo({
  76. addressName: item.addressName,
  77. location: {
  78. lat: item.latitude,
  79. lng: item.longitude,
  80. },
  81. });
  82. navigation.navigate('Home');
  83. }}
  84. />
  85. );
  86. })}
  87. {addressList.length === 0 && (
  88. <>
  89. <Div p={20}>
  90. <Text color="gray300" textAlign="center">
  91. {t('dang-qian-zan-wu-di-zhi')}
  92. </Text>
  93. </Div>
  94. <Div h={1} bg="gray200" />
  95. </>
  96. )}
  97. <Button
  98. block
  99. textAlign="left"
  100. px={0}
  101. bg="hide"
  102. py={15}
  103. onPress={() => {
  104. navigation.navigate('EditAddress');
  105. }}
  106. >
  107. <Text flex={1} color="brand500">
  108. {t('xin-zeng-di-zhi')}
  109. </Text>
  110. </Button>
  111. </Div>
  112. </>
  113. );
  114. }