fix: 修复布局问题
This commit is contained in:
@@ -21,9 +21,10 @@ import { BackButton } from '@/components/ui/back-button';
|
||||
import { DynamicFormField } from '@/components/forms/dynamic-form-field';
|
||||
import { getTemplateById } from '@/lib/api/templates';
|
||||
import { recordTokenUsage, getUserBalance } from '@/lib/api/balance';
|
||||
import { runTemplate } from '@/lib/api/template-runs';
|
||||
import { runTemplate, pollTemplateGeneration } from '@/lib/api/template-runs';
|
||||
import { uploadFile } from '@/lib/api/upload';
|
||||
import { Template, TemplateGraphNode } from '@/lib/types/template';
|
||||
import { TemplateGeneration } from '@/lib/types/template-run';
|
||||
import { useAuth } from '@/hooks/use-auth';
|
||||
|
||||
const FALLBACK_PREVIEW =
|
||||
@@ -41,6 +42,11 @@ export default function TemplateFormScreen() {
|
||||
const [formData, setFormData] = useState<Record<string, any>>({});
|
||||
const [errors, setErrors] = useState<Record<string, string>>({});
|
||||
const [isSubmitting, setIsSubmitting] = useState(false);
|
||||
const [pollingStatus, setPollingStatus] = useState<{
|
||||
isPolling: boolean;
|
||||
generationId?: string;
|
||||
message?: string;
|
||||
}>({ isPolling: false });
|
||||
|
||||
useEffect(() => {
|
||||
loadInitialData();
|
||||
@@ -294,15 +300,33 @@ export default function TemplateFormScreen() {
|
||||
|
||||
const generationId = runResponse.data;
|
||||
|
||||
// 步骤 7: 跳转到结果页面
|
||||
Alert.alert('成功', '视频生成任务已创建', [
|
||||
{
|
||||
text: '查看结果',
|
||||
onPress: () => {
|
||||
router.push(`/result?generationId=${generationId}`);
|
||||
},
|
||||
// 步骤 7: 开始轮询任务状态
|
||||
setPollingStatus({
|
||||
isPolling: true,
|
||||
generationId,
|
||||
message: '正在生成内容,请稍候...',
|
||||
});
|
||||
|
||||
// 使用轮询函数
|
||||
pollTemplateGeneration(
|
||||
generationId,
|
||||
// 成功回调
|
||||
(result: TemplateGeneration) => {
|
||||
setPollingStatus({ isPolling: false });
|
||||
|
||||
// 跳转到结果页面
|
||||
router.push(`/result?generationId=${generationId}`);
|
||||
},
|
||||
]);
|
||||
// 错误回调
|
||||
(error: Error) => {
|
||||
setPollingStatus({ isPolling: false });
|
||||
Alert.alert('生成失败', error.message || '任务执行失败,请重试');
|
||||
},
|
||||
// 最大尝试次数(100次 * 3秒 = 5分钟)
|
||||
100,
|
||||
// 轮询间隔(3秒)
|
||||
3000
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Submission failed:', error);
|
||||
Alert.alert('错误', '提交失败,请稍后重试');
|
||||
@@ -365,13 +389,24 @@ export default function TemplateFormScreen() {
|
||||
{renderFormFields()}
|
||||
|
||||
<TouchableOpacity
|
||||
style={[styles.generateButton, isSubmitting && styles.generateButtonDisabled]}
|
||||
style={[
|
||||
styles.generateButton,
|
||||
(isSubmitting || pollingStatus.isPolling) && styles.generateButtonDisabled
|
||||
]}
|
||||
activeOpacity={0.88}
|
||||
onPress={handleSubmit}
|
||||
disabled={isSubmitting}
|
||||
disabled={isSubmitting || pollingStatus.isPolling}
|
||||
>
|
||||
{isSubmitting ? (
|
||||
<ActivityIndicator size="small" color="#050505" />
|
||||
<>
|
||||
<ActivityIndicator size="small" color="#050505" />
|
||||
<Text style={styles.generateLabel}>提交中...</Text>
|
||||
</>
|
||||
) : pollingStatus.isPolling ? (
|
||||
<>
|
||||
<ActivityIndicator size="small" color="#050505" />
|
||||
<Text style={styles.generateLabel}>{pollingStatus.message || '生成中...'}</Text>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Feather name="star" size={20} color="#050505" />
|
||||
|
||||
Reference in New Issue
Block a user