QuickEntry.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { TabItem } from '@/services/base';
  2. import { Image } from 'expo-image';
  3. import React from 'react';
  4. import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
  5. // 小程序 item 宽度 162rpx = 81pt
  6. const ITEM_WIDTH = 81;
  7. interface QuickEntryProps {
  8. data: TabItem[];
  9. onPress?: (item: TabItem) => void;
  10. }
  11. export function QuickEntry({ data, onPress }: QuickEntryProps) {
  12. return (
  13. <View style={styles.container}>
  14. <View style={styles.center}>
  15. {data.map((item, index) => (
  16. <TouchableOpacity
  17. key={index}
  18. style={styles.item}
  19. activeOpacity={0.7}
  20. onPress={() => onPress?.(item)}
  21. >
  22. <View style={styles.itemBox}>
  23. <Image source={item.cover} style={styles.icon} contentFit="contain" />
  24. <Text style={styles.title}>{item.title}</Text>
  25. </View>
  26. </TouchableOpacity>
  27. ))}
  28. </View>
  29. </View>
  30. );
  31. }
  32. const styles = StyleSheet.create({
  33. container: {
  34. width: '100%',
  35. marginTop: 10,
  36. paddingHorizontal: 10,
  37. },
  38. center: {
  39. width: '100%',
  40. flexDirection: 'row',
  41. flexWrap: 'wrap',
  42. justifyContent: 'space-around',
  43. },
  44. item: {
  45. width: ITEM_WIDTH,
  46. alignItems: 'center',
  47. },
  48. itemBox: {
  49. alignItems: 'center',
  50. },
  51. icon: {
  52. width: ITEM_WIDTH,
  53. height: ITEM_WIDTH,
  54. },
  55. title: {
  56. fontSize: 10,
  57. fontWeight: '300',
  58. color: 'rgba(255,255,255,0.59)',
  59. },
  60. });