移除 useScriptData 自定义 Hook,统一在 workflow hook里处理

This commit is contained in:
北枳 2025-08-07 14:52:45 +08:00
parent 526b4d5cd1
commit 27c8991bea
3 changed files with 25 additions and 51 deletions

View File

@ -13,7 +13,6 @@ import { usePlaybackControls } from "./work-flow/use-playback-controls";
import { AlertCircle, RefreshCw, Pause, Play, ChevronLast } from "lucide-react";
import { motion } from "framer-motion";
import { GlassIconButton } from '@/components/ui/glass-icon-button';
import { useScriptData } from "./work-flow/use-script-data";
export default function WorkFlow() {
const containerRef = useRef<HTMLDivElement>(null);
@ -23,6 +22,7 @@ export default function WorkFlow() {
// 使用自定义 hooks 管理状态
const {
taskObject,
scriptData,
taskSketch,
taskScenes,
taskShotSketch,
@ -57,10 +57,6 @@ export default function WorkFlow() {
playTimerRef,
} = usePlaybackControls(taskSketch, taskVideos, currentStep);
const {
scriptData
} = useScriptData();
// 跟踪是否已经自动开始播放过,避免重复触发
const hasAutoStartedRef = useRef(false);

View File

@ -1,44 +0,0 @@
import { useEffect, useState } from "react";
import { useScriptService } from "@/app/service/Interaction/ScriptService";
import { useSearchParams } from 'next/navigation';
export const useScriptData = () => {
const searchParams = useSearchParams();
const projectId = searchParams.get('episodeId') || '';
const {
loading, // 加载状态
synopsis, //故事梗概
categories, //故事分类
protagonist, //主角
incitingIncident, //激励事件
problem, //问题与新目标
conflict, //冲突与障碍
stakes, //赌注
characterArc, //人物弧线完成
planId, //计划ID
aiOptimizing, //AI优化要求
scriptBlocksMemo, // 渲染数据
initializeFromProject,
} = useScriptService();
const [scriptData, setScriptData] = useState<any>(null);
// 初始化剧本
useEffect(() => {
initializeFromProject(projectId);
}, []);
// 监听剧本加载完毕
useEffect(() => {
if (!loading) {
console.log('scriptBlocksMemo', scriptBlocksMemo);
}
}, [loading, scriptBlocksMemo]);
return {
scriptData
}
}

View File

@ -5,6 +5,7 @@ import { useSearchParams } from 'next/navigation';
import { detailScriptEpisodeNew, getScriptTitle, getRunningStreamData } from '@/api/video_flow';
import { useAppDispatch, useAppSelector } from '@/lib/store/hooks';
import { setSketchCount, setVideoCount } from '@/lib/store/workflowSlice';
import { useScriptService } from "@/app/service/Interaction/ScriptService";
// 步骤映射
const STEP_MAP = {
@ -53,10 +54,12 @@ interface TaskObject {
export function useWorkflowData() {
const searchParams = useSearchParams();
const episodeId = searchParams.get('episodeId');
const episodeId = searchParams.get('episodeId') || '';
// 更新 taskObject 的类型
const [taskObject, setTaskObject] = useState<TaskObject | null>(null);
const [originalText, setOriginalText] = useState<string>('');
const [scriptData, setScriptData] = useState<any>(null);
const [taskSketch, setTaskSketch] = useState<any[]>([]);
const [taskScenes, setTaskScenes] = useState<any[]>([]);
const [taskShotSketch, setTaskShotSketch] = useState<any[]>([]);
@ -79,6 +82,23 @@ export function useWorkflowData() {
const dispatch = useAppDispatch();
const { sketchCount, videoCount } = useAppSelector((state) => state.workflow);
const {
loading, // 加载状态
scriptBlocksMemo, // 渲染剧本数据
initializeFromProject,
} = useScriptService();
// 初始化剧本
useEffect(() => {
console.log('开始初始化剧本', originalText);
initializeFromProject(episodeId);
}, [originalText]);
// 监听剧本加载完毕
useEffect(() => {
if (!loading) {
console.log('scriptBlocksMemo', scriptBlocksMemo);
}
}, [loading, scriptBlocksMemo]);
// 自动开始播放一轮
const autoPlaySketch = useCallback(() => {
return new Promise<void>((resolve) => {
@ -355,8 +375,9 @@ export function useWorkflowData() {
throw new Error(response.message);
}
const { name, status, data, tags, mode } = response.data;
const { name, status, data, tags, mode, original_text } = response.data;
setMode(mode);
setOriginalText(original_text);
setIsLoading(false);
// 设置初始数据
@ -556,6 +577,7 @@ export function useWorkflowData() {
return {
taskObject,
scriptData,
taskSketch,
taskScenes,
taskShotSketch,