Files
vf_react/src/layouts/config/layoutConfig.js

194 lines
5.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// src/layouts/config/layoutConfig.js
/**
* 布局配置文件
* 集中管理所有布局相关的配置常量
*
* 优势:
* - 配置集中,易于维护和调整
* - 避免魔法数字分散在代码中
* - 支持主题切换和自定义
*/
/**
* Z-Index 层级管理
* 统一管理 z-index避免层级冲突
*
* 层级规则(从低到高):
* - 0-99: 页面内部元素(背景、卡片内部层级)
* - 100-499: 页面级浮动元素(侧边栏、面板)
* - 500-999: 全局固定元素(工具栏、返回顶部)
* - 1000-1499: 导航相关(导航栏、状态栏)
* - 1500-1999: 弹出层下拉菜单、Popover
* - 2000-2999: 模态框(普通 Modal
* - 3000-8999: 特殊模态框(图表全屏、预览)
* - 9000-9999: 全局提示Toast、通知
* - 10000+: 系统级覆盖(第三方组件、客服系统)
*/
export const Z_INDEX = {
// === 页面内部元素 (0-99) ===
BACKGROUND: 0, // 背景层
CARD_CONTENT: 1, // 卡片内容
CARD_OVERLAY: 2, // 卡片覆盖层
// === 页面级浮动元素 (100-499) ===
SIDEBAR: 100, // 全局侧边栏
STICKY_HEADER: 200, // 粘性表头
// === 全局固定元素 (500-999) ===
BACK_TO_TOP: 900, // 返回顶部按钮
AUTH_MODAL_BG: 999, // 认证模态框背景
// === 导航相关 (1000-1499) ===
NAVBAR: 1000, // 顶部导航栏
CONNECTION_STATUS: 1050, // 连接状态栏
PROFILE_ALERT: 1100, // 个人资料提示
// === 弹出层 (1500-1999) ===
DROPDOWN: 1500, // 下拉菜单
POPOVER: 1600, // Popover 弹出
TOOLTIP: 1700, // 工具提示
CITATION: 1800, // 引用标记
// === 模态框 (2000-2999) ===
MODAL: 2000, // 普通模态框
MODAL_OVERLAY: 2001, // 模态框遮罩
STOCK_CHART_MODAL: 2500, // 股票图表模态框
// === 特殊模态框 (3000-8999) ===
FULLSCREEN: 3000, // 全屏模式
IMAGE_PREVIEW: 5000, // 图片预览
// === 全局提示 (9000-9999) ===
NOTIFICATION: 9000, // 通知容器
TOAST: 9500, // Toast 提示
SEARCH_DROPDOWN: 9800, // 搜索下拉框
PERFORMANCE_PANEL: 9900, // 性能面板(开发用)
// === 系统级覆盖 (10000+) ===
KLINE_FULLSCREEN: 10000, // K线图全屏
THIRD_PARTY: 99999, // 第三方组件
BYTEDESK: 999999, // Bytedesk 客服系统
};
/**
* 页面过渡动画配置
* 控制页面切换时的动画效果
*/
export const ANIMATION_CONFIG = {
// 默认配置:淡入淡出 + 轻微上下移动
default: {
initial: { opacity: 0, y: 20 },
animate: { opacity: 1, y: 0 },
exit: { opacity: 0, y: -20 },
transition: { duration: 0.2 }
},
// 快速配置:更短的动画时间
fast: {
initial: { opacity: 0, y: 10 },
animate: { opacity: 1, y: 0 },
exit: { opacity: 0, y: -10 },
transition: { duration: 0.1 }
},
// 慢速配置:更长的动画时间,更柔和
slow: {
initial: { opacity: 0, y: 30 },
animate: { opacity: 1, y: 0 },
exit: { opacity: 0, y: -30 },
transition: { duration: 0.4 }
},
// 无动画:用于禁用动画的场景
none: {
initial: { opacity: 1, y: 0 },
animate: { opacity: 1, y: 0 },
exit: { opacity: 1, y: 0 },
transition: { duration: 0 }
},
// 滑动配置:从右侧滑入
slideRight: {
initial: { opacity: 0, x: 100 },
animate: { opacity: 1, x: 0 },
exit: { opacity: 0, x: -100 },
transition: { duration: 0.3 }
}
};
/**
* 返回顶部按钮配置
*/
export const BACK_TO_TOP_CONFIG = {
// 显示按钮的滚动阈值px
scrollThreshold: 300,
// 按钮位置
position: {
bottom: '80px',
right: {
base: '16px', // 移动端:右边距 16px
md: '32px' // 桌面端:右边距 32px
}
},
// 按钮样式
style: {
size: 'lg',
colorScheme: 'blue',
borderRadius: 'full',
boxShadow: 'lg'
},
// 悬停效果
hover: {
transform: 'translateY(-4px)',
boxShadow: 'xl'
},
// z-index
zIndex: Z_INDEX.BACK_TO_TOP,
// 过渡时间
transition: 'all 0.2s'
};
/**
* 页面加载器配置
*/
export const PAGE_LOADER_CONFIG = {
defaultMessage: '页面加载中...',
minDisplayTime: 300, // 最小显示时间ms避免闪烁
};
/**
* 布局尺寸配置
*/
export const LAYOUT_SIZE = {
navbarHeight: '60px', // 导航栏统一高度
footerHeight: 'auto',
contentMinHeight: 'calc(100vh - 60px)', // 100vh - navbar高度
};
/**
* 响应式断点
* 与 Chakra UI 断点保持一致
*/
export const BREAKPOINTS = {
base: '0px', // 0-479px
sm: '480px', // 480-767px
md: '768px', // 768-991px
lg: '992px', // 992-1279px
xl: '1280px', // 1280-1535px
'2xl': '1536px' // 1536px+
};
export default {
Z_INDEX,
ANIMATION_CONFIG,
BACK_TO_TOP_CONFIG,
PAGE_LOADER_CONFIG,
LAYOUT_SIZE,
BREAKPOINTS
};