diff --git a/app/(tabs)/message.tsx b/app/(tabs)/message.tsx index 6665c2e..1f10919 100644 --- a/app/(tabs)/message.tsx +++ b/app/(tabs)/message.tsx @@ -22,7 +22,7 @@ import LoadingState from '@/components/LoadingState' import ErrorState from '@/components/ErrorState' import PaginationLoader from '@/components/PaginationLoader' -import { MessageCard } from '@/components/message/MessageCard' +import { MessageCard, type Message as MessageCardMessage } from '@/components/message/MessageCard' import { MessageTabBar, type MessageType, TAB_ITEMS } from '@/components/message/MessageTabBar' import { AnnouncementBanner } from '@/components/message/AnnouncementBanner' import { SwipeToDelete } from '@/components/message/SwipeToDelete' @@ -76,7 +76,7 @@ export default function MessageScreen() { const { announcements, execute: executeAnnouncements, - } = useAnnouncements({ limit: 10 }) + } = useAnnouncements() // Filter messages based on active tab const filteredMessages = filterMessagesByTab(allMessages, activeTab) @@ -153,7 +153,7 @@ export default function MessageScreen() { const queryString = Object.keys(params).length > 0 ? `?${new URLSearchParams(params).toString()}` : '' - router.push(`${route}${queryString}`) + router.push(`${route}${queryString}` as any) } }, [markRead, router]) diff --git a/app/(tabs)/video.tsx b/app/(tabs)/video.tsx index 2838f26..69e4735 100644 --- a/app/(tabs)/video.tsx +++ b/app/(tabs)/video.tsx @@ -210,10 +210,6 @@ export const VideoItem = memo(({ item, videoHeight }: { item: TemplateDetail; vi likeCount={likeCount} favoriteCount={favoriteCount} loading={likeLoading || favoriteLoading} - onLike={onLike} - onUnlike={onUnlike} - onFavorite={onFavorite} - onUnfavorite={onUnfavorite} testID="video-social-button" /> diff --git a/app/generationRecord.test.tsx b/app/generationRecord.test.tsx index 8eab5d0..cf07a11 100644 --- a/app/generationRecord.test.tsx +++ b/app/generationRecord.test.tsx @@ -65,6 +65,10 @@ jest.mock('@/components/ui/video', () => ({ VideoPlayer: ({ source }: any) => , })) +jest.mock('expo-linear-gradient', () => ({ + LinearGradient: ({ children }: any) => {children}, +})) + jest.mock('@/hooks', () => ({ useGenerationDetail: jest.fn(), useDeleteGeneration: jest.fn(), diff --git a/app/generationRecord.tsx b/app/generationRecord.tsx index 5599378..6b81c61 100644 --- a/app/generationRecord.tsx +++ b/app/generationRecord.tsx @@ -8,13 +8,13 @@ import { StatusBar as RNStatusBar, Alert, ScrollView, - Platform, } from 'react-native' import { StatusBar } from 'expo-status-bar' import { SafeAreaView } from 'react-native-safe-area-context' import { Image } from 'expo-image' import { useRouter, useLocalSearchParams } from 'expo-router' import { useTranslation } from 'react-i18next' +import { LinearGradient } from 'expo-linear-gradient' import { LeftArrowIcon, DeleteIcon, EditIcon, ChangeIcon, WhiteStarIcon } from '@/components/icon' import { DeleteConfirmDialog } from '@/components/ui/delete-confirm-dialog' @@ -128,13 +128,13 @@ export default function GenerationRecordScreen() { switch (status?.toLowerCase()) { case 'completed': case 'success': - return '#4CAF50' + return '#4ADE80' case 'pending': case 'processing': - return '#FF9800' + return '#FF9966' case 'failed': case 'error': - return '#F44336' + return '#FF6B6B' default: return '#8A8A8A' } @@ -277,50 +277,61 @@ export default function GenerationRecordScreen() { {/* 操作按钮 */} - {/* 下载按钮 */} + {/* 下载按钮 - 主要操作使用渐变色 */} {hasResult && ( - - {downloading - ? `${t('generationRecord.downloading')} ${Math.round(progress * 100)}%` - : t('generationRecord.download')} - + + + {downloading + ? `${t('generationRecord.downloading')} ${Math.round(progress * 100)}%` + : t('generationRecord.download')} + + )} - {/* 重新生成按钮 */} - - - {t('generationRecord.regenerate')} - - - {/* 再来一次按钮 */} - {generation.template && ( + {/* 次要操作按钮行 */} + + {/* 重新生成按钮 */} - - {t('generationRecord.reEdit')} + + {t('generationRecord.regenerate')} - )} - {/* 删除按钮 */} - setDeleteDialogOpen(true)} - disabled={deleting} - > - - + {/* 再来一次按钮 */} + {generation.template && ( + + + {t('generationRecord.reEdit')} + + )} + + {/* 删除按钮 */} + setDeleteDialogOpen(true)} + disabled={deleting} + > + + + @@ -438,40 +449,52 @@ const styles = StyleSheet.create({ paddingHorizontal: 12, gap: 12, }, - actionButton: { + // 主要按钮 - 渐变色 + primaryButtonContainer: { + height: 48, + borderRadius: 12, + overflow: 'hidden', + }, + gradientButton: { + flex: 1, flexDirection: 'row', alignItems: 'center', justifyContent: 'center', - paddingHorizontal: 16, - paddingVertical: 12, borderRadius: 12, - backgroundColor: '#1C1E22', - gap: 8, }, - downloadButton: { - backgroundColor: '#4CAF50', - }, - downloadButtonText: { + primaryButtonText: { color: '#FFFFFF', - fontSize: 14, + fontSize: 16, fontWeight: '600', }, - rerunButton: { - backgroundColor: '#1C1E22', + // 次要按钮行 + secondaryButtonRow: { + flexDirection: 'row', + gap: 8, }, - tryAgainButton: { - backgroundColor: '#1C1E22', + secondaryButton: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + height: 48, + borderRadius: 12, + backgroundColor: '#262A31', + gap: 6, }, - deleteActionButton: { - backgroundColor: '#1C1E22', - width: 48, - alignSelf: 'flex-end', - }, - actionButtonText: { + secondaryButtonText: { color: '#F5F5F5', fontSize: 14, fontWeight: '500', }, + deleteButton: { + width: 48, + height: 48, + borderRadius: 12, + backgroundColor: '#262A31', + alignItems: 'center', + justifyContent: 'center', + }, buttonDisabled: { opacity: 0.5, },