forked from 77media/video-flow
Merge branch 'dev' of https://git.qikongjian.com/77media/video-flow into dev
This commit is contained in:
commit
1d756f7f6e
@ -19,7 +19,7 @@ export default function SignupPage() {
|
|||||||
const [confirmPasswordError, setConfirmPasswordError] = useState("");
|
const [confirmPasswordError, setConfirmPasswordError] = useState("");
|
||||||
const [showPassword, setShowPassword] = useState(false);
|
const [showPassword, setShowPassword] = useState(false);
|
||||||
const [showConfirmPassword, setShowConfirmPassword] = useState(false);
|
const [showConfirmPassword, setShowConfirmPassword] = useState(false);
|
||||||
const [agreeToTerms, setAgreeToTerms] = useState(false);
|
const [agreeToTerms, setAgreeToTerms] = useState(true);
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
/** Password validation function with English prompts */
|
/** Password validation function with English prompts */
|
||||||
@ -124,7 +124,7 @@ export default function SignupPage() {
|
|||||||
router.push("/login?registered=true");
|
router.push("/login?registered=true");
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error("Signup error:", error);
|
console.error("Signup error:", error);
|
||||||
setFormError(error.msg || "Registration failed, please try again");
|
setFormError(error.message || "Registration failed, please try again");
|
||||||
} finally {
|
} finally {
|
||||||
setIsSubmitting(false);
|
setIsSubmitting(false);
|
||||||
}
|
}
|
||||||
@ -342,10 +342,9 @@ export default function SignupPage() {
|
|||||||
!!passwordError ||
|
!!passwordError ||
|
||||||
!!confirmPasswordError ||
|
!!confirmPasswordError ||
|
||||||
!password ||
|
!password ||
|
||||||
!confirmPassword ||
|
!confirmPassword
|
||||||
!agreeToTerms
|
|
||||||
}
|
}
|
||||||
className="flex-1 py-3 rounded-lg cursor-pointer bg-[#C039F6] hover:bg-[#C039F6]/80 text-white font-medium transition-colors disabled:opacity-70"
|
className="flex-1 py-3 rounded-lg cursor-pointer bg-[#C039F6] hover:bg-[#C039F6]/80 text-white font-medium transition-colors disabled:opacity-70 disabled:cursor-not-allowed"
|
||||||
>
|
>
|
||||||
{isSubmitting ? "Signing up..." : "Sign Up"}
|
{isSubmitting ? "Signing up..." : "Sign Up"}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import React, { useRef, useCallback, useState, useEffect } from "react";
|
import React, { useRef, useCallback, useState, useEffect } from "react";
|
||||||
import { ChevronsRight, ChevronDown } from 'lucide-react';
|
import { ChevronsRight, ChevronDown, X } from 'lucide-react';
|
||||||
import { Switch } from 'antd';
|
import { Switch } from 'antd';
|
||||||
import { MessageRenderer } from "./MessageRenderer";
|
import { MessageRenderer } from "./MessageRenderer";
|
||||||
import { InputBar } from "./InputBar";
|
import { InputBar } from "./InputBar";
|
||||||
@ -141,7 +141,7 @@ export default function SmartChatBox({
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="text-xs opacity-70">
|
<div className="text-xs opacity-70">
|
||||||
<ChevronsRight
|
<X
|
||||||
className="w-6 h-6 cursor-pointer"
|
className="w-6 h-6 cursor-pointer"
|
||||||
onClick={() => setIsSmartChatBoxOpen(false)}
|
onClick={() => setIsSmartChatBoxOpen(false)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -147,7 +147,7 @@ const WorkFlow = React.memo(function WorkFlow() {
|
|||||||
|
|
||||||
{/* 智能对话按钮 */}
|
{/* 智能对话按钮 */}
|
||||||
<div
|
<div
|
||||||
className="fixed right-[2rem] top-[4rem] z-[49]"
|
className="fixed right-[1rem] bottom-[10rem] z-[49]"
|
||||||
>
|
>
|
||||||
<Tooltip title="Open chat" placement="left">
|
<Tooltip title="Open chat" placement="left">
|
||||||
<GlassIconButton
|
<GlassIconButton
|
||||||
|
|||||||
@ -318,6 +318,7 @@ export const MediaViewer = React.memo(function MediaViewer({
|
|||||||
<div
|
<div
|
||||||
className="relative w-full h-full rounded-lg overflow-hidden"
|
className="relative w-full h-full rounded-lg overflow-hidden"
|
||||||
key={`render-video-${taskObject.final.url}`}
|
key={`render-video-${taskObject.final.url}`}
|
||||||
|
ref={videoContentRef}
|
||||||
>
|
>
|
||||||
<div className="relative w-full h-full group">
|
<div className="relative w-full h-full group">
|
||||||
{/* 背景模糊的视频 */}
|
{/* 背景模糊的视频 */}
|
||||||
@ -349,20 +350,16 @@ export const MediaViewer = React.memo(function MediaViewer({
|
|||||||
{memoizedFinalVideoElement}
|
{memoizedFinalVideoElement}
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|
||||||
{/* 完成状态标签 */}
|
{/* 编辑和剪辑按钮 */}
|
||||||
<motion.div
|
<div className="absolute top-4 z-[21] flex items-center gap-2 transition-right duration-100" style={{
|
||||||
initial={{ opacity: 0, y: -20 }}
|
right: toosBtnRight
|
||||||
animate={{ opacity: 1, y: 0 }}
|
}}>
|
||||||
transition={{ delay: 0.8, duration: 0.6 }}
|
{showGotoCutButton && (
|
||||||
className="absolute top-4 left-4 z-20"
|
<Tooltip placement="top" title='Go to AI-powered editing platform'>
|
||||||
>
|
<GlassIconButton icon={Scissors} size='sm' onClick={onGotoCut} />
|
||||||
<div className="px-3 py-1.5 rounded-lg bg-white/10 backdrop-blur-md border border-white/20 shadow-lg">
|
</Tooltip>
|
||||||
<div className="flex items-center gap-2">
|
)}
|
||||||
<div className="w-2 h-2 rounded-full bg-emerald-500"></div>
|
|
||||||
<span className="text-sm font-medium text-white">completed</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</motion.div>
|
|
||||||
|
|
||||||
{/* 操作按钮组 */}
|
{/* 操作按钮组 */}
|
||||||
{/* <AnimatePresence>
|
{/* <AnimatePresence>
|
||||||
|
|||||||
@ -115,7 +115,7 @@ export function useWorkflowData() {
|
|||||||
|
|
||||||
const generateEditPlan = useCallback(async (isInit?: boolean) => {
|
const generateEditPlan = useCallback(async (isInit?: boolean) => {
|
||||||
isInit && await getGenerateEditPlan({ project_id: episodeId });
|
isInit && await getGenerateEditPlan({ project_id: episodeId });
|
||||||
window.open(`https://smartcut.movieflow.ai/editor/${episodeId}?token=${token}&user_id=${useid}`, '_target');
|
window.open(`https://smartcut.movieflow.ai/ai-editor/${episodeId}?token=${token}&user_id=${useid}`, '_target');
|
||||||
}, [episodeId]);
|
}, [episodeId]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -563,7 +563,7 @@ export function useWorkflowData() {
|
|||||||
fallbackToStep,
|
fallbackToStep,
|
||||||
originalText: state.originalText,
|
originalText: state.originalText,
|
||||||
// showGotoCutButton: from && currentLoadingText.includes('Post-production') ? true : false,
|
// showGotoCutButton: from && currentLoadingText.includes('Post-production') ? true : false,
|
||||||
showGotoCutButton: canGoToCut && currentLoadingText.includes('Post-production') ? true : false,
|
showGotoCutButton: canGoToCut ? true : false,
|
||||||
generateEditPlan
|
generateEditPlan
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -393,7 +393,7 @@ export const registerUser = async ({
|
|||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
console.log('data', data)
|
console.log('data', data)
|
||||||
if(!data.success){
|
if(!data.success){
|
||||||
throw new Error(data.msg)
|
throw new Error(data.message)
|
||||||
}
|
}
|
||||||
return data as {
|
return data as {
|
||||||
success: boolean;
|
success: boolean;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user