/* ==================== 项目复盘模块样式 ==================== */ .project-review-section { width: 100%; background: white; border-radius: 20px; padding: 32px; margin-top: 24px; box-shadow: 0 4px 24px rgba(0, 0, 0, 0.06); .review-section-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 28px; padding-bottom: 20px; border-bottom: 2px solid rgba(0, 122, 255, 0.1); .header-left { flex: 1; .section-title { font-size: 24px; font-weight: 700; color: #1a1a1a; margin: 0 0 8px 0; display: flex; align-items: center; gap: 10px; } .section-subtitle { font-size: 14px; color: #666; margin: 0; line-height: 1.6; } } .header-right { display: flex; gap: 12px; button { padding: 10px 20px; border-radius: 10px; border: none; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; &.generate-review-btn { background: linear-gradient(135deg, #007aff 0%, #0051d5 100%); color: white; &:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0, 122, 255, 0.4); } &:disabled { opacity: 0.6; cursor: not-allowed; } } &.export-review-btn { background: #f0f0f0; color: #333; &:hover { background: #e0e0e0; } } } } } .review-tabs { display: flex; gap: 12px; margin-bottom: 32px; border-bottom: 2px solid #f0f0f0; .review-tab { display: flex; align-items: center; gap: 8px; padding: 14px 24px; border: none; background: transparent; color: #666; font-size: 15px; font-weight: 600; cursor: pointer; position: relative; transition: all 0.3s ease; border-bottom: 3px solid transparent; margin-bottom: -2px; .tab-icon { font-size: 18px; } .tab-label { font-weight: 500; } &:hover { color: #007aff; background: rgba(0, 122, 255, 0.05); } &.active { color: #007aff; border-bottom-color: #007aff; background: rgba(0, 122, 255, 0.08); } } } .review-content-area { min-height: 500px; max-height: 800px; overflow-y: auto; overflow-x: hidden; padding-right: 8px; /* 自定义滚动条 */ &::-webkit-scrollbar { width: 10px; } &::-webkit-scrollbar-track { background: #f5f5f5; border-radius: 5px; } &::-webkit-scrollbar-thumb { background: #c0c0c0; border-radius: 5px; &:hover { background: #a0a0a0; } } } } /* SOP执行数据样式 */ .sop-data-content { .sop-metrics-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; margin-bottom: 40px; .metric-card { background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%); border: 1px solid #e0e0e0; border-radius: 16px; padding: 24px; transition: all 0.3s ease; &:hover { transform: translateY(-4px); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1); border-color: #007aff; } .metric-header { display: flex; align-items: center; gap: 10px; margin-bottom: 16px; .metric-icon { font-size: 24px; } .metric-title { font-size: 14px; font-weight: 600; color: #666; margin: 0; } } .metric-value-large { font-size: 36px; font-weight: 700; color: #1a1a1a; margin-bottom: 12px; .unit { font-size: 18px; font-weight: 400; color: #999; margin-left: 4px; } } .metric-footer { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; font-size: 13px; .metric-label { color: #999; } .metric-benchmark { color: #666; font-weight: 500; } .metric-status { padding: 4px 10px; border-radius: 6px; font-weight: 600; font-size: 12px; &.good { background: #e7f4e4; color: #34c759; } &.warning { background: #fff3cd; color: #ff9500; } } .satisfaction-stars { display: flex; gap: 4px; .star { font-size: 16px; color: #e0e0e0; &.filled { color: #ffc107; } } } } } } .sop-stages-section { margin-bottom: 40px; .subsection-title { font-size: 18px; font-weight: 700; color: #1a1a1a; margin: 0 0 24px 0; padding-bottom: 12px; border-bottom: 2px solid #f0f0f0; } .stages-timeline { display: flex; flex-direction: column; gap: 0; .stage-timeline-item { display: flex; gap: 20px; position: relative; .stage-indicator { display: flex; flex-direction: column; align-items: center; padding-top: 8px; .stage-dot { width: 16px; height: 16px; border-radius: 50%; background: #e0e0e0; border: 3px solid #fff; box-shadow: 0 0 0 2px #e0e0e0; flex-shrink: 0; z-index: 1; } .stage-line { width: 2px; flex: 1; background: #e0e0e0; min-height: 40px; } } &.completed .stage-indicator .stage-dot { background: #34c759; box-shadow: 0 0 0 2px #34c759; } &.ongoing .stage-indicator .stage-dot { background: #007aff; box-shadow: 0 0 0 2px #007aff; animation: pulse 2s infinite; } &.delayed .stage-indicator .stage-dot { background: #ff9500; box-shadow: 0 0 0 2px #ff9500; } .stage-content-card { flex: 1; background: white; border: 1px solid #e0e0e0; border-radius: 12px; padding: 20px; margin-bottom: 20px; transition: all 0.3s ease; &:hover { box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08); border-color: #007aff; } .stage-card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; .stage-name { font-size: 16px; font-weight: 700; color: #1a1a1a; margin: 0; } .stage-status-badge { padding: 6px 14px; border-radius: 20px; font-size: 12px; font-weight: 600; &.completed { background: #e7f4e4; color: #34c759; } &.ongoing { background: #e3f2fd; color: #007aff; } &.delayed { background: #fff3cd; color: #ff9500; } } } .stage-metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 16px; margin-bottom: 12px; .stage-metric-item { display: flex; flex-direction: column; .label { font-size: 13px; color: #999; margin-bottom: 4px; } .value { font-size: 16px; font-weight: 600; color: #1a1a1a; &.warning { color: #ff9500; } &.score { &.excellent { color: #34c759; } &.good { color: #007aff; } &.fair { color: #ff9500; } &.poor { color: #ff3b30; } } } } } .stage-issues { background: #fff3cd; border-left: 4px solid #ff9500; padding: 12px; border-radius: 8px; .issues-label { font-weight: 600; color: #ff9500; margin-right: 8px; } .issues-text { font-size: 14px; color: #666; } } } } } } .sop-charts-section { .charts-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); gap: 24px; .chart-card { background: white; border: 1px solid #e0e0e0; border-radius: 16px; padding: 24px; .chart-title { font-size: 16px; font-weight: 700; color: #1a1a1a; margin: 0 0 20px 0; } .chart-placeholder { .bar-chart { display: flex; justify-content: space-around; align-items: flex-end; gap: 16px; height: 260px; padding: 20px 10px 0; border-left: 2px solid #e0e0e0; border-bottom: 2px solid #e0e0e0; position: relative; .bar-group { flex: 1; display: flex; flex-direction: column-reverse; align-items: center; gap: 8px; height: 100%; position: relative; .bar-label { font-size: 12px; font-weight: 600; color: #666; text-align: center; word-wrap: break-word; max-width: 100%; margin-top: 8px; } .bars { display: flex; gap: 6px; align-items: flex-end; height: calc(100% - 40px); width: 100%; justify-content: center; .bar { flex: 1; max-width: 32px; min-width: 24px; min-height: 30px; border-radius: 8px 8px 0 0; position: relative; display: flex; flex-direction: column; justify-content: flex-start; align-items: center; padding-top: 8px; transition: all 0.3s ease; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); &.planned { background: linear-gradient(to top, #4caf50 0%, #66bb6a 100%); } &.actual { background: linear-gradient(to top, #2196f3 0%, #42a5f5 100%); } .bar-value { font-size: 12px; font-weight: 700; color: white; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); } &:hover { transform: scaleY(1.05) scaleX(1.1); box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2); z-index: 10; } } } } } .chart-legend { display: flex; justify-content: center; gap: 24px; margin-top: 20px; .legend-item { display: flex; align-items: center; gap: 8px; font-size: 13px; color: #666; .legend-color { width: 16px; height: 16px; border-radius: 4px; &.planned { background: linear-gradient(to bottom, #4caf50, #81c784); } &.actual { background: linear-gradient(to bottom, #2196f3, #64b5f6); } } } } &.radar-chart { min-height: 260px; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #f8f9fa 0%, #ffffff 100%); border-radius: 12px; padding: 20px; .radar-info { width: 100%; p { font-size: 16px; color: #666; margin-bottom: 20px; text-align: center; strong { font-size: 24px; font-weight: 700; color: #007aff; display: block; margin-top: 8px; } } .score-items { display: flex; flex-direction: column; gap: 12px; background: white; padding: 16px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); .score-item { display: flex; justify-content: space-between; align-items: center; font-size: 14px; padding: 8px 12px; border-radius: 6px; background: #f8f9fa; transition: all 0.3s ease; &:hover { background: #e9ecef; transform: translateX(4px); } .stage-label { color: #666; font-weight: 500; } .stage-score { font-weight: 700; font-size: 16px; padding: 6px 14px; border-radius: 8px; color: white !important; // 强制白色文字确保可读性 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); // 添加文字阴影增强可读性 &.excellent { background: linear-gradient(135deg, #34c759 0%, #28a745 100%); box-shadow: 0 2px 8px rgba(52, 199, 89, 0.3); } &.good { background: linear-gradient(135deg, #007aff 0%, #0051d5 100%); box-shadow: 0 2px 8px rgba(0, 122, 255, 0.3); } &.average { background: linear-gradient(135deg, #ff9500 0%, #e68600 100%); box-shadow: 0 2px 8px rgba(255, 149, 0, 0.3); } &.poor { background: linear-gradient(135deg, #ff3b30 0%, #d32f2f 100%); box-shadow: 0 2px 8px rgba(255, 59, 48, 0.3); } } } } } } } } } } } @keyframes pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.1); opacity: 0.8; } }