Comment.jsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import * as WebBrowser from 'expo-web-browser';
  2. import * as React from 'react';
  3. import { StyleSheet, FlatList, RefreshControl } from 'react-native';
  4. import { ScrollView } from 'react-native-gesture-handler';
  5. import { Div, Image, Text, Icon, Tag } from 'react-native-magnus';
  6. import { useRequest } from '@umijs/hooks';
  7. import useModel from 'flooks';
  8. import Detail from './model';
  9. import DetailHeader from './DetailHeader';
  10. const AppraisalSortMap = new Map([
  11. [
  12. 'ALL',
  13. {
  14. name: '全部',
  15. },
  16. ],
  17. [
  18. 'LATEST',
  19. {
  20. name: '最新',
  21. },
  22. ],
  23. [
  24. 'PRAISE',
  25. {
  26. name: '好评',
  27. },
  28. ],
  29. [
  30. 'BAD_REVIEW',
  31. {
  32. name: '差评',
  33. isBad: true,
  34. },
  35. ],
  36. [
  37. 'HAVE_PIC',
  38. {
  39. name: '有图',
  40. },
  41. ],
  42. ]);
  43. const CommentItem = ({ info }) => {
  44. const imgs = info.img ? info.img.split(',') : [];
  45. const imageSize = imgs.length > 1 ? 80 : 167;
  46. return (
  47. <Div row py={10} px={15} bg="white" mt={10}>
  48. <Image source={{ uri: info.avatar }} w={33} h={33} />
  49. <Div flex={1} ml={5}>
  50. <Div row>
  51. <Div flex={1}>
  52. <Text fontSize="sm" textAlign="left">
  53. {info.nickname}
  54. </Text>
  55. <Div row>
  56. <Icon name="like1" color="brand500" />
  57. <Text fontSize="sm" color="brand500" textAlign="left">
  58. {info.likes || 0}
  59. </Text>
  60. </Div>
  61. </Div>
  62. <Text fontSize="sm" color="gray400" textAlign="left">
  63. {info.appraiseTime}
  64. </Text>
  65. </Div>
  66. <Text my={5} textAlign="left">
  67. {info.goodsAppraise}
  68. </Text>
  69. <Div row>
  70. {imgs.map((item, index) => {
  71. return (
  72. <Image
  73. key={index}
  74. mt={5}
  75. mr={5}
  76. source={{ uri: item }}
  77. w={imageSize}
  78. h={imageSize}
  79. rounded={3}
  80. />
  81. );
  82. })}
  83. </Div>
  84. </Div>
  85. </Div>
  86. );
  87. };
  88. export default function Comment() {
  89. const { id } = useModel(Detail, ['id']);
  90. const [comments, setcomments] = React.useState([]);
  91. const [appraisalSort, setappraisalSort] = React.useState('ALL');
  92. const appraisalRequest = useRequest(
  93. `/appraisal/my?merchantId=${id}&appraisalSort=${appraisalSort}`,
  94. {
  95. refreshDeps: [id, appraisalSort],
  96. onSuccess: (result) => {
  97. setcomments(result);
  98. },
  99. }
  100. );
  101. return (
  102. <>
  103. <Div row p={15}>
  104. {[...AppraisalSortMap.keys()].map((item) => {
  105. const info = AppraisalSortMap.get(item);
  106. const isChoose = appraisalSort === item;
  107. return (
  108. <Tag
  109. key={item}
  110. bg={isChoose ? 'brand500' : info.isBad ? 'gray200' : 'brand100'}
  111. color={isChoose ? 'white' : info.isBad ? 'gray500' : 'brand500'}
  112. fontSize="sm"
  113. mr={5}
  114. mb={5}
  115. onPress={() => setappraisalSort(item)}
  116. >
  117. {info.name}
  118. </Tag>
  119. );
  120. })}
  121. </Div>
  122. {comments.map((item) => {
  123. return <CommentItem info={item} key={item.goodsAppraise} />;
  124. })}
  125. {comments.length === 0 && (
  126. <Div px={10} py={20}>
  127. <Text color="gray300" textAlign="center">
  128. 暂无数据
  129. </Text>
  130. </Div>
  131. )}
  132. </>
  133. );
  134. }