/* Dashboard 共享样式文件 */ /* Chart Color System - 图表颜色系统 */ :root { /* ECharts 图表颜色配置 */ --echarts-primary-gradient: { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: 'var(--chart-primary)' }, { offset: 1, color: 'var(--chart-primary-light)' } ] }; --echarts-success-gradient: { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: 'var(--chart-success)' }, { offset: 1, color: 'var(--chart-success-light)' } ] }; --echarts-warning-gradient: { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: 'var(--chart-warning)' }, { offset: 1, color: 'var(--chart-warning-light)' } ] }; --echarts-error-gradient: { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: 'var(--chart-error)' }, { offset: 1, color: 'var(--chart-error-light)' } ] }; --echarts-info-gradient: { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: 'var(--chart-info)' }, { offset: 1, color: 'var(--chart-info-light)' } ] }; --echarts-secondary-gradient: { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: 'var(--chart-secondary)' }, { offset: 1, color: 'var(--chart-secondary-light)' } ] }; --echarts-accent-gradient: { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: 'var(--chart-accent)' }, { offset: 1, color: 'var(--chart-accent-light)' } ] }; } /* Chart Color Palette - 图表调色板 */ .chart-color-palette { --palette-1: var(--chart-palette-1); --palette-2: var(--chart-palette-2); --palette-3: var(--chart-palette-3); --palette-4: var(--chart-palette-4); --palette-5: var(--chart-palette-5); --palette-6: var(--chart-palette-6); --palette-7: var(--chart-palette-7); --palette-8: var(--chart-palette-8); --palette-9: var(--chart-palette-9); --palette-10: var(--chart-palette-10); } /* Chart Area Gradient - 图表区域渐变 */ .chart-area-gradient-primary { background: linear-gradient(180deg, rgba(57, 150, 174, 0.3) 0%, rgba(57, 150, 174, 0.05) 100% ); } .chart-area-gradient-success { background: linear-gradient(180deg, rgba(82, 196, 26, 0.3) 0%, rgba(82, 196, 26, 0.05) 100% ); } .chart-area-gradient-warning { background: linear-gradient(180deg, rgba(250, 173, 20, 0.3) 0%, rgba(250, 173, 20, 0.05) 100% ); } .chart-area-gradient-error { background: linear-gradient(180deg, rgba(245, 34, 45, 0.3) 0%, rgba(245, 34, 45, 0.05) 100% ); } /* Chart Shadow Effects - 图表阴影效果 */ .chart-shadow-primary { box-shadow: 0 4px 12px rgba(57, 150, 174, 0.15); } .chart-shadow-success { box-shadow: 0 4px 12px rgba(82, 196, 26, 0.15); } .chart-shadow-warning { box-shadow: 0 4px 12px rgba(250, 173, 20, 0.15); } .chart-shadow-error { box-shadow: 0 4px 12px rgba(245, 34, 45, 0.15); } /* Stats Overview Component - 统计概览组件样式 */ .stats-overview-container { margin-top: 8px; .stats-grid { display: grid; padding: 0 16px; grid-template-columns: repeat(6, 1fr); gap: 16px; .stat-card { background: var(--gray-0); border-radius: 8px; padding: 20px; border: 1px solid var(--gray-100); transition: all 0.2s ease; display: flex; flex-direction: row; align-items: center; text-align: left; min-height: 80px; justify-content: flex-start; &:hover { border-color: var(--gray-200); box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.05); } &.primary { .stat-icon { background-color: var(--stats-primary-bg); color: var(--stats-primary-color); } } &.success { .stat-icon { background-color: var(--stats-success-bg); color: var(--stats-success-color); } } &.info { .stat-icon { background-color: var(--stats-info-bg); color: var(--stats-info-color); } } &.warning { .stat-icon { background-color: var(--stats-warning-bg); color: var(--stats-warning-color); } } &.secondary { .stat-icon { background-color: var(--stats-secondary-bg); color: var(--stats-secondary-color); } } &.satisfaction-high { .stat-icon { background-color: var(--stats-success-bg); color: var(--stats-success-color); } } &.satisfaction-medium { .stat-icon { background-color: var(--stats-warning-bg); color: var(--stats-warning-color); } } &.satisfaction-low { .stat-icon { background-color: var(--stats-error-bg); color: var(--stats-error-color); } } .stat-icon { width: 44px; height: 44px; border-radius: 8px; display: flex; align-items: center; justify-content: center; margin-right: 16px; flex-shrink: 0; .icon { width: 20px; height: 20px; } } .stat-content { flex: 1; display: flex; flex-direction: column; align-items: flex-start; .stat-value { font-size: 24px; font-weight: 700; color: var(--gray-1000); line-height: 1.1; margin-bottom: 4px; } .stat-label { font-size: 13px; color: var(--gray-600); font-weight: 500; margin-bottom: 8px; } .stat-trend { display: flex; align-items: center; gap: 4px; margin-top: 4px; .trend-icon { width: 14px; height: 14px; &.up { color: var(--stats-success-color); } &.down { color: var(--stats-error-color); } } .trend-text { font-size: 12px; font-weight: 500; color: var(--gray-600); } } } } } } /* Stats Overview 响应式设计 */ @media (max-width: 1200px) { .stats-overview-container { .stats-grid { grid-template-columns: repeat(3, 1fr); gap: 16px; } } } @media (max-width: 768px) { .stats-overview-container { .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 12px; .stat-card { padding: 16px; min-height: 80px; .stat-icon { width: 36px; height: 36px; margin-right: 12px; .icon { width: 18px; height: 18px; } } .stat-content { .stat-value { font-size: 20px; } .stat-label { font-size: 12px; } } } } } } /* 共享的卡片样式 */ .dashboard-card { background-color: var(--gray-0); border: 1px solid var(--gray-100); border-radius: 8px; transition: all 0.2s ease; height: 100%; display: flex; flex-direction: column; &:hover { border-color: var(--gray-200); box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); } } /* 使用更具体的选择器来覆盖 Ant Design 的默认样式 */ .dashboard-card .ant-card-head { border-bottom: 1px solid var(--gray-200) !important; min-height: 56px !important; padding: 0 20px !important; flex-shrink: 0; background-color: var(--gray-0) !important; } .dashboard-card .ant-card-head-title { font-size: 18px !important; font-weight: 600 !important; color: var(--gray-1000) !important; } .dashboard-card .ant-card-body { padding: 20px !important; flex: 1; overflow: auto; background-color: var(--gray-0) !important; } /* 统计概览样式 */ .stats-overview { margin-bottom: 16px; .ant-statistic { .ant-statistic-title { font-size: 13px; font-weight: 500; color: var(--gray-600); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 8px; } .ant-statistic-content { font-size: 24px; font-weight: 700; color: var(--gray-1000); } } } /* 图表容器样式 */ .chart-container { h4, h5 { margin-bottom: 16px; font-weight: 600; color: var(--gray-1000); } h4 { font-size: 16px; } h5 { font-size: 14px; color: var(--gray-600); } .chart { height: 250px; width: 100%; background-color: var(--gray-0); border-radius: 8px; padding: 10px; border: 1px solid var(--gray-100); } .chart-medium { height: 180px; width: 100%; background-color: var(--gray-0); border-radius: 8px; padding: 8px; border: 1px solid var(--gray-100); } .chart-small { height: 180px; width: 100%; } } /* Ant Design 组件样式覆盖 */ .dashboard-card .ant-statistic-title { color: var(--gray-600) !important; font-weight: 500 !important; } .dashboard-card .ant-statistic-content { color: var(--gray-1000); } .dashboard-card .ant-divider { border-color: var(--gray-200) !important; } .dashboard-card .ant-table { background-color: var(--gray-0); border-radius: 8px; overflow: hidden; .ant-table-thead > tr > th { background-color: var(--gray-25); border-bottom: 1px solid var(--gray-200); font-weight: 600; padding: 12px 16px; font-size: 12px; color: var(--gray-700); text-transform: uppercase; letter-spacing: 0.05em; } .ant-table-tbody > tr { transition: background-color 0.2s ease; > td { border-bottom: 1px solid var(--gray-100); color: var(--gray-1000); padding: 12px 16px; font-weight: 400; } &:hover > td { background-color: var(--gray-25); } } } .dashboard-card .ant-progress { .ant-progress-bg { background-color: var(--main-500) !important; border-radius: 4px; } .ant-progress-text { color: var(--gray-1000) !important; font-weight: 500; font-size: 12px; } } /* 紧凑型统计网格 */ .compact-stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-bottom: 24px; .mini-stat-card { background-color: var(--gray-0); border: 1px solid var(--gray-200); border-radius: 6px; padding: 16px; text-align: center; transition: all 0.2s ease; &:hover { border-color: var(--gray-300); box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); } .mini-stat-value { font-size: 20px; font-weight: 600; color: var(--gray-1000); line-height: 1.2; margin-bottom: 4px; } .mini-stat-label { font-size: 12px; color: var(--gray-600); font-weight: 500; text-transform: uppercase; letter-spacing: 0.025em; } } } /* 紧凑型图表容器 */ .compact-chart-container { background-color: var(--gray-0); border: 1px solid var(--gray-200); border-radius: 6px; padding: 16px; height: 240px; transition: all 0.2s ease; &:hover { border-color: var(--gray-300); box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); } .chart-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; .chart-title { font-size: 14px; font-weight: 600; color: var(--gray-1000); } .chart-subtitle { font-size: 11px; color: var(--gray-600); background-color: var(--gray-100); padding: 2px 6px; border-radius: 4px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.025em; } } .compact-chart { height: 180px; width: 100%; } } /* 排名显示样式 */ .rank-display { display: flex; align-items: center; justify-content: center; .rank-medal { font-size: 20px; } .rank-number { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; background-color: var(--gray-100); border-radius: 50%; font-size: 12px; font-weight: 600; color: var(--gray-600); border: 1px solid var(--gray-200); } } /* 指标值样式 */ .metric-value { font-weight: 500; color: var(--gray-1000); font-size: 14px; } /* 排名样式 */ .dashboard-card .ant-table-tbody > tr.top-rank.first { background-color: #fef3c7; border-radius: 4px; } .dashboard-card .ant-table-tbody > tr.top-rank.second { background-color: var(--gray-100); border-radius: 4px; } .dashboard-card .ant-table-tbody > tr.top-rank.third { background-color: #fed7aa; border-radius: 4px; } /* 响应式设计 */ @media (max-width: 1200px) { .compact-stats-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { .compact-stats-grid { grid-template-columns: repeat(2, 1fr); gap: 8px; .mini-stat-card { padding: 8px; .mini-stat-value { font-size: 16px; } .mini-stat-label { font-size: 10px; } } } .compact-chart-container { height: 180px; padding: 8px; .compact-chart { height: 130px; } .chart-header { margin-bottom: 4px; .chart-title { font-size: 11px; } .chart-subtitle { font-size: 9px; } } } }