From e0cc2527b34a16660001454f1b3512887902f950 Mon Sep 17 00:00:00 2001 From: km2025 Date: Mon, 29 Dec 2025 18:22:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=8A=9F=E8=83=BD=E5=88=B0=E7=94=9F=E6=88=90?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=9B=E4=BF=AE=E5=A4=8D=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E7=9A=84=E6=A8=A1=E6=9D=BF=E9=87=8D=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E6=8E=A5=E5=8F=A3=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/(tabs)/generate.tsx | 30 +++++++++++++++++++++++++++--- app/(tabs)/sync.tsx | 2 +- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/app/(tabs)/generate.tsx b/app/(tabs)/generate.tsx index b16086b..e26b972 100644 --- a/app/(tabs)/generate.tsx +++ b/app/(tabs)/generate.tsx @@ -2,13 +2,14 @@ import { FontAwesome, Fontisto, Ionicons } from '@expo/vector-icons' import { FlashList } from '@shopify/flash-list' import { useRouter } from 'expo-router' import React, { memo, useCallback, useEffect, useMemo, useState } from 'react' -import { ActivityIndicator, RefreshControl } from 'react-native' +import { ActivityIndicator, Platform, RefreshControl } from 'react-native' import { useAnimatedStyle } from 'react-native-reanimated' import { useSafeAreaInsets } from 'react-native-safe-area-context' import { imgPicker } from '@/@share/apis/imgPicker' import { Block, Img, Input, Text } from '@/@share/components' import BannerSection from '@/components/BannerSection' +import { useFileUpload } from '@/hooks/actions' import { useTemplates } from '@/hooks/data/use-templates' import { screenHeight, screenWidth } from '@/utils' @@ -29,6 +30,8 @@ export default function Generate() { const templates = useTemplates() + const { uploadFile, loading: uploadLoading } = useFileUpload() + useEffect(() => { templates.execute({ categoryId: CATEGORY_ID, page: 1, limit: 12, sortBy: 'createdAt', sortOrder: 'desc' }) }, []) @@ -68,10 +71,31 @@ export default function Generate() { }, [selectedTemplate]) const pickImage = useCallback(async (target: 'me' | 'friend') => { - const [uri] = (await imgPicker({ maxImages: 1, resultType: 'uri' })) as string[] - if (!uri) return + const assetList = (await imgPicker({ maxImages: 1, resultType: 'asset' })) as string[] + + const result = assetList[0] as any + if (!result) return + + const uri = result?.uri if (target === 'me') setMeImg(uri) else setFriendImg(uri) + + const file = { + name: result.fileName || `image_${Date.now()}.jpg`, + type: result.mimeType || 'image/jpeg', + uri: Platform.OS === 'android' ? result.uri : result.uri.replace('file://', ''), + } + const formData = new FormData() + formData.append('file', file as any) + + const { url, error } = await uploadFile(file as any) + // console.log('pickImage---------url:', url, 'error:', error) + + if (error || !url) { + return + } + if (target === 'me') setMeImg(url) + else setFriendImg(url) }, []) const handleRandom = useCallback(() => { diff --git a/app/(tabs)/sync.tsx b/app/(tabs)/sync.tsx index 934bea5..f6af27b 100644 --- a/app/(tabs)/sync.tsx +++ b/app/(tabs)/sync.tsx @@ -264,7 +264,7 @@ const Sync = () => { Toast.hideModal() const { generationId, error } = await reRunTemplate({ - generationId: selectedItem.id + generationId: selectedItem.id, }) Toast.hideLoading()