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