✨ feat: 完整的生成流程 - 登录检查、文件上传、支付凭证验证
主要功能: 1. ✅ 添加 canGenerate() - 检查登录、metered 订阅、余额 2. ✅ 添加 uploadBlobFiles() - 自动上传所有 blob URL 到服务器 3. ✅ 支付凭证强制验证 - identifier 缺失时报错"支付失败" 4. ✅ 新增 lib/api/upload.ts - 文件上传 API 5. ✅ 更新 useTemplateRun hook 支持 identifier 参数 完整流程(7步骤): 1. 表单验证 2. canGenerate 检查(登录 + 订阅 + 余额) 3. 上传 blob 文件到服务器 4. recordTokenUsage 扣费并获取 identifier 5. 验证所有 URL 都是服务器 URL 6. 转换数据格式 7. runTemplate(id, data, identifier) 创建任务 安全保障: - ❌ 无 identifier → 抛出错误"支付凭证缺失" - ❌ blob URL 未上传 → 报错"存在未上传的文件" - ❌ 余额不足 → 引导用户充值 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -102,13 +102,29 @@ export function useTemplateRun(options: UseTemplateRunOptions = {}) {
|
||||
// 运行模板
|
||||
const executeTemplate = useCallback(async (
|
||||
templateId: string,
|
||||
data: RunTemplateData
|
||||
data: RunTemplateData,
|
||||
identifier?: string
|
||||
) => {
|
||||
if (state === 'submitting' || state === 'running') {
|
||||
console.warn('模板正在运行中,请勿重复提交');
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查是否提供了支付凭证
|
||||
if (!identifier) {
|
||||
const error = new Error('缺少支付凭证,请先完成支付流程');
|
||||
setError(error);
|
||||
setState('error');
|
||||
setProgress({
|
||||
status: 'failed',
|
||||
progress: 0,
|
||||
message: '支付凭证缺失',
|
||||
});
|
||||
options.onError?.(error);
|
||||
Alert.alert('错误', '支付凭证缺失,无法创建生成任务');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// 重置状态
|
||||
setState('submitting');
|
||||
@@ -120,8 +136,8 @@ export function useTemplateRun(options: UseTemplateRunOptions = {}) {
|
||||
message: '正在提交任务...',
|
||||
});
|
||||
|
||||
// 提交模板运行
|
||||
const runResponse = await runTemplate(templateId, data);
|
||||
// 提交模板运行,传递支付凭证
|
||||
const runResponse = await runTemplate(templateId, data, identifier);
|
||||
|
||||
if (!runResponse.success || !runResponse.data) {
|
||||
throw new Error('提交任务失败');
|
||||
|
||||
Reference in New Issue
Block a user