OrderScreen.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import { StackScreenProps } from '@react-navigation/stack';
  2. import * as React from 'react';
  3. import { RefreshControl } from 'react-native';
  4. import { Div, Button, Image, Text, Avatar } from 'react-native-magnus';
  5. import { FlatList } from 'react-native-gesture-handler';
  6. import Constants from 'expo-constants';
  7. import TimScreen from '../notice/TimScreen';
  8. import useModel from 'flooks';
  9. import Map from '../map/model';
  10. import OrderModel from './model';
  11. import { useMount, useRequest, useCreation } from 'ahooks';
  12. import { useTranslation } from 'react-i18next';
  13. import moment from 'moment';
  14. import { promot } from '../utils/SystemUtils';
  15. import { orderRiderStatus } from '../utils/RiderInfoUtils';
  16. import request from '../utils/RequestUtils';
  17. import { toastSuccess } from '../utils/SystemUtils';
  18. import OrderCom from './OrderCom';
  19. export default function OrderScreen({ navigation }: StackScreenProps) {
  20. const { t } = useTranslation();
  21. const { locationInfo, getNowLocation } = useModel(Map, ['locationInfo']);
  22. const { receiverOrder } = useModel(OrderModel, []);
  23. const [chooseStatus, setChooseStatus] = React.useState<string>('RECEIVED');
  24. useMount(() => {
  25. getNowLocation();
  26. });
  27. const { addressName } = locationInfo;
  28. const chooseStatusInfo = useCreation(() => {
  29. return orderRiderStatus.get(chooseStatus);
  30. }, [chooseStatus]);
  31. const { data, loading, reload } = useRequest(
  32. () => {
  33. return request.get(chooseStatusInfo.requestUrl, {
  34. params: chooseStatusInfo.params,
  35. });
  36. },
  37. {
  38. refreshDeps: [chooseStatusInfo],
  39. formatResult: chooseStatusInfo.formatResult,
  40. defaultLoading: false,
  41. debounceInterval: 1000,
  42. }
  43. );
  44. return (
  45. <Div bg="gray100" flex={1}>
  46. <Div
  47. pt={Constants.statusBarHeight + 11}
  48. pb={11}
  49. bg="yellow500"
  50. row
  51. alignItems="center"
  52. px={14}
  53. px={15}
  54. >
  55. <Image w={50} h={50} source={require('../assets/images/logo.png')} />
  56. <Text fontSize="xl" color="white" mr={50} textAlign="center" flex={1}>
  57. 骑手客户端
  58. </Text>
  59. </Div>
  60. <Div row>
  61. {[...orderRiderStatus.keys()].map((item) => {
  62. const info = orderRiderStatus.get(item);
  63. return (
  64. <Button
  65. key={item}
  66. flex={1}
  67. bg="transparent"
  68. color={chooseStatus === item ? 'yellow500' : 'black'}
  69. fontSize="lg"
  70. py={15}
  71. onPress={() => setChooseStatus(item)}
  72. >
  73. {t(info.name)}
  74. </Button>
  75. );
  76. })}
  77. </Div>
  78. <FlatList
  79. renderItem={({ item }) => {
  80. return (
  81. <OrderCom
  82. info={item}
  83. goDetail={() =>
  84. navigation.navigate('OrderStack', {
  85. screen: 'OrderDetail',
  86. params: {
  87. orderId: item.id,
  88. },
  89. })
  90. }
  91. receiverOrder={() => {
  92. receiverOrder(item.id, (res) => {
  93. toastSuccess('接单成功');
  94. });
  95. }}
  96. goMap={() =>
  97. navigation.navigate('OrderStack', {
  98. screen: 'OrderMap',
  99. params: {
  100. orderId: item.id,
  101. },
  102. })
  103. }
  104. />
  105. );
  106. }}
  107. data={data}
  108. contentContainerStyle={{
  109. flexGrow: 1,
  110. paddingHorizontal: 15,
  111. backgroundColor: '#f2f2f2',
  112. }}
  113. refreshControl={
  114. <RefreshControl refreshing={loading} onRefresh={reload} />
  115. }
  116. />
  117. <Div position="absolute" w={0} h={0} bottom={0} left={0} zIndex={0}>
  118. <TimScreen />
  119. </Div>
  120. </Div>
  121. );
  122. }