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,
},