Prechádzať zdrojové kódy

feat(designer/dashboard): 添加响应式布局和交互效果样式

- 新增 responsive-layout.scss 处理不同屏幕尺寸的布局优化
- 新增 interactive-effects.scss 提供丰富的交互动画和视觉效果
- 重构 dashboard.scss 整合新样式并增强现有组件视觉效果
- 移除 consultation-order-panel 组件中的多余空行
0235711 1 deň pred
rodič
commit
4d00a47313

+ 614 - 156
src/app/pages/designer/dashboard/dashboard.scss

@@ -3,6 +3,12 @@
 // 导入iOS主题变量
 @use '../ios-theme.scss' as *;
 
+// 导入响应式布局样式
+@import './responsive-layout.scss';
+
+// 导入交互效果样式
+@import './interactive-effects.scss';
+
 .dashboard-container {
   max-width: 1200px;
   margin: 0 auto;
@@ -12,166 +18,369 @@
 }
 
 .dashboard-header {
-  margin-bottom: 30px;
+  margin-bottom: 32px;
+  padding: 24px 0;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.06);
+  position: relative;
+
+  // 添加装饰性渐变线
+  &::after {
+    content: '';
+    position: absolute;
+    bottom: -1px;
+    left: 0;
+    right: 0;
+    height: 2px;
+    background: linear-gradient(90deg, #007aff 0%, #5ac8fa 50%, transparent 100%);
+    opacity: 0.6;
+  }
+
   h1 {
-    font-size: 32px;
-    color: $ios-text-primary;
-    font-weight: $ios-font-weight-semibold;
+    font-size: 36px;
+    color: #1a202c;
+    font-weight: 700;
     font-family: $ios-font-family;
-    margin-bottom: 20px;
+    margin-bottom: 8px;
+    letter-spacing: -0.8px;
+    line-height: 1.2;
+    background: linear-gradient(135deg, #1a202c 0%, #2d3748 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+    background-clip: text;
+    position: relative;
+
+    // 添加微妙的文字阴影效果
+    &::before {
+      content: '';
+      position: absolute;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      background: linear-gradient(135deg, rgba(0, 122, 255, 0.1) 0%, rgba(90, 200, 250, 0.05) 100%);
+      z-index: -1;
+      border-radius: 8px;
+      transform: scale(1.05);
+      opacity: 0;
+      transition: opacity 0.3s ease;
+    }
+
+    &:hover::before {
+      opacity: 1;
+    }
+  }
+
+  .subtitle {
+    color: #64748b;
+    font-size: 16px;
+    font-weight: 500;
+    margin-top: 8px;
+    letter-spacing: 0.2px;
   }
 }
 
-/* 顶部导航样式 - 重写为白色背景蓝色过渡效果 */
+/* 顶部导航样式 - 现代化升级 */
 .dashboard-nav {
   display: flex;
-  background-color: #ffffff; /* 设置底色为白色 */
-  border-radius: 12px; /* 增大圆角 */
-  padding: 4px; /* 保留内边距 */
-  margin-bottom: 20px;
-  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); /* 添加轻微阴影 */
-  border: 1px solid #f0f0f0; /* 添加细微边框 */
+  background: linear-gradient(135deg, #ffffff 0%, #fafbfc 100%);
+  border-radius: 16px;
+  padding: 6px;
+  margin-bottom: 24px;
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08), 0 1px 3px rgba(0, 0, 0, 0.05);
+  border: 1px solid rgba(0, 0, 0, 0.06);
+  position: relative;
+  overflow: hidden;
+
+  // 添加背景光晕效果
+  &::before {
+    content: '';
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background: linear-gradient(135deg, rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0.4) 100%);
+    pointer-events: none;
+  }
   
   .nav-btn {
     flex: 1;
-    padding: 14px 24px; /* 增加垂直内边距 */
+    padding: 16px 24px;
     border: none;
-    border-radius: 10px; /* 增大圆角 */
+    border-radius: 12px;
     background-color: transparent;
-    color: #666666; /* 默认文字颜色 */
-    font-size: 16px; /* 略微增大字体 */
-    font-weight: 500;
+    color: #64748b;
+    font-size: 16px;
+    font-weight: 600;
     cursor: pointer;
     transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
     font-family: $ios-font-family;
     position: relative;
     overflow: hidden;
-    z-index: 1;
+    z-index: 2;
     text-align: center;
+    letter-spacing: 0.3px;
     
-    // 按钮点击效果
-    &:active {
-      transform: scale(0.97);
+    // 悬停效果
+    &::before {
+      content: '';
+      position: absolute;
+      top: 0;
+      left: -100%;
+      width: 100%;
+      height: 100%;
+      background: linear-gradient(90deg, transparent, rgba(0, 122, 255, 0.1), transparent);
+      transition: left 0.4s;
     }
-    
-    // 活动状态样式
-    &.active {
-      color: #ffffff; /* 活动状态文字为白色 */
-      font-weight: 600;
+
+    &:hover:not(.active) {
+      color: #374151;
+      background: rgba(255, 255, 255, 0.8);
+      transform: translateY(-1px);
+      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
       
-      // 蓝色背景动画效果
       &::before {
+        left: 100%;
+      }
+    }
+
+    &.active {
+      background: linear-gradient(135deg, #007aff 0%, #5ac8fa 100%);
+      color: white;
+      transform: translateY(-2px);
+      box-shadow: 0 6px 20px rgba(0, 122, 255, 0.3), 0 2px 4px rgba(0, 122, 255, 0.2);
+      font-weight: 700;
+
+      // 活跃状态的光晕效果
+      &::after {
         content: '';
         position: absolute;
-        top: 0;
-        left: 0;
-        right: 0;
-        bottom: 0;
-        background-color: #007aff; /* 设置为iOS蓝色 */
-        border-radius: 10px;
-        box-shadow: 0 4px 12px rgba(0, 122, 255, 0.3); /* 蓝色阴影效果 */
+        top: -2px;
+        left: -2px;
+        right: -2px;
+        bottom: -2px;
+        background: linear-gradient(135deg, #007aff 0%, #5ac8fa 100%);
+        border-radius: 14px;
         z-index: -1;
-        animation: buttonSlideIn 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;
+        opacity: 0.3;
+        filter: blur(6px);
       }
     }
-    
-    // 悬停效果
-    &:hover:not(.active) {
-      background-color: rgba(0, 122, 255, 0.05); /* 轻微蓝色背景 */
-      color: #007aff; /* 文字变为蓝色 */
-    }
-  }
-}
 
-// 按钮切换动画 - 优化效果
-@keyframes buttonSlideIn {
-  0% {
-    transform: translateX(100%);
-    opacity: 0;
-  }
-  100% {
-    transform: translateX(0);
-    opacity: 1;
+    &:active {
+      transform: translateY(-1px);
+    }
   }
 }
-
+    
 .dashboard-main {
   display: grid;
   grid-template-columns: 1fr;
-  gap: 24px;
+  gap: 32px;
+  padding: 0 4px; // 添加轻微的水平内边距
 }
 
-/* 视图切换按钮样式 */
+/* 视图切换按钮样式 - 现代化升级 */
 .view-toggle {
   display: flex;
   justify-content: flex-end;
-  margin-bottom: 8px;
+  margin-bottom: 16px;
+  gap: 8px;
 
   .toggle-btn {
-    background: $ios-card-background;
-    color: $ios-text-primary;
-    border: 1px solid $ios-border;
-    border-radius: $ios-radius-md;
-    padding: 8px 14px;
+    background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+    color: #64748b;
+    border: 1px solid rgba(0, 0, 0, 0.08);
+    border-radius: 12px;
+    padding: 12px 20px;
     cursor: pointer;
     font-family: $ios-font-family;
-    transition: all .2s ease;
+    font-weight: 600;
+    font-size: 14px;
+    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+    position: relative;
+    overflow: hidden;
+    display: flex;
+    align-items: center;
+    gap: 8px;
+    letter-spacing: 0.3px;
+    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
 
-    &:hover {
-      background-color: color-mix(in srgb, $ios-background-secondary 70%, white);
+    // 图标样式
+    ion-icon {
+      font-size: 18px;
+      transition: all 0.3s ease;
+    }
+
+    // 悬停效果
+    &::before {
+      content: '';
+      position: absolute;
+      top: 0;
+      left: -100%;
+      width: 100%;
+      height: 100%;
+      background: linear-gradient(90deg, transparent, rgba(0, 122, 255, 0.1), transparent);
+      transition: left 0.4s;
+    }
+
+    &:hover:not(.active) {
+      color: #374151;
+      background: linear-gradient(135deg, #f1f5f9 0%, #e2e8f0 100%);
+      transform: translateY(-2px);
+      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+      
+      &::before {
+        left: 100%;
+      }
+      
+      ion-icon {
+        transform: scale(1.1);
+      }
+    }
+
+    &.active {
+      background: linear-gradient(135deg, #007aff 0%, #5ac8fa 100%);
+      color: white;
+      border-color: transparent;
+      box-shadow: 0 4px 16px rgba(0, 122, 255, 0.3), 0 2px 4px rgba(0, 122, 255, 0.2);
+      transform: translateY(-2px);
+      
+      ion-icon {
+        transform: scale(1.1);
+        filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.2));
+      }
+
+      // 活跃状态的光晕效果
+      &::after {
+        content: '';
+        position: absolute;
+        top: -2px;
+        left: -2px;
+        right: -2px;
+        bottom: -2px;
+        background: linear-gradient(135deg, #007aff 0%, #5ac8fa 100%);
+        border-radius: 14px;
+        z-index: -1;
+        opacity: 0.3;
+        filter: blur(6px);
+      }
+    }
+
+    &:active {
+      transform: translateY(-1px);
     }
   }
 }
 
-/* 列表视图样式 */
+/* 列表视图样式 - 现代化升级 */
 .list-section {
-  background: $ios-card-background;
-  border-radius: $ios-radius-lg;
-  border: 1px solid $ios-border;
-  box-shadow: $ios-shadow-card;
+  background: linear-gradient(135deg, #ffffff 0%, #fafbfc 100%);
+  border-radius: 16px;
+  border: 1px solid rgba(0, 0, 0, 0.06);
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08), 0 1px 3px rgba(0, 0, 0, 0.05);
   overflow: hidden;
+  backdrop-filter: blur(10px);
 
   .list-header {
     display: grid;
     grid-template-columns: 120px 1.2fr 1.2fr 120px 180px 120px 160px;
-    padding: 12px 16px;
-    background: $ios-background-secondary;
-    color: $ios-text-secondary;
-    font-weight: $ios-font-weight-medium;
-    border-bottom: 1px solid $ios-border;
+    padding: 16px 20px;
+    background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
+    color: #64748b;
+    font-weight: 600;
+    font-size: 13px;
+    letter-spacing: 0.5px;
+    text-transform: uppercase;
+    border-bottom: 1px solid rgba(0, 0, 0, 0.08);
+    position: sticky;
+    top: 0;
+    z-index: 10;
   }
 
   .list-body {
     .list-row {
       display: grid;
       grid-template-columns: 120px 1.2fr 1.2fr 120px 180px 120px 160px;
-      padding: 12px 16px;
+      padding: 16px 20px;
       align-items: center;
-      border-bottom: 1px solid $ios-border;
-      transition: background .2s ease;
+      border-bottom: 1px solid rgba(0, 0, 0, 0.04);
+      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+      position: relative;
+      
+      // 添加微妙的悬停效果
+      &::before {
+        content: '';
+        position: absolute;
+        left: 0;
+        top: 0;
+        bottom: 0;
+        width: 4px;
+        background: linear-gradient(135deg, #007aff 0%, #5ac8fa 100%);
+        transform: scaleY(0);
+        transition: transform 0.3s ease;
+      }
 
       &:hover {
-        background: rgba(0,0,0,0.02);
+        background: linear-gradient(135deg, rgba(0, 122, 255, 0.02) 0%, rgba(90, 200, 250, 0.01) 100%);
+        transform: translateX(4px);
+        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+        
+        &::before {
+          transform: scaleY(1);
+        }
+      }
+      
+      &:last-child {
+        border-bottom: none;
       }
 
       .col {
         font-size: 14px;
-        color: $ios-text-primary;
+        color: #374151;
+        font-weight: 500;
       }
 
       .actions-col {
         display: flex;
-        gap: 10px;
+        gap: 12px;
+        
         .btn-link {
           background: transparent;
           border: none;
           color: #007aff;
           cursor: pointer;
-          padding: 6px 8px;
-          border-radius: $ios-radius-sm;
+          padding: 8px 12px;
+          border-radius: 8px;
+          font-weight: 600;
+          font-size: 13px;
+          transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+          position: relative;
+          overflow: hidden;
+          
+          &::before {
+            content: '';
+            position: absolute;
+            top: 0;
+            left: -100%;
+            width: 100%;
+            height: 100%;
+            background: linear-gradient(90deg, transparent, rgba(0, 122, 255, 0.1), transparent);
+            transition: left 0.4s;
+          }
 
           &:hover {
-            background: rgba(0,122,255,0.08);
+            background: rgba(0, 122, 255, 0.08);
+            transform: translateY(-1px);
+            box-shadow: 0 2px 8px rgba(0, 122, 255, 0.2);
+            
+            &::before {
+              left: 100%;
+            }
+          }
+          
+          &:active {
+            transform: translateY(0);
           }
         }
       }
@@ -179,192 +388,441 @@
       .urgency-col {
         display: flex;
         align-items: center;
-        gap: 8px;
+        gap: 10px;
+        
         .urgency-dot {
-          width: 10px;
-          height: 10px;
+          width: 12px;
+          height: 12px;
           border-radius: 50%;
           display: inline-block;
+          box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
+          position: relative;
+          
+          // 添加脉冲动画效果
+          &::after {
+            content: '';
+            position: absolute;
+            top: -2px;
+            left: -2px;
+            right: -2px;
+            bottom: -2px;
+            border-radius: 50%;
+            background: inherit;
+            opacity: 0.3;
+            animation: pulse 2s infinite;
+          }
         }
+        
         .urgency-text {
-          font-weight: $ios-font-weight-medium;
+          font-weight: 600;
+          font-size: 13px;
+          letter-spacing: 0.3px;
         }
       }
 
-      /* 紧急度颜色 */
-      .urgency-overdue { background: $ios-danger; }
-      .urgency-high { background: #ff9500; }
-      .urgency-medium { background: #ffcc00; }
-      .urgency-low { background: #34c759; }
+      /* 紧急度颜色 - 现代化升级 */
+      .urgency-overdue { 
+        background: linear-gradient(135deg, #ef4444 0%, #f87171 100%);
+        
+        .urgency-text {
+          color: #dc2626;
+        }
+      }
+      
+      .urgency-high { 
+        background: linear-gradient(135deg, #f59e0b 0%, #fbbf24 100%);
+        
+        .urgency-text {
+          color: #d97706;
+        }
+      }
+      
+      .urgency-medium { 
+        background: linear-gradient(135deg, #eab308 0%, #facc15 100%);
+        
+        .urgency-text {
+          color: #ca8a04;
+        }
+      }
+      
+      .urgency-low { 
+        background: linear-gradient(135deg, #22c55e 0%, #4ade80 100%);
+        
+        .urgency-text {
+          color: #16a34a;
+        }
+      }
     }
   }
 }
 
-/* 核心卡片区域样式 */
+// 脉冲动画
+@keyframes pulse {
+  0% {
+    transform: scale(1);
+    opacity: 0.3;
+  }
+  50% {
+    transform: scale(1.2);
+    opacity: 0.1;
+  }
+  100% {
+    transform: scale(1);
+    opacity: 0.3;
+  }
+}
+
+/* 核心卡片区域样式 - 现代化设计 */
 .core-cards-section {
-  margin-bottom: 30px;
+  margin-bottom: 32px;
   
   .cards-grid {
     display: grid;
-    grid-template-columns: repeat(3, 1fr);
-    gap: 20px;
+    grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
+    gap: 24px;
+    
+    @media (max-width: 1400px) {
+      grid-template-columns: repeat(2, 1fr);
+      gap: 22px;
+    }
     
-    @media (max-width: 1024px) {
+    @media (max-width: 1200px) {
       grid-template-columns: repeat(2, 1fr);
+      gap: 20px;
     }
     
     @media (max-width: 768px) {
       grid-template-columns: 1fr;
+      gap: 16px;
+    }
+    
+    @media (max-width: 480px) {
+      gap: 12px;
     }
   }
 }
 
-/* 核心卡片基础样式 */
+/* 核心卡片基础样式 - 现代化升级 */
 .core-card {
-  background: $ios-card-background;
-  border-radius: $ios-radius-lg;
-  padding: 20px;
-  box-shadow: $ios-shadow-card;
-  transition: all 0.3s ease;
-  border: 1px solid $ios-border;
+  background: linear-gradient(135deg, #ffffff 0%, #fafbfc 100%);
+  border-radius: 16px;
+  padding: 24px;
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08), 0 1px 3px rgba(0, 0, 0, 0.05);
+  transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+  border: 1px solid rgba(255, 255, 255, 0.8);
   display: flex;
   flex-direction: column;
   height: 100%;
+  position: relative;
+  overflow: hidden;
+  
+  // 添加微妙的背景纹理
+  &::before {
+    content: '';
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    height: 4px;
+    background: linear-gradient(90deg, #007aff 0%, #5ac8fa 50%, #34c759 100%);
+    opacity: 0;
+    transition: opacity 0.3s ease;
+  }
   
   &:hover {
-    box-shadow: $ios-shadow-lg;
-    transform: translateY(-2px);
+    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);
+    transform: translateY(-4px) scale(1.02);
+    border-color: rgba(0, 122, 255, 0.2);
+    
+    &::before {
+      opacity: 1;
+    }
+  }
+  
+  // 紧急任务卡片特殊样式
+  &.urgent-card {
+    background: linear-gradient(135deg, #fff5f5 0%, #fef2f2 100%);
+    border-color: rgba(239, 68, 68, 0.2);
+    
+    &::before {
+      background: linear-gradient(90deg, #ef4444 0%, #f87171 100%);
+      opacity: 1;
+    }
+    
+    &:hover {
+      border-color: rgba(239, 68, 68, 0.3);
+      box-shadow: 0 8px 32px rgba(239, 68, 68, 0.15), 0 2px 8px rgba(239, 68, 68, 0.1);
+    }
+  }
+  
+  // 工作量卡片特殊样式
+  &.workload-card {
+    background: linear-gradient(135deg, #f0fdf4 0%, #f7fee7 100%);
+    border-color: rgba(34, 197, 94, 0.2);
+    
+    &::before {
+      background: linear-gradient(90deg, #22c55e 0%, #4ade80 100%);
+      opacity: 0.8;
+    }
+    
+    &:hover {
+      border-color: rgba(34, 197, 94, 0.3);
+      box-shadow: 0 8px 32px rgba(34, 197, 94, 0.15), 0 2px 8px rgba(34, 197, 94, 0.1);
+    }
   }
   
   .card-header {
     display: flex;
     justify-content: space-between;
     align-items: flex-start;
-    margin-bottom: 16px;
+    margin-bottom: 20px;
+    position: relative;
+    z-index: 1;
     
     .card-badge {
-      padding: 4px 12px;
-      border-radius: $ios-radius-full;
-      font-size: 12px;
-      font-weight: $ios-font-weight-medium;
+      padding: 6px 14px;
+      border-radius: 20px;
+      font-size: 11px;
+      font-weight: 600;
+      letter-spacing: 0.5px;
+      text-transform: uppercase;
       color: $ios-text-secondary;
-      background-color: $ios-background-secondary;
+      background: rgba(0, 0, 0, 0.05);
+      backdrop-filter: blur(10px);
+      border: 1px solid rgba(255, 255, 255, 0.2);
       
       &.urgent {
-        background-color: rgba(255, 59, 48, 0.1);
-        color: $ios-danger;
-        border: 1px solid $ios-danger;
+        background: linear-gradient(135deg, rgba(239, 68, 68, 0.15) 0%, rgba(248, 113, 113, 0.1) 100%);
+        color: #dc2626;
+        border-color: rgba(239, 68, 68, 0.3);
+        box-shadow: 0 2px 8px rgba(239, 68, 68, 0.2);
       }
       
       &.workload {
-        background-color: rgba(52, 199, 89, 0.1);
-        color: $ios-success;
-        border: 1px solid $ios-success;
+        background: linear-gradient(135deg, rgba(34, 197, 94, 0.15) 0%, rgba(74, 222, 128, 0.1) 100%);
+        color: #16a34a;
+        border-color: rgba(34, 197, 94, 0.3);
+        box-shadow: 0 2px 8px rgba(34, 197, 94, 0.2);
       }
       
       &.overdue {
-        background-color: rgba(255, 149, 0, 0.1);
-        color: $ios-warning;
-        border: 1px solid $ios-warning;
+        background: linear-gradient(135deg, rgba(245, 158, 11, 0.15) 0%, rgba(251, 191, 36, 0.1) 100%);
+        color: #d97706;
+        border-color: rgba(245, 158, 11, 0.3);
+        box-shadow: 0 2px 8px rgba(245, 158, 11, 0.2);
       }
     }
     
     h3 {
-      font-size: 17px;
+      font-size: 18px;
+      font-weight: 600;
       color: $ios-text-primary;
       margin: 0;
       font-family: $ios-font-family;
       flex: 1;
-      margin-right: 10px;
+      margin-right: 12px;
+      line-height: 1.4;
+      letter-spacing: -0.2px;
     }
   }
   
   .card-content {
     flex: 1;
-    margin-bottom: 16px;
+    margin-bottom: 20px;
     
-    .project-name,
-    .deadline,
-    .countdown,
-    .workload-status {
-      font-size: 14px;
-      color: $ios-text-secondary;
-      margin: 6px 0;
+    .project-name {
+      font-size: 15px;
+      color: #6b7280;
+      margin: 8px 0;
+      font-weight: 500;
+      display: flex;
+      align-items: center;
+      
+      &::before {
+        content: '📁';
+        margin-right: 8px;
+        font-size: 14px;
+      }
     }
     
-    .deadline.overdue {
-      color: $ios-danger;
+    .deadline {
+      font-size: 14px;
+      color: #9ca3af;
+      margin: 8px 0;
+      display: flex;
+      align-items: center;
+      
+      &::before {
+        content: '📅';
+        margin-right: 8px;
+        font-size: 13px;
+      }
+      
+      &.overdue {
+        color: #dc2626;
+        font-weight: 600;
+        
+        &::before {
+          content: '⚠️';
+        }
+      }
     }
     
     .countdown {
-      color: $ios-warning;
-      font-weight: $ios-font-weight-medium;
+      font-size: 14px;
+      color: #f59e0b;
+      font-weight: 600;
+      margin: 8px 0;
+      display: flex;
+      align-items: center;
+      
+      &::before {
+        content: '⏰';
+        margin-right: 8px;
+        font-size: 13px;
+      }
+    }
+    
+    .workload-status {
+      font-size: 15px;
+      color: #6b7280;
+      margin: 8px 0;
+      font-weight: 500;
     }
   }
   
   .card-actions {
     display: flex;
-    gap: 10px;
+    gap: 12px;
     
     button {
-      padding: 8px 16px;
+      padding: 12px 20px;
       border: none;
-      border-radius: $ios-radius-md;
+      border-radius: 12px;
       font-size: 14px;
+      font-weight: 600;
       cursor: pointer;
-      transition: all 0.3s ease;
-      font-weight: $ios-font-weight-medium;
+      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
       font-family: $ios-font-family;
       flex: 1;
+      position: relative;
+      overflow: hidden;
+      
+      &::before {
+        content: '';
+        position: absolute;
+        top: 0;
+        left: -100%;
+        width: 100%;
+        height: 100%;
+        background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
+        transition: left 0.5s;
+      }
+      
+      &:hover::before {
+        left: 100%;
+      }
     }
     
     .btn-primary {
-      background-color: $ios-primary;
+      background: linear-gradient(135deg, #007aff 0%, #5ac8fa 100%);
       color: white;
+      box-shadow: 0 4px 12px rgba(0, 122, 255, 0.3);
       
       &:hover {
-        background-color: color-mix(in srgb, $ios-primary 90%, black);
-        transform: translateY(-1px);
-        box-shadow: $ios-shadow-md;
+        background: linear-gradient(135deg, #0056cc 0%, #4aa3d9 100%);
+        transform: translateY(-2px);
+        box-shadow: 0 6px 20px rgba(0, 122, 255, 0.4);
+      }
+      
+      &:active {
+        transform: translateY(0);
       }
     }
     
     .btn-secondary {
-      background-color: $ios-background-secondary;
+      background: rgba(0, 0, 0, 0.05);
       color: $ios-text-primary;
-      border: 1px solid $ios-border;
+      border: 1px solid rgba(0, 0, 0, 0.1);
+      backdrop-filter: blur(10px);
       
       &:hover {
-        background-color: color-mix(in srgb, $ios-background-secondary 70%, white);
+        background: rgba(0, 0, 0, 0.08);
+        border-color: rgba(0, 0, 0, 0.15);
+        transform: translateY(-1px);
+        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
       }
     }
   }
 }
 
-/* 工作量卡片特定样式 */
+/* 工作量卡片特定样式 - 现代化升级 */
 .workload-card {
   .workload-indicator {
     display: flex;
     justify-content: center;
     align-items: center;
-    margin: 20px 0;
+    margin: 24px 0;
   }
   
   .workload-circle {
-    width: 120px;
-    height: 120px;
+    width: 140px;
+    height: 140px;
     border-radius: 50%;
     display: flex;
     justify-content: center;
     align-items: center;
-    box-shadow: $ios-shadow-md;
-    transition: all 0.3s ease;
+    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12), inset 0 2px 4px rgba(255, 255, 255, 0.8);
+    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+    position: relative;
+    background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+    border: 3px solid transparent;
+    
+    // 动态边框效果
+    &::before {
+      content: '';
+      position: absolute;
+      top: -3px;
+      left: -3px;
+      right: -3px;
+      bottom: -3px;
+      border-radius: 50%;
+      background: linear-gradient(135deg, #22c55e 0%, #4ade80 50%, #10b981 100%);
+      z-index: -1;
+      opacity: 0.8;
+    }
+    
+    // 内部光晕效果
+    &::after {
+      content: '';
+      position: absolute;
+      top: 10%;
+      left: 10%;
+      right: 10%;
+      bottom: 10%;
+      border-radius: 50%;
+      background: radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.6) 0%, transparent 50%);
+      pointer-events: none;
+    }
+    
+    &:hover {
+      transform: scale(1.05);
+      box-shadow: 0 12px 32px rgba(0, 0, 0, 0.15), inset 0 2px 4px rgba(255, 255, 255, 0.9);
+      
+      &::before {
+        opacity: 1;
+        background: linear-gradient(135deg, #16a34a 0%, #22c55e 50%, #4ade80 100%);
+      }
+    }
     
     .workload-percentage {
-      font-size: 28px;
-      font-weight: $ios-font-weight-bold;
-      color: white;
+      font-size: 32px;
+      font-weight: 700;
+      color: #1f2937;
       font-family: $ios-font-family;
+      text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
+      position: relative;
+      z-index: 1;
     }
   }
 }

+ 153 - 0
src/app/pages/designer/dashboard/interactive-effects.scss

@@ -0,0 +1,153 @@
+// 交互效果样式
+// 全局交互动画变量
+:root {
+  --transition-fast: 0.15s ease-out;
+  --transition-normal: 0.25s ease-out;
+  --transition-slow: 0.35s ease-out;
+}
+
+// 卡片交互效果增强
+.core-card {
+  transition: all var(--transition-normal);
+  
+  &:hover {
+    transform: translateY(-2px) scale(1.02);
+    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12), 0 2px 8px rgba(0, 0, 0, 0.08);
+  }
+  
+  &:active {
+    transform: translateY(0) scale(0.98);
+    transition: all var(--transition-fast);
+  }
+}
+
+// 按钮交互效果
+.nav-btn, .view-toggle button, .add-shift-btn {
+  transition: all var(--transition-normal);
+  position: relative;
+  overflow: hidden;
+  
+  &::before {
+    content: '';
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    width: 0;
+    height: 0;
+    background: rgba(255, 255, 255, 0.3);
+    border-radius: 50%;
+    transform: translate(-50%, -50%);
+    transition: width var(--transition-normal), height var(--transition-normal);
+  }
+  
+  &:hover::before {
+    width: 300px;
+    height: 300px;
+  }
+  
+  &:active {
+    transform: scale(0.95);
+  }
+}
+
+// 列表行交互效果
+.list-row {
+  transition: all var(--transition-normal);
+  
+  &:hover {
+    background: rgba(0, 122, 255, 0.05);
+    transform: translateX(4px);
+    box-shadow: 0 2px 8px rgba(0, 122, 255, 0.1);
+  }
+}
+
+// 工作量圆环特殊效果
+.workload-ring {
+  transition: all var(--transition-normal);
+  
+  &:hover {
+    transform: scale(1.05);
+    filter: brightness(1.1);
+  }
+}
+
+// 紧急任务卡片特殊效果
+.urgent-task {
+  position: relative;
+  
+  &::after {
+    content: '';
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background: linear-gradient(45deg, transparent 30%, rgba(255, 59, 48, 0.1) 50%, transparent 70%);
+    opacity: 0;
+    transition: opacity var(--transition-normal);
+  }
+  
+  &:hover::after {
+    opacity: 1;
+  }
+}
+
+// 加载状态效果
+.loading {
+  position: relative;
+  
+  &::before {
+    content: '';
+    position: absolute;
+    top: 0;
+    left: -100%;
+    width: 100%;
+    height: 100%;
+    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
+    animation: shimmer 1.5s infinite;
+  }
+}
+
+@keyframes shimmer {
+  0% { left: -100%; }
+  100% { left: 100%; }
+}
+
+// 成功状态动画
+.success-state {
+  animation: successPulse 0.6s ease-out;
+}
+
+@keyframes successPulse {
+  0% { transform: scale(1); }
+  50% { transform: scale(1.05); }
+  100% { transform: scale(1); }
+}
+
+// 错误状态动画
+.error-state {
+  animation: errorShake 0.5s ease-out;
+}
+
+@keyframes errorShake {
+  0%, 100% { transform: translateX(0); }
+  25% { transform: translateX(-4px); }
+  75% { transform: translateX(4px); }
+}
+
+// 微交互反馈
+.interactive-element {
+  &:focus-visible {
+    outline: 2px solid rgba(0, 122, 255, 0.6);
+    outline-offset: 2px;
+  }
+}
+
+// 减少动画偏好设置支持
+@media (prefers-reduced-motion: reduce) {
+  * {
+    animation-duration: 0.01ms !important;
+    animation-iteration-count: 1 !important;
+    transition-duration: 0.01ms !important;
+  }
+}

+ 318 - 0
src/app/pages/designer/dashboard/responsive-layout.scss

@@ -0,0 +1,318 @@
+/* 响应式布局优化 - 现代化间距和对齐 */
+
+/* 大屏幕优化 (1400px+) */
+@media (min-width: 1400px) {
+  .dashboard-container {
+    max-width: 1400px;
+    margin: 0 auto;
+    padding: 32px 24px;
+  }
+  
+  .dashboard-main {
+    gap: 40px;
+  }
+  
+  .core-cards-section .cards-grid {
+    grid-template-columns: repeat(3, 1fr);
+    gap: 28px;
+  }
+}
+
+/* 中大屏幕 (1200px - 1399px) */
+@media (max-width: 1399px) and (min-width: 1200px) {
+  .dashboard-container {
+    padding: 24px 20px;
+  }
+  
+  .dashboard-main {
+    gap: 32px;
+  }
+}
+
+/* 中等屏幕 (768px - 1199px) */
+@media (max-width: 1199px) and (min-width: 768px) {
+  .dashboard-container {
+    padding: 20px 16px;
+  }
+  
+  .dashboard-header {
+    margin-bottom: 24px;
+    padding: 16px 0;
+    
+    h1 {
+      font-size: 28px;
+      letter-spacing: -0.6px;
+    }
+  }
+  
+  .dashboard-nav {
+    margin-bottom: 20px;
+    
+    .nav-btn {
+      padding: 14px 20px;
+      font-size: 15px;
+    }
+  }
+  
+  .view-toggle {
+    margin-bottom: 12px;
+    
+    .toggle-btn {
+      padding: 10px 16px;
+      font-size: 13px;
+    }
+  }
+  
+  .dashboard-main {
+    gap: 28px;
+  }
+}
+
+/* 小屏幕 (481px - 767px) */
+@media (max-width: 767px) and (min-width: 481px) {
+  .dashboard-container {
+    padding: 16px 12px;
+  }
+  
+  .dashboard-header {
+    margin-bottom: 20px;
+    padding: 12px 0;
+    
+    h1 {
+      font-size: 24px;
+      letter-spacing: -0.4px;
+    }
+    
+    .subtitle {
+      font-size: 14px;
+    }
+  }
+  
+  .dashboard-nav {
+    margin-bottom: 16px;
+    padding: 4px;
+    
+    .nav-btn {
+      padding: 12px 16px;
+      font-size: 14px;
+      letter-spacing: 0.2px;
+    }
+  }
+  
+  .view-toggle {
+    margin-bottom: 12px;
+    gap: 6px;
+    
+    .toggle-btn {
+      padding: 8px 12px;
+      font-size: 12px;
+      border-radius: 8px;
+    }
+  }
+  
+  .dashboard-main {
+    gap: 24px;
+    padding: 0 2px;
+  }
+  
+  .list-section {
+    .list-header {
+      padding: 12px 16px;
+      font-size: 12px;
+      grid-template-columns: 100px 1fr 1fr 100px 140px 100px 120px;
+    }
+    
+    .list-body .list-row {
+      padding: 12px 16px;
+      grid-template-columns: 100px 1fr 1fr 100px 140px 100px 120px;
+      
+      .col {
+        font-size: 13px;
+      }
+      
+      .actions-col {
+        gap: 8px;
+        
+        .btn-link {
+          padding: 6px 10px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+  
+  .core-card {
+    padding: 20px;
+    border-radius: 12px;
+    
+    .card-header {
+      margin-bottom: 16px;
+      
+      .card-title {
+        font-size: 16px;
+      }
+      
+      .card-badge {
+        padding: 4px 8px;
+        font-size: 11px;
+      }
+    }
+    
+    .card-content {
+      gap: 12px;
+      
+      .project-name {
+        font-size: 14px;
+      }
+      
+      .deadline, .countdown {
+        font-size: 12px;
+      }
+    }
+  }
+}
+
+/* 超小屏幕 (480px及以下) */
+@media (max-width: 480px) {
+  .dashboard-container {
+    padding: 12px 8px;
+  }
+  
+  .dashboard-header {
+    margin-bottom: 16px;
+    padding: 8px 0;
+    
+    h1 {
+      font-size: 20px;
+      letter-spacing: -0.3px;
+    }
+    
+    .subtitle {
+      font-size: 13px;
+    }
+  }
+  
+  .dashboard-nav {
+    margin-bottom: 12px;
+    padding: 3px;
+    
+    .nav-btn {
+      padding: 10px 12px;
+      font-size: 13px;
+    }
+  }
+  
+  .view-toggle {
+    margin-bottom: 8px;
+    gap: 4px;
+    
+    .toggle-btn {
+      padding: 6px 10px;
+      font-size: 11px;
+      border-radius: 6px;
+    }
+  }
+  
+  .dashboard-main {
+    gap: 20px;
+    padding: 0 1px;
+  }
+  
+  .core-card {
+    padding: 16px;
+    border-radius: 10px;
+    
+    .card-header {
+      margin-bottom: 12px;
+      
+      .card-title {
+        font-size: 15px;
+      }
+      
+      .card-badge {
+        padding: 3px 6px;
+        font-size: 10px;
+      }
+    }
+    
+    .card-content {
+      gap: 10px;
+      
+      .project-name {
+        font-size: 13px;
+      }
+      
+      .deadline, .countdown {
+        font-size: 11px;
+      }
+    }
+  }
+  
+  .list-section {
+    border-radius: 12px;
+    
+    .list-header {
+      padding: 10px 12px;
+      font-size: 11px;
+      grid-template-columns: 80px 1fr 80px 100px 80px;
+      
+      // 隐藏部分列以适应小屏幕
+      .col:nth-child(3),
+      .col:nth-child(6) {
+        display: none;
+      }
+    }
+    
+    .list-body .list-row {
+      padding: 10px 12px;
+      grid-template-columns: 80px 1fr 80px 100px 80px;
+      
+      .col {
+        font-size: 12px;
+        
+        &:nth-child(3),
+        &:nth-child(6) {
+          display: none;
+        }
+      }
+      
+      .actions-col {
+        gap: 6px;
+        
+        .btn-link {
+          padding: 4px 8px;
+          font-size: 11px;
+        }
+      }
+    }
+  }
+}
+
+/* 横屏手机优化 */
+@media (max-height: 500px) and (orientation: landscape) {
+  .dashboard-header {
+    margin-bottom: 12px;
+    padding: 8px 0;
+    
+    h1 {
+      font-size: 18px;
+    }
+  }
+  
+  .dashboard-nav {
+    margin-bottom: 8px;
+    
+    .nav-btn {
+      padding: 8px 16px;
+      font-size: 12px;
+    }
+  }
+  
+  .dashboard-main {
+    gap: 16px;
+  }
+  
+  .core-card {
+    padding: 12px;
+  }
+}

+ 1 - 2
src/app/shared/components/consultation-order-panel/consultation-order-panel.component.html

@@ -289,5 +289,4 @@
   [isVisible]="showTeamAssignmentModal"
   (closeModal)="closeTeamAssignmentModal()"
   (confirmAssignment)="confirmTeamAssignment($event)">
-</app-team-assignment-modal>
-
+</app-team-assignment-modal>