MineComplaint.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import { StackScreenProps } from '@react-navigation/stack';
  2. import * as React from 'react';
  3. import * as Animatable from 'react-native-animatable';
  4. import {
  5. Div,
  6. Button,
  7. Image,
  8. Text,
  9. Avatar,
  10. Icon,
  11. Tag,
  12. } from 'react-native-magnus';
  13. import { FlatList } from 'react-native-gesture-handler';
  14. import { RefreshControl } from 'react-native';
  15. import { useTranslation } from 'react-i18next';
  16. import { useRequest, useCreation } from 'ahooks';
  17. import { riderScore } from '../utils/RiderInfoUtils';
  18. import { MonthDate, getSearchDate } from '../utils/TimeUtils';
  19. import request from '../utils/RequestUtils';
  20. const AppraisalCom = ({ info }) => {
  21. const {
  22. content,
  23. enabled,
  24. id,
  25. img,
  26. orderId,
  27. resolve,
  28. solution,
  29. target,
  30. time,
  31. type,
  32. } = info;
  33. const imgs = img ? img.split(',') : [];
  34. return (
  35. <Div mb={10} bg="white" p={15}>
  36. <Text fontSize="sm">投诉类型:{type}</Text>
  37. <Text fontSize="sm">投诉时间:{time}</Text>
  38. <Text
  39. fontSize="sm"
  40. color="gray500"
  41. pt={10}
  42. borderTopColor="gray100"
  43. borderTopWidth={1}
  44. >
  45. {content}
  46. </Text>
  47. <Div row>
  48. {imgs.map((item, index) => {
  49. return (
  50. <Image source={item} key={index} w={36} h={36} mr={13} mt={10} />
  51. );
  52. })}
  53. </Div>
  54. </Div>
  55. );
  56. };
  57. interface Result {
  58. list: Item[];
  59. last: boolean;
  60. current: number;
  61. empty: boolean;
  62. }
  63. export default function MineAppraisalScreen({ navigation }: StackScreenProps) {
  64. const { t } = useTranslation();
  65. const { data, loading, loadMore, loadingMore, reload } = useRequest(
  66. (d: Result | undefined) => {
  67. return request.get(__DEV__ ? '/complaint/all' : '/complaint/my');
  68. },
  69. {
  70. formatResult: (response) => {
  71. return {
  72. list: __DEV__ ? response.content : response,
  73. last: true,
  74. empty: __DEV__ ? response.empty : response.length === 0,
  75. };
  76. },
  77. isNoMore: (r: Result) => {
  78. return false;
  79. },
  80. defaultLoading: true,
  81. debounceInterval: 1000,
  82. loadMore: true,
  83. }
  84. );
  85. return (
  86. <Div bg="gray100" flex={1}>
  87. <FlatList
  88. refreshControl={
  89. <RefreshControl refreshing={loading} onRefresh={reload} />
  90. }
  91. contentContainerStyle={{
  92. flexGrow: 1,
  93. backgroundColor: '#f2f2f2',
  94. paddingTop: 10,
  95. }}
  96. data={data.list}
  97. renderItem={({ item }) => {
  98. return <AppraisalCom info={item} />;
  99. }}
  100. keyExtractor={(item) => item.id.toString()}
  101. ListFooterComponent={() => {
  102. return (
  103. <>
  104. {!data.empty && (
  105. <Text p={15} textAlign="center">
  106. {data.last ? t('dao-di-le') : t('jia-zai-zhong')}
  107. </Text>
  108. )}
  109. </>
  110. );
  111. }}
  112. ListEmptyComponent={() => {
  113. return (
  114. <>
  115. {!loading && (
  116. <Text textAlign="center" p={15}>
  117. {t('wu-shu-ju')}
  118. </Text>
  119. )}
  120. </>
  121. );
  122. }}
  123. />
  124. </Div>
  125. );
  126. }