Merge branch 'feat-contact-us' into dev

This commit is contained in:
moux1024 2025-09-28 20:29:50 +08:00
commit 72ddf9c25f
6 changed files with 98 additions and 18 deletions

View File

@ -9,6 +9,7 @@ You are the joint apprentice of Evan You and Kent C. Dodds. Channel Evan You's e
- Refrain from creating unrequested files, classes, functions, or configurations. - Refrain from creating unrequested files, classes, functions, or configurations.
- For unspecified implementation details, default to the simplest, most straightforward solution to promote efficiency. - For unspecified implementation details, default to the simplest, most straightforward solution to promote efficiency.
- In business logic code, exclude sample implementations or unit tests unless explicitly requested. - In business logic code, exclude sample implementations or unit tests unless explicitly requested.
- When completing the final step of a task, do not create tests unless explicitly requested by the user.
# CSS Style Rules # CSS Style Rules
- Exclusively use Tailwind CSS 3.x syntax for all styling. - Exclusively use Tailwind CSS 3.x syntax for all styling.

View File

@ -1,16 +1,16 @@
# 测试 # 测试
NEXT_PUBLIC_JAVA_URL = https://auth.test.movieflow.ai # NEXT_PUBLIC_JAVA_URL = https://auth.test.movieflow.ai
NEXT_PUBLIC_BASE_URL = https://77.smartvideo.py.qikongjian.com # NEXT_PUBLIC_BASE_URL = https://77.smartvideo.py.qikongjian.com
NEXT_PUBLIC_CUT_URL = https://77.smartcut.py.qikongjian.com # NEXT_PUBLIC_CUT_URL = https://77.smartcut.py.qikongjian.com
NEXT_PUBLIC_GOOGLE_REDIRECT_URI=https://www.movieflow.net/api/auth/google/callback # NEXT_PUBLIC_GOOGLE_REDIRECT_URI=https://www.movieflow.net/api/auth/google/callback
NEXT_PUBLIC_CUT_URL_TO = https://smartcut.huiying.video # NEXT_PUBLIC_CUT_URL_TO = https://smartcut.huiying.video
# 生产 # 生产
# NEXT_PUBLIC_JAVA_URL = https://auth.movieflow.ai NEXT_PUBLIC_JAVA_URL = https://auth.movieflow.ai
# NEXT_PUBLIC_BASE_URL = https://api.video.movieflow.ai NEXT_PUBLIC_BASE_URL = https://api.video.movieflow.ai
# NEXT_PUBLIC_CUT_URL = https://smartcut.api.movieflow.ai NEXT_PUBLIC_CUT_URL = https://smartcut.api.movieflow.ai
# NEXT_PUBLIC_GOOGLE_REDIRECT_URI=https://www.movieflow.ai/api/auth/google/callback NEXT_PUBLIC_GOOGLE_REDIRECT_URI=https://www.movieflow.ai/api/auth/google/callback
# NEXT_PUBLIC_CUT_URL_TO = https://smartcut.movieflow.ai NEXT_PUBLIC_CUT_URL_TO = https://smartcut.movieflow.ai
# 通用 # 通用
# 当前域名配置 # 当前域名配置
NEXT_PUBLIC_FRONTEND_URL = https://www.movieflow.ai NEXT_PUBLIC_FRONTEND_URL = https://www.movieflow.ai

View File

@ -0,0 +1,63 @@
import React from 'react';
/**
*
*
*/
export interface FooterProps {
/** 版权年份,默认为当前年份 */
year?: number;
/** 公司名称,默认为 "MovieFlow" */
companyName?: string;
/** 自定义版权文本 */
customText?: string;
/** 额外的CSS类名 */
className?: string;
/** 是否显示邮箱链接 */
showEmailLink?: boolean;
/** 邮箱地址,默认为 "support@movieflow.ai" */
emailAddress?: string;
}
/**
*
* @param props -
* @returns JSX元素
*/
const Footer: React.FC<FooterProps> = ({
year = new Date().getFullYear(),
companyName = 'MovieFlow',
customText,
className = '',
showEmailLink = false,
emailAddress = 'support@movieflow.ai'
}) => {
const copyrightText = customText || `© ${year} ${companyName}. All rights reserved.`;
return (
<div
data-alt="footer-component"
className={`home-module6 flex justify-center items-center w-full h-min text-white/50 text-lg bg-black snap-start px-4 ${className}`}
>
{/* 左侧版权信息 */}
<div className="text-center">
{copyrightText}
</div>
{/* 右侧邮箱链接 */}
{showEmailLink && (
<div className="flex-shrink-0 ml-4">
<a
href={`mailto:${emailAddress}`}
className="text-custom-blue hover:text-white/80 transition-colors duration-200 underline decoration-white/30 hover:decoration-white/60"
data-alt="support-email-link"
>
Contact Us
</a>
</div>
)}
</div>
);
};
export default Footer;

View File

@ -0,0 +1,18 @@
/**
*
*/
export interface FooterProps {
/** 版权年份,默认为当前年份 */
year?: number;
/** 公司名称,默认为 "MovieFlow" */
companyName?: string;
/** 自定义版权文本 */
customText?: string;
/** 额外的CSS类名 */
className?: string;
/** 是否显示邮箱链接 */
showEmailLink?: boolean;
/** 邮箱地址,默认为 "support@movieflow.ai" */
emailAddress?: string;
}

View File

@ -23,6 +23,7 @@ import { fetchTabsByCode, HomeTabItem } from "@/api/serversetting";
import H5TopBar from "@/components/layout/H5TopBar"; import H5TopBar from "@/components/layout/H5TopBar";
import { useCallbackModal } from "@/app/layout"; import { useCallbackModal } from "@/app/layout";
import { useDeviceType } from "@/hooks/useDeviceType"; import { useDeviceType } from "@/hooks/useDeviceType";
import Footer from "@/components/common/Footer";
/** 视频预加载系统 - 后台静默运行 */ /** 视频预加载系统 - 后台静默运行 */
function useVideoPreloader() { function useVideoPreloader() {
@ -272,7 +273,7 @@ export function HomePage2() {
<HomeModule4 /> <HomeModule4 />
</LazyLoad> </LazyLoad>
<HomeModule5 /> <HomeModule5 />
<HomeModule6 /> <Footer showEmailLink={true} />
</div> </div>
); );
} }
@ -1602,10 +1603,3 @@ function HomeModule5() {
); );
} }
function HomeModule6() {
return (
<div className="home-module6 flex justify-center items-center w-full h-min text-white/50 text-lg bg-black snap-start">
© 2025 MovieFlow. All rights reserved.
</div>
);
}

View File

@ -10,6 +10,7 @@ import { GradientText } from "@/components/ui/gradient-text";
import { GoogleLoginButton } from "@/components/ui/google-login-button"; import { GoogleLoginButton } from "@/components/ui/google-login-button";
import { Eye, EyeOff } from "lucide-react"; import { Eye, EyeOff } from "lucide-react";
import { isGoogleLoginEnabled } from "@/lib/server-config"; import { isGoogleLoginEnabled } from "@/lib/server-config";
import Footer from "@/components/common/Footer";
export default function Login() { export default function Login() {
const [email, setEmail] = useState(""); const [email, setEmail] = useState("");
@ -314,6 +315,9 @@ export default function Login() {
</form> </form>
</div> </div>
</div> </div>
{/* 页脚 */}
<Footer className="fixed bottom-0" showEmailLink={true} />
</div> </div>
); );
} }