diff --git a/.env.development b/.env.development
index 07a7c41..c4b938b 100644
--- a/.env.development
+++ b/.env.development
@@ -1,8 +1,8 @@
-#NEXT_PUBLIC_JAVA_URL = https://77.app.java.auth.qikongjian.com
-#NEXT_PUBLIC_BASE_URL = https://77.smartvideo.py.qikongjian.com
-NEXT_PUBLIC_JAVA_URL = https://test.java.movieflow.ai
-NEXT_PUBLIC_BASE_URL = https://test.video.movieflow.ai
+NEXT_PUBLIC_JAVA_URL = https://77.app.java.auth.qikongjian.com
+NEXT_PUBLIC_BASE_URL = https://77.smartvideo.py.qikongjian.com
+# NEXT_PUBLIC_JAVA_URL = https://test.java.movieflow.ai
+# NEXT_PUBLIC_BASE_URL = https://test.video.movieflow.ai
# 失败率
NEXT_PUBLIC_ERROR_CONFIG = 0.2
\ No newline at end of file
diff --git a/components/layout/dashboard-layout.tsx b/components/layout/dashboard-layout.tsx
index 5e1ad14..0b7e5b9 100644
--- a/components/layout/dashboard-layout.tsx
+++ b/components/layout/dashboard-layout.tsx
@@ -3,6 +3,7 @@
import { useState } from 'react';
import { Sidebar } from './sidebar';
import { TopBar } from './top-bar';
+import { useDeviceType } from '@/hooks/useDeviceType';
interface DashboardLayoutProps {
children: React.ReactNode;
@@ -10,15 +11,38 @@ interface DashboardLayoutProps {
export function DashboardLayout({ children }: DashboardLayoutProps) {
const [sidebarCollapsed, setSidebarCollapsed] = useState(true); // 默认收起状态
+ const { deviceType, isMobile, isTablet, isDesktop } = useDeviceType();
+
+ // 根据设备类型设置布局样式
+ const getLayoutStyles = () => {
+ if (isMobile) {
+ return {
+ left: '0',
+ width: '100vw'
+ };
+ }
+
+ if (isTablet) {
+ return {
+ left: sidebarCollapsed ? '3rem' : '12rem',
+ width: sidebarCollapsed ? 'calc(100vw - 3rem)' : 'calc(100vw - 12rem)'
+ };
+ }
+
+ // 桌面端
+ return {
+ left: sidebarCollapsed ? '4rem' : '16rem',
+ width: sidebarCollapsed ? 'calc(100vw - 4rem)' : 'calc(100vw - 16rem)'
+ };
+ };
return (
-
-
-
+
+ {isDesktop &&
}
+
{children}
diff --git a/components/layout/top-bar.tsx b/components/layout/top-bar.tsx
index b09c22b..7f60d92 100644
--- a/components/layout/top-bar.tsx
+++ b/components/layout/top-bar.tsx
@@ -35,7 +35,7 @@ interface User {
plan_name?: string;
}
-export function TopBar({ collapsed }: { collapsed: boolean }) {
+export function TopBar({ collapsed, isDesktop=true }: { collapsed: boolean, isDesktop?: boolean }) {
const router = useRouter();
const [isOpen, setIsOpen] = React.useState(false);
const menuRef = useRef
(null);
@@ -169,10 +169,10 @@ export function TopBar({ collapsed }: { collapsed: boolean }) {
className="fixed right-0 top-0 h-16 header z-[999]"
style={{
isolation: "isolate",
- left: pathname === "/" ? "0" : (collapsed ? "2.5rem" : "16rem")
+ left: (pathname === "/" || !isDesktop) ? "0" : (collapsed ? "2.5rem" : "16rem")
}}
>
-
+
-
+
{currentUser.username ? currentUser.username.charAt(0) : "MF"}
diff --git a/hooks/useDeviceType.ts b/hooks/useDeviceType.ts
new file mode 100644
index 0000000..a46721f
--- /dev/null
+++ b/hooks/useDeviceType.ts
@@ -0,0 +1,64 @@
+import { useState, useEffect } from 'react';
+
+// 定义设备类型枚举
+export enum DeviceType {
+ MOBILE = 'mobile', // 手机
+ TABLET = 'tablet', // 平板
+ DESKTOP = 'desktop' // 桌面端
+}
+
+// 定义屏幕断点
+const BREAKPOINTS = {
+ MOBILE: 480, // 0-480px 为手机
+ TABLET: 1024, // 481-1024px 为平板
+ DESKTOP: 1025 // 1025px 及以上为桌面端
+};
+
+export function useDeviceType() {
+ const [deviceType, setDeviceType] = useState
(DeviceType.DESKTOP);
+ const [windowSize, setWindowSize] = useState({
+ width: typeof window !== 'undefined' ? window.innerWidth : 0,
+ height: typeof window !== 'undefined' ? window.innerHeight : 0
+ });
+
+ useEffect(() => {
+ /**
+ * 根据窗口宽度判断设备类型
+ */
+ const getDeviceType = (width: number): DeviceType => {
+ if (width <= BREAKPOINTS.MOBILE) return DeviceType.MOBILE;
+ if (width <= BREAKPOINTS.TABLET) return DeviceType.TABLET;
+ return DeviceType.DESKTOP;
+ };
+
+ /**
+ * 处理窗口大小变化
+ */
+ const handleResize = () => {
+ const width = window.innerWidth;
+ const height = window.innerHeight;
+
+ setWindowSize({ width, height });
+ setDeviceType(getDeviceType(width));
+ };
+
+ // 初始化设备类型
+ handleResize();
+
+ // 添加窗口大小变化监听
+ window.addEventListener('resize', handleResize);
+
+ // 清理监听器
+ return () => {
+ window.removeEventListener('resize', handleResize);
+ };
+ }, []);
+
+ return {
+ deviceType,
+ windowSize,
+ isMobile: deviceType === DeviceType.MOBILE,
+ isTablet: deviceType === DeviceType.TABLET,
+ isDesktop: deviceType === DeviceType.DESKTOP
+ };
+}
\ No newline at end of file