|
@@ -1,16 +1,20 @@
|
|
|
// 全局变量
|
|
|
-$primary-color: #1e88e5;
|
|
|
-$secondary-color: #6c757d;
|
|
|
-$success-color: #4caf50;
|
|
|
-$warning-color: #ff9800;
|
|
|
-$danger-color: #f44336;
|
|
|
-$text-primary: #333;
|
|
|
-$text-secondary: #666;
|
|
|
-$text-light: #999;
|
|
|
-$bg-light: #f5f7fa;
|
|
|
-$bg-white: #fff;
|
|
|
-$border-color: #e1e5e9;
|
|
|
-$box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
|
+$primary-color: #165DFF;
|
|
|
+$primary-dark: #0d2f5e;
|
|
|
+$success-color: #00B42A;
|
|
|
+$warning-color: #FF7D00;
|
|
|
+$danger-color: #F53F3F;
|
|
|
+$text-primary: #1D2129;
|
|
|
+$text-secondary: #4E5969;
|
|
|
+$text-tertiary: #86909C;
|
|
|
+$border-color: #E5E6EB;
|
|
|
+$background-primary: #FFFFFF;
|
|
|
+$background-secondary: #F2F3F5;
|
|
|
+$background-tertiary: #F7F8FA;
|
|
|
+$shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
|
+$shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
|
+$shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.1);
|
|
|
+$border-radius: 8px;
|
|
|
$transition: all 0.3s ease;
|
|
|
|
|
|
// 主容器
|
|
@@ -19,9 +23,599 @@ $transition: all 0.3s ease;
|
|
|
flex-direction: column;
|
|
|
height: 100vh;
|
|
|
overflow: hidden;
|
|
|
- background-color: $bg-light;
|
|
|
}
|
|
|
|
|
|
+// 顶部导航/Header
|
|
|
+.project-header-blue {
|
|
|
+ background-color: $primary-dark;
|
|
|
+ color: white;
|
|
|
+ padding: 16px 24px;
|
|
|
+ box-shadow: $shadow-md;
|
|
|
+ z-index: 100;
|
|
|
+
|
|
|
+ .header-content {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ max-width: 1400px;
|
|
|
+ margin: 0 auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .project-info {
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .project-title {
|
|
|
+ font-size: 24px;
|
|
|
+ font-weight: 600;
|
|
|
+ margin-bottom: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .project-meta {
|
|
|
+ display: flex;
|
|
|
+ gap: 16px;
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .project-status {
|
|
|
+ padding: 4px 8px;
|
|
|
+ border-radius: 4px;
|
|
|
+ font-weight: 500;
|
|
|
+ background-color: rgba(255, 255, 255, 0.2);
|
|
|
+ }
|
|
|
+
|
|
|
+ .project-stage,
|
|
|
+ .project-date {
|
|
|
+ opacity: 0.9;
|
|
|
+ }
|
|
|
+
|
|
|
+ .header-actions {
|
|
|
+ display: flex;
|
|
|
+ gap: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .primary-btn,
|
|
|
+ .secondary-btn {
|
|
|
+ color: white;
|
|
|
+ background-color: rgba(255, 255, 255, 0.2);
|
|
|
+ border: 1px solid rgba(255, 255, 255, 0.3);
|
|
|
+ padding: 8px 16px;
|
|
|
+ border-radius: $border-radius;
|
|
|
+ cursor: pointer;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 6px;
|
|
|
+ transition: $transition;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: rgba(255, 255, 255, 0.3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .primary-btn {
|
|
|
+ background-color: $primary-color;
|
|
|
+ border-color: $primary-color;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: #0E42CB;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 主要内容区域
|
|
|
+.main-content-area {
|
|
|
+ display: flex;
|
|
|
+ flex: 1;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+// 主内容区 (居中)
|
|
|
+.project-content-main {
|
|
|
+ flex: 1;
|
|
|
+ overflow-y: auto;
|
|
|
+ padding: 24px;
|
|
|
+ background-color: $background-secondary;
|
|
|
+}
|
|
|
+
|
|
|
+// 右侧边栏 - 企业微信聊天集成
|
|
|
+.wechat-sidebar {
|
|
|
+ width: 350px;
|
|
|
+ background-color: $background-tertiary;
|
|
|
+ border-left: 1px solid $border-color;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+.wechat-header {
|
|
|
+ padding: 16px 20px;
|
|
|
+ border-bottom: 1px solid $border-color;
|
|
|
+ background-color: $background-primary;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+
|
|
|
+.wechat-header h3 {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: $text-primary;
|
|
|
+}
|
|
|
+
|
|
|
+.wechat-actions {
|
|
|
+ display: flex;
|
|
|
+ gap: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.search-btn,
|
|
|
+.settings-btn {
|
|
|
+ background: none;
|
|
|
+ border: none;
|
|
|
+ padding: 6px;
|
|
|
+ border-radius: 4px;
|
|
|
+ cursor: pointer;
|
|
|
+ color: $text-secondary;
|
|
|
+ transition: $transition;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: $background-tertiary;
|
|
|
+ color: $primary-color;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.wechat-messages {
|
|
|
+ flex: 1;
|
|
|
+ overflow-y: auto;
|
|
|
+ padding: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.wechat-message-item {
|
|
|
+ display: flex;
|
|
|
+ gap: 12px;
|
|
|
+ margin-bottom: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.message-avatar {
|
|
|
+ width: 36px;
|
|
|
+ height: 36px;
|
|
|
+ border-radius: 50%;
|
|
|
+ background-color: $primary-color;
|
|
|
+ color: white;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ font-weight: 600;
|
|
|
+ font-size: 14px;
|
|
|
+ flex-shrink: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.message-content {
|
|
|
+ flex: 1;
|
|
|
+}
|
|
|
+
|
|
|
+.message-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-bottom: 4px;
|
|
|
+ font-size: 12px;
|
|
|
+}
|
|
|
+
|
|
|
+.message-sender {
|
|
|
+ font-weight: 600;
|
|
|
+ color: $text-primary;
|
|
|
+}
|
|
|
+
|
|
|
+.message-time {
|
|
|
+ color: $text-tertiary;
|
|
|
+}
|
|
|
+
|
|
|
+.message-text {
|
|
|
+ background-color: $background-primary;
|
|
|
+ padding: 8px 12px;
|
|
|
+ border-radius: $border-radius;
|
|
|
+ color: $text-primary;
|
|
|
+ line-height: 1.5;
|
|
|
+}
|
|
|
+
|
|
|
+.wechat-input-area {
|
|
|
+ padding: 16px;
|
|
|
+ border-top: 1px solid $border-color;
|
|
|
+ background-color: $background-primary;
|
|
|
+ display: flex;
|
|
|
+ gap: 8px;
|
|
|
+ align-items: flex-end;
|
|
|
+}
|
|
|
+
|
|
|
+.input-actions {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.action-btn {
|
|
|
+ background: none;
|
|
|
+ border: none;
|
|
|
+ padding: 8px;
|
|
|
+ border-radius: 4px;
|
|
|
+ cursor: pointer;
|
|
|
+ color: $text-secondary;
|
|
|
+ transition: $transition;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: $background-tertiary;
|
|
|
+ color: $primary-color;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.wechat-input {
|
|
|
+ flex: 1;
|
|
|
+ padding: 10px 12px;
|
|
|
+ border: 1px solid $border-color;
|
|
|
+ border-radius: $border-radius;
|
|
|
+ outline: none;
|
|
|
+ font-size: 14px;
|
|
|
+ transition: $transition;
|
|
|
+
|
|
|
+ &:focus {
|
|
|
+ border-color: $primary-color;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.send-btn {
|
|
|
+ padding: 10px 16px;
|
|
|
+ background-color: $primary-color;
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+ border-radius: $border-radius;
|
|
|
+ cursor: pointer;
|
|
|
+ font-size: 14px;
|
|
|
+ transition: $transition;
|
|
|
+
|
|
|
+ &:hover:not(:disabled) {
|
|
|
+ background-color: $primary-dark;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:disabled {
|
|
|
+ background-color: $text-tertiary;
|
|
|
+ cursor: not-allowed;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 售后处理入口 (固定在底部)
|
|
|
+.after-sales-actions {
|
|
|
+ position: fixed;
|
|
|
+ bottom: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 350px; /* 与右侧边栏宽度一致 */
|
|
|
+ background-color: $background-primary;
|
|
|
+ border-top: 1px solid $border-color;
|
|
|
+ padding: 16px 24px;
|
|
|
+ box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.05);
|
|
|
+ z-index: 100;
|
|
|
+}
|
|
|
+
|
|
|
+.actions-container {
|
|
|
+ max-width: 1000px;
|
|
|
+ margin: 0 auto;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ gap: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.action-btn {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+ padding: 10px 20px;
|
|
|
+ border-radius: $border-radius;
|
|
|
+ border: none;
|
|
|
+ cursor: pointer;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 500;
|
|
|
+ transition: $transition;
|
|
|
+}
|
|
|
+
|
|
|
+.action-btn.primary {
|
|
|
+ background-color: $primary-dark;
|
|
|
+ color: white;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: #0a2340;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.action-btn.warning {
|
|
|
+ background-color: $warning-color;
|
|
|
+ color: white;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: #e57000;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.action-btn.secondary {
|
|
|
+ background-color: $background-tertiary;
|
|
|
+ color: $text-primary;
|
|
|
+ border: 1px solid $border-color;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: $background-secondary;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 进度卡片
|
|
|
+.progress-card {
|
|
|
+ background-color: $background-primary;
|
|
|
+ border-radius: $border-radius;
|
|
|
+ padding: 20px;
|
|
|
+ margin-bottom: 24px;
|
|
|
+ box-shadow: $shadow-sm;
|
|
|
+}
|
|
|
+
|
|
|
+.progress-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 12px;
|
|
|
+}
|
|
|
+
|
|
|
+.progress-header h3 {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: $text-primary;
|
|
|
+}
|
|
|
+
|
|
|
+.progress-percentage {
|
|
|
+ font-size: 24px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: $primary-color;
|
|
|
+}
|
|
|
+
|
|
|
+.progress-bar {
|
|
|
+ height: 8px;
|
|
|
+ background-color: $background-tertiary;
|
|
|
+ border-radius: 4px;
|
|
|
+ overflow: hidden;
|
|
|
+ margin-bottom: 12px;
|
|
|
+}
|
|
|
+
|
|
|
+.progress-fill {
|
|
|
+ height: 100%;
|
|
|
+ background-color: $primary-color;
|
|
|
+ transition: width 0.3s ease;
|
|
|
+}
|
|
|
+
|
|
|
+.progress-meta {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ font-size: 12px;
|
|
|
+ color: $text-tertiary;
|
|
|
+}
|
|
|
+
|
|
|
+// 进度时间轴卡片
|
|
|
+.timeline-card {
|
|
|
+ background-color: $background-primary;
|
|
|
+ border-radius: $border-radius;
|
|
|
+ padding: 20px;
|
|
|
+ margin-bottom: 24px;
|
|
|
+ box-shadow: $shadow-sm;
|
|
|
+}
|
|
|
+
|
|
|
+.card-title {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: $text-primary;
|
|
|
+ margin-bottom: 20px;
|
|
|
+}
|
|
|
+
|
|
|
+.project-timeline {
|
|
|
+ position: relative;
|
|
|
+ padding-left: 30px;
|
|
|
+}
|
|
|
+
|
|
|
+.timeline-item {
|
|
|
+ position: relative;
|
|
|
+ padding-bottom: 24px;
|
|
|
+ transition: $transition;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: $background-tertiary;
|
|
|
+ border-radius: $border-radius;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.timeline-icon {
|
|
|
+ position: absolute;
|
|
|
+ left: -30px;
|
|
|
+ top: 4px;
|
|
|
+ width: 24px;
|
|
|
+ height: 24px;
|
|
|
+ border-radius: 50%;
|
|
|
+ background-color: $background-tertiary;
|
|
|
+ border: 2px solid $border-color;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ transition: $transition;
|
|
|
+}
|
|
|
+
|
|
|
+.timeline-icon.icon-completed {
|
|
|
+ background-color: $success-color;
|
|
|
+ border-color: $success-color;
|
|
|
+ color: white;
|
|
|
+}
|
|
|
+
|
|
|
+.timeline-icon.icon-in-progress {
|
|
|
+ background-color: $primary-color;
|
|
|
+ border-color: $primary-color;
|
|
|
+ color: white;
|
|
|
+ animation: pulse 2s infinite;
|
|
|
+}
|
|
|
+
|
|
|
+.timeline-line {
|
|
|
+ position: absolute;
|
|
|
+ left: -24px;
|
|
|
+ top: 28px;
|
|
|
+ width: 2px;
|
|
|
+ height: calc(100% + 4px);
|
|
|
+ background-color: $border-color;
|
|
|
+}
|
|
|
+
|
|
|
+.timeline-line.line-completed {
|
|
|
+ background-color: $success-color;
|
|
|
+}
|
|
|
+
|
|
|
+.timeline-content {
|
|
|
+ padding: 8px 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.timeline-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.stage-title {
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: $text-primary;
|
|
|
+}
|
|
|
+
|
|
|
+.stage-status {
|
|
|
+ font-size: 12px;
|
|
|
+ padding: 2px 8px;
|
|
|
+ border-radius: 12px;
|
|
|
+ background-color: $background-tertiary;
|
|
|
+ color: $text-secondary;
|
|
|
+}
|
|
|
+
|
|
|
+.stage-item.stage-completed .stage-status {
|
|
|
+ background-color: color-mix(in srgb, $success-color 10%, transparent);
|
|
|
+ color: $success-color;
|
|
|
+}
|
|
|
+
|
|
|
+.stage-item.stage-in-progress .stage-status {
|
|
|
+ background-color: color-mix(in srgb, $primary-color 10%, transparent);
|
|
|
+ color: $primary-color;
|
|
|
+}
|
|
|
+
|
|
|
+.timeline-meta {
|
|
|
+ font-size: 12px;
|
|
|
+ color: $text-tertiary;
|
|
|
+ margin-bottom: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.stage-dates {
|
|
|
+ display: flex;
|
|
|
+ gap: 16px;
|
|
|
+ margin-bottom: 4px;
|
|
|
+}
|
|
|
+
|
|
|
+.stage-details {
|
|
|
+ font-size: 13px;
|
|
|
+ color: $text-secondary;
|
|
|
+ line-height: 1.4;
|
|
|
+}
|
|
|
+
|
|
|
+// 标签页样式
|
|
|
+.project-tabs {
|
|
|
+ background-color: $background-primary;
|
|
|
+ border-radius: $border-radius;
|
|
|
+ box-shadow: $shadow-sm;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+.tab-header {
|
|
|
+ display: flex;
|
|
|
+ border-bottom: 1px solid $border-color;
|
|
|
+ background-color: $background-tertiary;
|
|
|
+}
|
|
|
+
|
|
|
+.tab-btn {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+ padding: 14px 20px;
|
|
|
+ border: none;
|
|
|
+ background: none;
|
|
|
+ cursor: pointer;
|
|
|
+ font-size: 14px;
|
|
|
+ color: $text-secondary;
|
|
|
+ transition: $transition;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ color: $primary-color;
|
|
|
+ background-color: color-mix(in srgb, $primary-color 5%, transparent);
|
|
|
+ }
|
|
|
+
|
|
|
+ &.active {
|
|
|
+ color: $primary-color;
|
|
|
+ background-color: $background-primary;
|
|
|
+ border-bottom: 2px solid $primary-color;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.tab-content {
|
|
|
+ padding: 20px;
|
|
|
+}
|
|
|
+
|
|
|
+// 动画效果
|
|
|
+@keyframes pulse {
|
|
|
+ 0% {
|
|
|
+ box-shadow: 0 0 0 0 rgba(22, 93, 255, 0.4);
|
|
|
+ }
|
|
|
+ 70% {
|
|
|
+ box-shadow: 0 0 0 6px rgba(22, 93, 255, 0);
|
|
|
+ }
|
|
|
+ 100% {
|
|
|
+ box-shadow: 0 0 0 0 rgba(22, 93, 255, 0);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 响应式设计
|
|
|
+@media (max-width: 1200px) {
|
|
|
+ .wechat-sidebar {
|
|
|
+ width: 300px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .after-sales-actions {
|
|
|
+ right: 300px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@media (max-width: 768px) {
|
|
|
+ .main-content-area {
|
|
|
+ flex-direction: column;
|
|
|
+ }
|
|
|
+
|
|
|
+ .wechat-sidebar {
|
|
|
+ width: 100%;
|
|
|
+ height: 0;
|
|
|
+ border-left: none;
|
|
|
+ border-top: 1px solid $border-color;
|
|
|
+ }
|
|
|
+
|
|
|
+ .wechat-sidebar.show {
|
|
|
+ height: 400px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .after-sales-actions {
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .actions-container {
|
|
|
+ flex-wrap: wrap;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 原有样式变量兼容
|
|
|
+$bg-light: $background-secondary;
|
|
|
+$bg-white: $background-primary;
|
|
|
+$box-shadow: $shadow-md;
|
|
|
+$text-light: $text-tertiary;
|
|
|
+
|
|
|
// 顶部导航栏
|
|
|
.top-navbar {
|
|
|
display: flex;
|
|
@@ -268,7 +862,7 @@ $transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
&:disabled {
|
|
|
- background-color: $text-light;
|
|
|
+ background-color: $text-tertiary;
|
|
|
cursor: not-allowed;
|
|
|
}
|
|
|
}
|
|
@@ -337,7 +931,7 @@ $transition: all 0.3s ease;
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
font-size: 12px;
|
|
|
- color: $text-light;
|
|
|
+ color: $text-tertiary;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -418,7 +1012,7 @@ $transition: all 0.3s ease;
|
|
|
display: block;
|
|
|
font-size: 12px;
|
|
|
font-weight: 500;
|
|
|
- color: $text-light;
|
|
|
+ color: $text-tertiary;
|
|
|
margin-bottom: 4px;
|
|
|
}
|
|
|
|