Recommend.jsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import * as WebBrowser from 'expo-web-browser';
  2. import * as React from 'react';
  3. import { StyleSheet, View } from 'react-native';
  4. import { Flex } from '@ant-design/react-native';
  5. import { Card, IconButton, Colors } from 'react-native-paper';
  6. import { Div, Image, Text } from 'react-native-magnus';
  7. import { useNavigation } from '@react-navigation/native';
  8. import useModel from 'flooks';
  9. import Detail from './model';
  10. import Plus from '../../components/Plus';
  11. export default function Order() {
  12. const navigation = useNavigation();
  13. const {
  14. goodsList,
  15. checkgoodsSpecification,
  16. cartMap,
  17. changeNum,
  18. } = useModel(Detail, ['goodsList', 'cartMap']);
  19. const [recommendGoods, setRecommendGoods] = React.useState([]);
  20. React.useEffect(() => {
  21. const goods = goodsList.filter((item) => {
  22. return item.recommend;
  23. });
  24. setRecommendGoods(goods);
  25. }, [goodsList]);
  26. const goodsListCom = (list) => {
  27. return list.map((item) => {
  28. return (
  29. <Flex.Item
  30. key={item.id}
  31. style={{ paddingHorizontal: 3, maxWidth: '50%' }}
  32. >
  33. <Card
  34. elevation={2}
  35. style={styles.card}
  36. onPress={() =>
  37. navigation.navigate('GoodsDetail', {
  38. goodsId: item.id,
  39. })
  40. }
  41. >
  42. <Card.Cover
  43. style={styles.image2}
  44. resizeMode="cover"
  45. source={{ uri: item.img }}
  46. />
  47. <Card.Content style={styles.content}>
  48. <Text textAlign="left">{item.name}</Text>
  49. <Text fontSize="sm" color="gray300" textAlign="left">
  50. 月售:
  51. {item.totalSales}
  52. </Text>
  53. <Div row>
  54. <Text
  55. fontSize="sm"
  56. fontWeight="bold"
  57. color="red500"
  58. textAlign="left"
  59. >
  60. ¥{item.discountAmount || item.amount}
  61. </Text>
  62. {!!item.discountAmount && (
  63. <Text
  64. ml={5}
  65. fontSize="xs"
  66. color="gray300"
  67. textDecorLine="line-through"
  68. textDecorColor="gray300"
  69. textAlign="left"
  70. >
  71. ¥{item.amount}
  72. </Text>
  73. )}
  74. </Div>
  75. <Plus
  76. num={cartMap.get(item.id) ? cartMap.get(item.id).num : 0}
  77. minus={() => {
  78. changeNum(
  79. cartMap.get(item.id).specIds,
  80. cartMap.get(item.id).num - 1
  81. );
  82. }}
  83. plusEvent={() => checkgoodsSpecification(item)}
  84. />
  85. </Card.Content>
  86. </Card>
  87. </Flex.Item>
  88. );
  89. });
  90. };
  91. return (
  92. <>
  93. {recommendGoods.length > 0 && (
  94. <View style={styles.main}>
  95. <Text fontSize="xl" fontWeight="bold" textAlign="left">
  96. 店主推荐
  97. </Text>
  98. <Flex>{goodsListCom(recommendGoods)}</Flex>
  99. </View>
  100. )}
  101. </>
  102. );
  103. }
  104. const styles = StyleSheet.create({
  105. main: {
  106. backgroundColor: '#fff',
  107. padding: 15,
  108. },
  109. plus: {
  110. position: 'absolute',
  111. right: 0,
  112. bottom: 0,
  113. },
  114. content: {
  115. paddingHorizontal: 10,
  116. paddingBottom: 5,
  117. marginTop: 5,
  118. },
  119. });