diff --git a/web/src/store/generation.ts b/web/src/store/generation.ts index 5a62325..c415a42 100644 --- a/web/src/store/generation.ts +++ b/web/src/store/generation.ts @@ -54,6 +54,15 @@ function mapProgress(backendStatus: string): number { return 50; } +const ORPHAN_MATERIAL_MENTION_RE = /@(?:图片|视频|音频|素材)\S*/; + +function hasOrphanMaterialMention(input: ReturnType): boolean { + if (input.mode !== 'universal') return false; + const hasDirectRefs = input.references.length > 0; + const hasAssetMentions = (input.assetMentions || []).length > 0; + return !hasDirectRefs && !hasAssetMentions && ORPHAN_MATERIAL_MENTION_RE.test(input.prompt); +} + /** Check if a URL is an asset library reference (case-insensitive protocol). */ function isAssetUrl(url: string): boolean { return url.startsWith('asset://') || url.startsWith('Asset://'); @@ -314,6 +323,10 @@ export const useGenerationStore = create((set, get) => ({ addTask: async () => { const input = useInputBarStore.getState(); + if (hasOrphanMaterialMention(input)) { + showToast('@对应的内容为空'); + return null; + } if (!input.canSubmit()) return null; // Collect files to upload (or existing TOS URLs for regeneration)