feat: 首页更新
This commit is contained in:
76
components/WalletAmount.tsx
Normal file
76
components/WalletAmount.tsx
Normal file
@@ -0,0 +1,76 @@
|
||||
/**
|
||||
* 钱包余额组件
|
||||
* 显示用户的钱包余额
|
||||
*/
|
||||
|
||||
import React, { useMemo } from 'react';
|
||||
import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
|
||||
import { useColorScheme, useThemeColors } from '@/theme';
|
||||
import { createThemeStyles } from '@/theme';
|
||||
import Ionicons from '@expo/vector-icons/Ionicons';
|
||||
|
||||
/**
|
||||
* 创建主题样式
|
||||
*/
|
||||
const styles = createThemeStyles((colors) => ({
|
||||
container: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
gap: 8,
|
||||
},
|
||||
label: {
|
||||
fontSize: 12,
|
||||
color: colors.text + '80',
|
||||
},
|
||||
amount: {
|
||||
fontSize: 16,
|
||||
fontWeight: '700',
|
||||
color: colors.primary,
|
||||
},
|
||||
currency: {
|
||||
fontSize: 12,
|
||||
color: colors.text + '80',
|
||||
marginLeft: 4,
|
||||
},
|
||||
refreshButton: {
|
||||
padding: 4,
|
||||
},
|
||||
}));
|
||||
|
||||
interface WalletAmountProps {
|
||||
balance?: number;
|
||||
label?: string;
|
||||
showRefresh?: boolean;
|
||||
onRefresh?: () => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* 钱包余额组件
|
||||
*/
|
||||
export default function WalletAmount({
|
||||
balance = 0,
|
||||
label = '余额:',
|
||||
showRefresh = false,
|
||||
onRefresh,
|
||||
}: WalletAmountProps) {
|
||||
const colorScheme = useColorScheme();
|
||||
const s = styles[colorScheme];
|
||||
const themeColors = useThemeColors();
|
||||
|
||||
// 格式化金额
|
||||
const formattedBalance = useMemo(() => {
|
||||
return balance.toFixed(2);
|
||||
}, [balance]);
|
||||
|
||||
return (
|
||||
<View style={s.container}>
|
||||
{label && <Text style={s.label}>{label}</Text>}
|
||||
<Text style={s.amount}>¥ {formattedBalance}</Text>
|
||||
{showRefresh && (
|
||||
<TouchableOpacity style={s.refreshButton} onPress={onRefresh} activeOpacity={0.7}>
|
||||
<Ionicons name="refresh" size={14} color={themeColors.primary} />
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
</View>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user