fix: 修复布局问题

This commit is contained in:
imeepos
2025-11-12 10:02:55 +08:00
parent 26cd0139bf
commit a7d922b535
12 changed files with 876 additions and 699 deletions

View File

@@ -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" />