|
|
@@ -1,508 +1,7 @@
|
|
|
.stage-delivery-container {
|
|
|
- padding: 16px;
|
|
|
- background-color: #f8f9fa;
|
|
|
+ padding: 20px;
|
|
|
+ background: linear-gradient(135deg, #f5f7fa 0%, #e8eef5 100%);
|
|
|
min-height: 100vh;
|
|
|
-
|
|
|
- // ============ 阶段锁定提示 ============
|
|
|
- .stage-locked-notice {
|
|
|
- background: linear-gradient(135deg, #fff3e0, #ffe0b2);
|
|
|
- border: 2px solid #ff9800;
|
|
|
- border-radius: 12px;
|
|
|
- padding: 20px;
|
|
|
- margin-bottom: 20px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- gap: 16px;
|
|
|
- animation: slideDown 0.3s ease-out;
|
|
|
-
|
|
|
- .lock-icon {
|
|
|
- font-size: 48px;
|
|
|
- flex-shrink: 0;
|
|
|
- }
|
|
|
-
|
|
|
- .lock-content {
|
|
|
- flex: 1;
|
|
|
-
|
|
|
- h4 {
|
|
|
- margin: 0 0 8px;
|
|
|
- font-size: 18px;
|
|
|
- font-weight: 600;
|
|
|
- color: #f57c00;
|
|
|
- }
|
|
|
-
|
|
|
- p {
|
|
|
- margin: 0;
|
|
|
- font-size: 14px;
|
|
|
- line-height: 1.6;
|
|
|
- color: #e65100;
|
|
|
-
|
|
|
- strong {
|
|
|
- font-weight: 600;
|
|
|
- color: #d84315;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // ============ 上传区域锁定状态 ============
|
|
|
- .upload-section.disabled {
|
|
|
- opacity: 0.5;
|
|
|
- pointer-events: none;
|
|
|
-
|
|
|
- .upload-area.locked {
|
|
|
- background: #f5f5f5;
|
|
|
- border-color: #e0e0e0;
|
|
|
- cursor: not-allowed;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // ============ 审批状态横幅样式(与订单分配阶段保持一致)============
|
|
|
- .approval-status-banner {
|
|
|
- padding: 16px 20px;
|
|
|
- border-radius: 12px; // ⭐ 增加圆角,更柔和
|
|
|
- margin-bottom: 20px;
|
|
|
- display: flex;
|
|
|
- align-items: flex-start;
|
|
|
- gap: 16px;
|
|
|
- animation: slideDown 0.3s ease-out;
|
|
|
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); // ⭐ 添加阴影,更立体
|
|
|
-
|
|
|
- .status-icon {
|
|
|
- font-size: 32px;
|
|
|
- flex-shrink: 0;
|
|
|
- }
|
|
|
-
|
|
|
- .status-content {
|
|
|
- flex: 1;
|
|
|
-
|
|
|
- h4 {
|
|
|
- margin: 0 0 8px;
|
|
|
- font-size: 18px;
|
|
|
- font-weight: 600;
|
|
|
- }
|
|
|
-
|
|
|
- p {
|
|
|
- margin: 0;
|
|
|
- font-size: 14px;
|
|
|
- line-height: 1.5;
|
|
|
-
|
|
|
- strong {
|
|
|
- font-weight: 600;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .btn-resubmit {
|
|
|
- margin-top: 12px;
|
|
|
- padding: 8px 20px;
|
|
|
- background: white;
|
|
|
- border: 2px solid currentColor;
|
|
|
- border-radius: 6px;
|
|
|
- font-size: 14px;
|
|
|
- font-weight: 500;
|
|
|
- cursor: pointer;
|
|
|
- transition: all 0.3s;
|
|
|
-
|
|
|
- &:hover {
|
|
|
- transform: translateY(-2px);
|
|
|
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- &.pending {
|
|
|
- background: linear-gradient(135deg, #fff3e0, #ffe0b2);
|
|
|
- border: 2px solid #ff9800;
|
|
|
- color: #f57c00;
|
|
|
-
|
|
|
- .btn-resubmit {
|
|
|
- color: #f57c00;
|
|
|
- border-color: #f57c00;
|
|
|
-
|
|
|
- &:hover {
|
|
|
- background: #f57c00;
|
|
|
- color: white;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- &.approved {
|
|
|
- background: linear-gradient(135deg, #e8f5e9, #c8e6c9);
|
|
|
- border: 2px solid #4caf50;
|
|
|
- color: #2e7d32;
|
|
|
-
|
|
|
- .btn-resubmit {
|
|
|
- color: #2e7d32;
|
|
|
- border-color: #2e7d32;
|
|
|
-
|
|
|
- &:hover {
|
|
|
- background: #2e7d32;
|
|
|
- color: white;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- &.rejected {
|
|
|
- background: linear-gradient(135deg, #ffebee, #ffcdd2);
|
|
|
- border: 2px solid #f44336;
|
|
|
- color: #c62828;
|
|
|
-
|
|
|
- .btn-resubmit {
|
|
|
- color: #c62828;
|
|
|
- border-color: #c62828;
|
|
|
-
|
|
|
- &:hover {
|
|
|
- background: #c62828;
|
|
|
- color: white;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // ============ 组长审批操作条样式(居中显示)============
|
|
|
- .leader-approval-bar {
|
|
|
- margin: 24px 0;
|
|
|
- padding: 20px;
|
|
|
- background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
|
|
- border-radius: 16px;
|
|
|
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
|
|
|
- animation: slideDown 0.3s ease-out;
|
|
|
-
|
|
|
- .approval-buttons-container {
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- gap: 20px;
|
|
|
- flex-wrap: wrap;
|
|
|
-
|
|
|
- button {
|
|
|
- position: relative;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- gap: 10px;
|
|
|
- padding: 14px 32px;
|
|
|
- font-size: 16px;
|
|
|
- font-weight: 600;
|
|
|
- border: none;
|
|
|
- border-radius: 12px;
|
|
|
- cursor: pointer;
|
|
|
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
|
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
|
- min-width: 160px;
|
|
|
- overflow: hidden;
|
|
|
-
|
|
|
- &::before {
|
|
|
- content: '';
|
|
|
- position: absolute;
|
|
|
- top: 50%;
|
|
|
- left: 50%;
|
|
|
- width: 0;
|
|
|
- height: 0;
|
|
|
- border-radius: 50%;
|
|
|
- background: rgba(255, 255, 255, 0.3);
|
|
|
- transform: translate(-50%, -50%);
|
|
|
- transition: width 0.6s, height 0.6s;
|
|
|
- }
|
|
|
-
|
|
|
- &:hover::before {
|
|
|
- width: 300px;
|
|
|
- height: 300px;
|
|
|
- }
|
|
|
-
|
|
|
- .btn-icon {
|
|
|
- font-size: 20px;
|
|
|
- transition: transform 0.3s ease;
|
|
|
- }
|
|
|
-
|
|
|
- .btn-text {
|
|
|
- position: relative;
|
|
|
- z-index: 1;
|
|
|
- }
|
|
|
-
|
|
|
- &:hover .btn-icon {
|
|
|
- transform: scale(1.2);
|
|
|
- }
|
|
|
-
|
|
|
- &:active {
|
|
|
- transform: scale(0.95);
|
|
|
- }
|
|
|
-
|
|
|
- &:disabled {
|
|
|
- opacity: 0.6;
|
|
|
- cursor: not-allowed;
|
|
|
- transform: none;
|
|
|
-
|
|
|
- &:hover {
|
|
|
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .btn-approve {
|
|
|
- background: linear-gradient(135deg, #4caf50 0%, #2e7d32 100%);
|
|
|
- color: white;
|
|
|
- box-shadow: 0 6px 20px rgba(76, 175, 80, 0.3);
|
|
|
-
|
|
|
- &:hover:not(:disabled) {
|
|
|
- background: linear-gradient(135deg, #66bb6a 0%, #43a047 100%);
|
|
|
- box-shadow: 0 10px 30px rgba(76, 175, 80, 0.5);
|
|
|
- transform: translateY(-3px) scale(1.02);
|
|
|
- }
|
|
|
-
|
|
|
- &:active:not(:disabled) {
|
|
|
- background: linear-gradient(135deg, #388e3c 0%, #1b5e20 100%);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .btn-reject {
|
|
|
- background: linear-gradient(135deg, #f44336 0%, #c62828 100%);
|
|
|
- color: white;
|
|
|
- box-shadow: 0 6px 20px rgba(244, 67, 54, 0.3);
|
|
|
-
|
|
|
- &:hover:not(:disabled) {
|
|
|
- background: linear-gradient(135deg, #ef5350 0%, #d32f2f 100%);
|
|
|
- box-shadow: 0 10px 30px rgba(244, 67, 54, 0.5);
|
|
|
- transform: translateY(-3px) scale(1.02);
|
|
|
- }
|
|
|
-
|
|
|
- &:active:not(:disabled) {
|
|
|
- background: linear-gradient(135deg, #c62828 0%, #b71c1c 100%);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 审批提示信息
|
|
|
- .approval-hint {
|
|
|
- text-align: center;
|
|
|
- margin: 16px 0 0;
|
|
|
- padding: 12px 20px;
|
|
|
- background: rgba(255, 193, 7, 0.15);
|
|
|
- border: 1px solid rgba(255, 193, 7, 0.3);
|
|
|
- border-radius: 8px;
|
|
|
- font-size: 14px;
|
|
|
- color: #f57c00;
|
|
|
- line-height: 1.6;
|
|
|
- animation: pulse 2s ease-in-out infinite;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @keyframes slideDown {
|
|
|
- from {
|
|
|
- opacity: 0;
|
|
|
- transform: translateY(-20px);
|
|
|
- }
|
|
|
- to {
|
|
|
- opacity: 1;
|
|
|
- transform: translateY(0);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-@keyframes pulse {
|
|
|
- 0%, 100% {
|
|
|
- opacity: 1;
|
|
|
- }
|
|
|
- 50% {
|
|
|
- opacity: 0.7;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// ============ 🧪 测试标记区域样式 ============
|
|
|
-.test-mark-section {
|
|
|
- margin: 20px 0;
|
|
|
- padding: 16px 20px;
|
|
|
- background: linear-gradient(135deg, #fff9e6, #fff3cc);
|
|
|
- border: 2px dashed #ffa500;
|
|
|
- border-radius: 12px;
|
|
|
- animation: slideDown 0.3s ease-out;
|
|
|
-
|
|
|
- .btn-test-mark {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- gap: 10px;
|
|
|
- padding: 12px 24px;
|
|
|
- background: linear-gradient(135deg, #ffa500, #ff8c00);
|
|
|
- color: white;
|
|
|
- border: none;
|
|
|
- border-radius: 10px;
|
|
|
- font-size: 15px;
|
|
|
- font-weight: 600;
|
|
|
- cursor: pointer;
|
|
|
- transition: all 0.3s ease;
|
|
|
- box-shadow: 0 4px 12px rgba(255, 165, 0, 0.3);
|
|
|
- width: 100%;
|
|
|
- max-width: 300px;
|
|
|
- margin: 0 auto;
|
|
|
-
|
|
|
- .test-icon {
|
|
|
- font-size: 18px;
|
|
|
- }
|
|
|
-
|
|
|
- .test-text {
|
|
|
- position: relative;
|
|
|
- z-index: 1;
|
|
|
- }
|
|
|
-
|
|
|
- &:hover:not(:disabled) {
|
|
|
- background: linear-gradient(135deg, #ff8c00, #ff7700);
|
|
|
- transform: translateY(-2px);
|
|
|
- box-shadow: 0 6px 20px rgba(255, 165, 0, 0.4);
|
|
|
- }
|
|
|
-
|
|
|
- &:active:not(:disabled) {
|
|
|
- transform: translateY(0);
|
|
|
- }
|
|
|
-
|
|
|
- &:disabled {
|
|
|
- opacity: 0.6;
|
|
|
- cursor: not-allowed;
|
|
|
- transform: none;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .test-hint {
|
|
|
- text-align: center;
|
|
|
- margin: 12px 0 0;
|
|
|
- font-size: 13px;
|
|
|
- color: #cc8400;
|
|
|
- line-height: 1.5;
|
|
|
-
|
|
|
- &::before {
|
|
|
- content: '💡 ';
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
- // 审批消息流(紧凑样式)
|
|
|
- .approval-messages-container {
|
|
|
- background: white;
|
|
|
- border-radius: 12px;
|
|
|
- padding: 12px 16px;
|
|
|
- margin-bottom: 16px;
|
|
|
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
|
|
|
-
|
|
|
- .messages-header {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- gap: 8px;
|
|
|
- font-size: 13px;
|
|
|
- font-weight: 600;
|
|
|
- color: #6c757d;
|
|
|
- margin-bottom: 12px;
|
|
|
- padding-bottom: 8px;
|
|
|
- border-bottom: 1px solid #e9ecef;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 16px;
|
|
|
- height: 16px;
|
|
|
- color: #6366f1;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .approval-messages {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- gap: 8px;
|
|
|
-
|
|
|
- .approval-message {
|
|
|
- display: flex;
|
|
|
- gap: 10px;
|
|
|
- padding: 8px 12px;
|
|
|
- border-radius: 8px;
|
|
|
- background: #f8f9fa;
|
|
|
- transition: all 0.2s ease;
|
|
|
-
|
|
|
- &:hover {
|
|
|
- background: #e9ecef;
|
|
|
- }
|
|
|
-
|
|
|
- &[data-status="approved"] {
|
|
|
- background: #d1fae5;
|
|
|
- border-left: 3px solid #10b981;
|
|
|
- }
|
|
|
-
|
|
|
- &[data-status="rejected"] {
|
|
|
- background: #fee2e2;
|
|
|
- border-left: 3px solid #ef4444;
|
|
|
- }
|
|
|
-
|
|
|
- &[data-status="pending"] {
|
|
|
- background: #fef3c7;
|
|
|
- border-left: 3px solid #f59e0b;
|
|
|
- }
|
|
|
-
|
|
|
- .message-icon {
|
|
|
- flex-shrink: 0;
|
|
|
- width: 24px;
|
|
|
- height: 24px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
-
|
|
|
- .icon-emoji {
|
|
|
- font-size: 18px;
|
|
|
- line-height: 1;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .message-content {
|
|
|
- flex: 1;
|
|
|
- min-width: 0;
|
|
|
-
|
|
|
- .message-header {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: space-between;
|
|
|
- margin-bottom: 4px;
|
|
|
-
|
|
|
- .message-stage {
|
|
|
- font-size: 12px;
|
|
|
- font-weight: 600;
|
|
|
- color: #374151;
|
|
|
- }
|
|
|
-
|
|
|
- .message-time {
|
|
|
- font-size: 11px;
|
|
|
- color: #9ca3af;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .message-body {
|
|
|
- font-size: 13px;
|
|
|
- color: #4b5563;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- flex-wrap: wrap;
|
|
|
- gap: 4px;
|
|
|
-
|
|
|
- .message-user {
|
|
|
- font-weight: 600;
|
|
|
- color: #1f2937;
|
|
|
- }
|
|
|
-
|
|
|
- .message-text {
|
|
|
- color: #6b7280;
|
|
|
- }
|
|
|
-
|
|
|
- .message-approver {
|
|
|
- color: #9ca3af;
|
|
|
- font-size: 12px;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .message-comment {
|
|
|
- margin-top: 6px;
|
|
|
- padding: 6px 10px;
|
|
|
- background: rgba(255, 255, 255, 0.6);
|
|
|
- border-radius: 6px;
|
|
|
- font-size: 12px;
|
|
|
- color: #6b7280;
|
|
|
- font-style: italic;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
// 加载状态
|
|
|
.loading-state {
|
|
|
@@ -510,22 +9,24 @@
|
|
|
flex-direction: column;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
- padding: 60px 20px;
|
|
|
- text-align: center;
|
|
|
-
|
|
|
+ padding: 80px 20px;
|
|
|
+
|
|
|
.spinner {
|
|
|
- width: 40px;
|
|
|
- height: 40px;
|
|
|
- border: 4px solid #e9ecef;
|
|
|
- border-top-color: var(--ion-color-primary, #3880ff);
|
|
|
+ width: 56px;
|
|
|
+ height: 56px;
|
|
|
+ border: 5px solid rgba(102, 126, 234, 0.1);
|
|
|
+ border-top-color: #667eea;
|
|
|
+ border-right-color: #764ba2;
|
|
|
border-radius: 50%;
|
|
|
- animation: spin 0.8s linear infinite;
|
|
|
+ animation: spin 1s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;
|
|
|
+ box-shadow: 0 4px 16px rgba(102, 126, 234, 0.2);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
p {
|
|
|
- margin-top: 16px;
|
|
|
- color: #6c757d;
|
|
|
- font-size: 14px;
|
|
|
+ margin-top: 20px;
|
|
|
+ color: #475569;
|
|
|
+ font-size: 15px;
|
|
|
+ font-weight: 500;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -533,1340 +34,776 @@
|
|
|
to { transform: rotate(360deg); }
|
|
|
}
|
|
|
|
|
|
- // 通用标签标题
|
|
|
- .section-label {
|
|
|
- font-size: 13px;
|
|
|
- font-weight: 600;
|
|
|
- color: #6c757d;
|
|
|
- text-transform: uppercase;
|
|
|
- letter-spacing: 0.5px;
|
|
|
- margin-bottom: 12px;
|
|
|
- padding-left: 4px;
|
|
|
- }
|
|
|
-
|
|
|
- // 场景Product选择标签 (第一层)
|
|
|
- .product-tabs-section {
|
|
|
- margin-bottom: 20px;
|
|
|
-
|
|
|
- .product-tabs {
|
|
|
- display: grid;
|
|
|
- grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
|
|
|
- gap: 10px;
|
|
|
-
|
|
|
- .product-tab {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- align-items: center;
|
|
|
- gap: 6px;
|
|
|
- padding: 14px 12px;
|
|
|
- background: white;
|
|
|
- border-radius: 12px;
|
|
|
- border: 2px solid #e9ecef;
|
|
|
- cursor: pointer;
|
|
|
- transition: all 0.3s ease;
|
|
|
- position: relative;
|
|
|
-
|
|
|
- .product-icon {
|
|
|
- width: 36px;
|
|
|
- height: 36px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- border-radius: 10px;
|
|
|
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
- color: white;
|
|
|
- transition: transform 0.3s ease;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 20px;
|
|
|
- height: 20px;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .product-name {
|
|
|
- font-size: 13px;
|
|
|
- font-weight: 600;
|
|
|
- color: #495057;
|
|
|
- text-align: center;
|
|
|
- line-height: 1.3;
|
|
|
- }
|
|
|
-
|
|
|
- .file-count-badge {
|
|
|
- position: absolute;
|
|
|
- top: 8px;
|
|
|
- right: 8px;
|
|
|
- background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
|
|
|
- color: white;
|
|
|
- font-size: 11px;
|
|
|
- font-weight: 700;
|
|
|
- padding: 2px 6px;
|
|
|
- border-radius: 10px;
|
|
|
- min-width: 18px;
|
|
|
- text-align: center;
|
|
|
- }
|
|
|
-
|
|
|
- &:hover {
|
|
|
- border-color: var(--ion-color-primary, #3880ff);
|
|
|
- transform: translateY(-2px);
|
|
|
- box-shadow: 0 4px 12px rgba(56, 128, 255, 0.15);
|
|
|
-
|
|
|
- .product-icon {
|
|
|
- transform: scale(1.1);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- &.active {
|
|
|
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
- border-color: transparent;
|
|
|
- color: white;
|
|
|
- box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
|
|
|
-
|
|
|
- .product-icon {
|
|
|
- background: rgba(255, 255, 255, 0.25);
|
|
|
- transform: scale(1.15);
|
|
|
- }
|
|
|
-
|
|
|
- .product-name {
|
|
|
- color: white;
|
|
|
- }
|
|
|
-
|
|
|
- .file-count-badge {
|
|
|
- background: white;
|
|
|
- color: #667eea;
|
|
|
- }
|
|
|
+ // ==================== 🆕 空间列表样式 ====================
|
|
|
+ .spaces-list-section {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 20px;
|
|
|
+
|
|
|
+ // 空间头部(折叠状态)
|
|
|
+ .space-header {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 16px;
|
|
|
+ padding: 18px 24px;
|
|
|
+ background: linear-gradient(135deg, #ffffff 0%, #fafbfc 100%);
|
|
|
+ border: 2px solid transparent;
|
|
|
+ border-radius: 16px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
|
|
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04);
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ // 渐变边框效果
|
|
|
+ &::before {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ inset: 0;
|
|
|
+ border-radius: 16px;
|
|
|
+ padding: 2px;
|
|
|
+ background: linear-gradient(135deg, #667eea, #764ba2, #f093fb, #4facfe);
|
|
|
+ -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
|
|
|
+ mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
|
|
|
+ -webkit-mask-composite: xor;
|
|
|
+ mask-composite: exclude;
|
|
|
+ opacity: 0;
|
|
|
+ transition: opacity 0.4s ease;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ transform: translateY(-2px);
|
|
|
+ box-shadow: 0 8px 24px rgba(102, 126, 234, 0.15);
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ opacity: 1;
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 交付类型选择标签 (第二层)
|
|
|
- .delivery-types-section {
|
|
|
- margin-bottom: 20px;
|
|
|
-
|
|
|
- .delivery-types-tabs {
|
|
|
- display: grid;
|
|
|
- grid-template-columns: repeat(4, 1fr);
|
|
|
- gap: 10px;
|
|
|
-
|
|
|
- .delivery-type-tab {
|
|
|
+
|
|
|
+ .space-name {
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #1e293b;
|
|
|
+ min-width: 120px;
|
|
|
+ flex-shrink: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4个阶段标签(横向排列)
|
|
|
+ .stage-tabs {
|
|
|
display: flex;
|
|
|
- flex-direction: column;
|
|
|
- align-items: center;
|
|
|
- gap: 8px;
|
|
|
- padding: 16px 10px;
|
|
|
- background: white;
|
|
|
- border-radius: 14px;
|
|
|
- border: 2px solid #e9ecef;
|
|
|
- cursor: pointer;
|
|
|
- transition: all 0.3s ease;
|
|
|
- position: relative;
|
|
|
-
|
|
|
- .type-icon {
|
|
|
- width: 44px;
|
|
|
- height: 44px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- border-radius: 12px;
|
|
|
- background: #f8f9fa;
|
|
|
- transition: all 0.3s ease;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 24px;
|
|
|
- height: 24px;
|
|
|
- color: #6c757d;
|
|
|
- transition: color 0.3s ease;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .type-content {
|
|
|
+ gap: 12px;
|
|
|
+ flex: 1;
|
|
|
+ justify-content: center;
|
|
|
+
|
|
|
+ .stage-tab {
|
|
|
display: flex;
|
|
|
- flex-direction: column;
|
|
|
align-items: center;
|
|
|
- gap: 2px;
|
|
|
-
|
|
|
- .type-name {
|
|
|
- font-size: 14px;
|
|
|
- font-weight: 700;
|
|
|
- color: #212529;
|
|
|
- text-align: center;
|
|
|
- }
|
|
|
-
|
|
|
- .type-description {
|
|
|
- font-size: 11px;
|
|
|
- color: #868e96;
|
|
|
- text-align: center;
|
|
|
- line-height: 1.3;
|
|
|
- display: -webkit-box;
|
|
|
- -webkit-line-clamp: 2;
|
|
|
- line-clamp: 2;
|
|
|
- -webkit-box-orient: vertical;
|
|
|
- overflow: hidden;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .type-badges {
|
|
|
- display: flex;
|
|
|
- flex-wrap: wrap;
|
|
|
- gap: 6px;
|
|
|
- justify-content: center;
|
|
|
- margin-top: 4px;
|
|
|
- }
|
|
|
-
|
|
|
- .file-count-badge {
|
|
|
- background: #6c757d;
|
|
|
- color: white;
|
|
|
- font-size: 11px;
|
|
|
- font-weight: 700;
|
|
|
- padding: 3px 8px;
|
|
|
- border-radius: 12px;
|
|
|
- min-width: 20px;
|
|
|
- text-align: center;
|
|
|
- }
|
|
|
-
|
|
|
- .unverified-badge {
|
|
|
- background: #ffc107;
|
|
|
- color: #000;
|
|
|
- font-size: 10px;
|
|
|
- font-weight: 600;
|
|
|
- padding: 3px 8px;
|
|
|
- border-radius: 12px;
|
|
|
- }
|
|
|
-
|
|
|
- .status-badge {
|
|
|
- font-size: 11px;
|
|
|
- font-weight: 600;
|
|
|
- padding: 3px 8px;
|
|
|
+ gap: 8px;
|
|
|
+ padding: 10px 18px;
|
|
|
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
|
|
|
+ border: 2px solid #e2e8f0;
|
|
|
border-radius: 12px;
|
|
|
- white-space: nowrap;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #64748b;
|
|
|
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
|
+ cursor: pointer;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
|
|
|
- &.approved {
|
|
|
- background: #4caf50;
|
|
|
- color: white;
|
|
|
+ // 光泽效果
|
|
|
+ &::after {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ top: -50%;
|
|
|
+ left: -50%;
|
|
|
+ width: 200%;
|
|
|
+ height: 200%;
|
|
|
+ background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.3), transparent);
|
|
|
+ transform: translateX(-100%);
|
|
|
+ transition: transform 0.6s ease;
|
|
|
}
|
|
|
|
|
|
- &.pending {
|
|
|
- background: #ff9800;
|
|
|
- color: white;
|
|
|
+ &:hover::after {
|
|
|
+ transform: translateX(100%);
|
|
|
}
|
|
|
|
|
|
- &.rejected {
|
|
|
- background: #f44336;
|
|
|
- color: white;
|
|
|
+ &.has-files {
|
|
|
+ background: linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%);
|
|
|
+ border-color: #c7d2fe;
|
|
|
+ color: #4f46e5;
|
|
|
+ box-shadow: 0 2px 8px rgba(79, 70, 229, 0.15);
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- // 阶段状态样式
|
|
|
- &.stage-approved {
|
|
|
- border-color: #4caf50;
|
|
|
- background: linear-gradient(135deg, #e8f5e9, #c8e6c9);
|
|
|
|
|
|
- .type-icon {
|
|
|
- background: rgba(76, 175, 80, 0.1);
|
|
|
- .icon { color: #4caf50; }
|
|
|
+ &.confirmed {
|
|
|
+ background: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 100%);
|
|
|
+ border-color: #6ee7b7;
|
|
|
+ color: #059669;
|
|
|
+ box-shadow: 0 2px 8px rgba(5, 150, 105, 0.15);
|
|
|
}
|
|
|
|
|
|
- .type-name { color: #2e7d32; }
|
|
|
- }
|
|
|
-
|
|
|
- &.stage-pending {
|
|
|
- border-color: #ff9800;
|
|
|
- background: linear-gradient(135deg, #fff3e0, #ffe0b2);
|
|
|
-
|
|
|
- .type-icon {
|
|
|
- background: rgba(255, 152, 0, 0.1);
|
|
|
- .icon { color: #ff9800; }
|
|
|
+ &:hover {
|
|
|
+ transform: translateY(-2px);
|
|
|
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.2);
|
|
|
}
|
|
|
|
|
|
- .type-name { color: #f57c00; }
|
|
|
- }
|
|
|
-
|
|
|
- &.stage-rejected {
|
|
|
- border-color: #f44336;
|
|
|
- background: linear-gradient(135deg, #ffebee, #ffcdd2);
|
|
|
-
|
|
|
- .type-icon {
|
|
|
- background: rgba(244, 67, 54, 0.1);
|
|
|
- .icon { color: #f44336; }
|
|
|
+ .stage-name {
|
|
|
+ font-weight: 600;
|
|
|
+ position: relative;
|
|
|
+ z-index: 1;
|
|
|
}
|
|
|
|
|
|
- .type-name { color: #c62828; }
|
|
|
- }
|
|
|
-
|
|
|
- &.stage-active {
|
|
|
- border-color: #f44336;
|
|
|
- border-width: 3px;
|
|
|
- box-shadow: 0 0 0 3px rgba(244, 67, 54, 0.1);
|
|
|
-
|
|
|
- .type-icon {
|
|
|
- background: rgba(244, 67, 54, 0.1);
|
|
|
- .icon { color: #f44336; }
|
|
|
+ .file-count {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ min-width: 24px;
|
|
|
+ height: 24px;
|
|
|
+ padding: 0 8px;
|
|
|
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
+ color: white;
|
|
|
+ border-radius: 12px;
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: 700;
|
|
|
+ box-shadow: 0 2px 6px rgba(102, 126, 234, 0.3);
|
|
|
+ position: relative;
|
|
|
+ z-index: 1;
|
|
|
}
|
|
|
|
|
|
- .type-name { color: #c62828; font-weight: 800; }
|
|
|
- }
|
|
|
-
|
|
|
- &.stage-default:hover {
|
|
|
- border-color: #adb5bd;
|
|
|
- transform: translateY(-2px);
|
|
|
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
|
-
|
|
|
- .type-icon {
|
|
|
- transform: scale(1.08);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 不同类型的配色
|
|
|
- &[data-color="primary"].active {
|
|
|
- background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
|
|
|
- border-color: transparent;
|
|
|
- box-shadow: 0 6px 20px rgba(79, 172, 254, 0.4);
|
|
|
-
|
|
|
- .type-icon {
|
|
|
- background: rgba(255, 255, 255, 0.25);
|
|
|
- .icon { color: white; }
|
|
|
- }
|
|
|
-
|
|
|
- .type-content {
|
|
|
- .type-name, .type-description { color: white; }
|
|
|
- }
|
|
|
-
|
|
|
- .file-count-badge {
|
|
|
- background: white;
|
|
|
- color: #4facfe;
|
|
|
+ .confirmed-icon {
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 700;
|
|
|
+ position: relative;
|
|
|
+ z-index: 1;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- &[data-color="secondary"].active {
|
|
|
- background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);
|
|
|
- border-color: transparent;
|
|
|
- box-shadow: 0 6px 20px rgba(250, 112, 154, 0.4);
|
|
|
-
|
|
|
- .type-icon {
|
|
|
- background: rgba(255, 255, 255, 0.25);
|
|
|
- .icon { color: white; }
|
|
|
- }
|
|
|
-
|
|
|
- .type-content {
|
|
|
- .type-name, .type-description { color: white; }
|
|
|
- }
|
|
|
-
|
|
|
- .file-count-badge {
|
|
|
- background: white;
|
|
|
- color: #fa709a;
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 展开/收起图标
|
|
|
+ .expand-icon {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ width: 36px;
|
|
|
+ height: 36px;
|
|
|
+ flex-shrink: 0;
|
|
|
+ background: linear-gradient(135deg, #f1f5f9 0%, #e2e8f0 100%);
|
|
|
+ border-radius: 50%;
|
|
|
+ color: #64748b;
|
|
|
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
|
+
|
|
|
+ &.expanded {
|
|
|
+ transform: rotate(180deg);
|
|
|
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
+ color: white;
|
|
|
}
|
|
|
-
|
|
|
- &[data-color="tertiary"].active {
|
|
|
- background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%);
|
|
|
- border-color: transparent;
|
|
|
- box-shadow: 0 6px 20px rgba(168, 237, 234, 0.4);
|
|
|
-
|
|
|
- .type-icon {
|
|
|
- background: rgba(255, 255, 255, 0.25);
|
|
|
- .icon { color: white; }
|
|
|
- }
|
|
|
-
|
|
|
- .type-content {
|
|
|
- .type-name, .type-description { color: white; }
|
|
|
- }
|
|
|
-
|
|
|
- .file-count-badge {
|
|
|
- background: white;
|
|
|
- color: #a8edea;
|
|
|
- }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ box-shadow: 0 2px 8px rgba(102, 126, 234, 0.2);
|
|
|
}
|
|
|
-
|
|
|
- &[data-color="success"].active {
|
|
|
- background: linear-gradient(135deg, #81fbb8 0%, #28c76f 100%);
|
|
|
- border-color: transparent;
|
|
|
- box-shadow: 0 6px 20px rgba(129, 251, 184, 0.4);
|
|
|
-
|
|
|
- .type-icon {
|
|
|
- background: rgba(255, 255, 255, 0.25);
|
|
|
- .icon { color: white; }
|
|
|
- }
|
|
|
-
|
|
|
- .type-content {
|
|
|
- .type-name, .type-description { color: white; }
|
|
|
- }
|
|
|
-
|
|
|
- .file-count-badge {
|
|
|
- background: white;
|
|
|
- color: #28c76f;
|
|
|
- }
|
|
|
+
|
|
|
+ svg {
|
|
|
+ width: 20px;
|
|
|
+ height: 20px;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- // 文件上传和展示区域
|
|
|
- .delivery-content-section {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- gap: 20px;
|
|
|
-
|
|
|
- // 上传区域
|
|
|
- .upload-section {
|
|
|
- .upload-area {
|
|
|
- background: white;
|
|
|
- border-radius: 16px;
|
|
|
- padding: 24px;
|
|
|
- border: 2px dashed #dee2e6;
|
|
|
- transition: all 0.3s ease;
|
|
|
-
|
|
|
- .upload-content {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- align-items: center;
|
|
|
- gap: 16px;
|
|
|
- text-align: center;
|
|
|
-
|
|
|
- .upload-icon {
|
|
|
- width: 56px;
|
|
|
- height: 56px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- border-radius: 50%;
|
|
|
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
- color: white;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 32px;
|
|
|
- height: 32px;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .upload-text {
|
|
|
- h4 {
|
|
|
- font-size: 16px;
|
|
|
- font-weight: 700;
|
|
|
- color: #212529;
|
|
|
- margin: 0 0 6px;
|
|
|
- }
|
|
|
-
|
|
|
- p {
|
|
|
- font-size: 13px;
|
|
|
- color: #6c757d;
|
|
|
- margin: 0;
|
|
|
- line-height: 1.4;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .upload-button {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- gap: 8px;
|
|
|
- padding: 12px 24px;
|
|
|
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
- color: white;
|
|
|
- border: none;
|
|
|
- border-radius: 10px;
|
|
|
- font-size: 14px;
|
|
|
- font-weight: 600;
|
|
|
- cursor: pointer;
|
|
|
- transition: all 0.3s ease;
|
|
|
- box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 20px;
|
|
|
- height: 20px;
|
|
|
- }
|
|
|
-
|
|
|
- &:hover:not(:disabled) {
|
|
|
- transform: translateY(-2px);
|
|
|
- box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
|
|
|
- }
|
|
|
-
|
|
|
- &:active:not(:disabled) {
|
|
|
- transform: translateY(0);
|
|
|
- }
|
|
|
-
|
|
|
- &:disabled {
|
|
|
- opacity: 0.6;
|
|
|
- cursor: not-allowed;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .upload-progress {
|
|
|
- margin-top: 16px;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- gap: 8px;
|
|
|
-
|
|
|
- .progress-bar {
|
|
|
- height: 8px;
|
|
|
- background: #e9ecef;
|
|
|
- border-radius: 10px;
|
|
|
- overflow: hidden;
|
|
|
-
|
|
|
- .progress-fill {
|
|
|
- height: 100%;
|
|
|
- background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
|
|
|
- border-radius: 10px;
|
|
|
- transition: width 0.3s ease;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .progress-text {
|
|
|
- font-size: 12px;
|
|
|
- color: #667eea;
|
|
|
- font-weight: 600;
|
|
|
- text-align: center;
|
|
|
- }
|
|
|
+
|
|
|
+ // 空间内容(展开时显示)
|
|
|
+ .space-content {
|
|
|
+ background: white;
|
|
|
+ border: 2px solid #e2e8f0;
|
|
|
+ border-top: none;
|
|
|
+ border-radius: 0 0 12px 12px;
|
|
|
+ padding: 24px;
|
|
|
+ margin-top: -12px;
|
|
|
+ animation: slideDown 0.3s ease-out;
|
|
|
+
|
|
|
+ // 空间标题栏
|
|
|
+ .space-title-bar {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-bottom: 24px;
|
|
|
+ padding: 20px;
|
|
|
+ background: linear-gradient(135deg, #fafbfc 0%, #f8fafc 100%);
|
|
|
+ border-radius: 12px;
|
|
|
+ border: 2px solid #e2e8f0;
|
|
|
+
|
|
|
+ h3 {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 22px;
|
|
|
+ font-weight: 700;
|
|
|
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
+ -webkit-background-clip: text;
|
|
|
+ -webkit-text-fill-color: transparent;
|
|
|
+ background-clip: text;
|
|
|
}
|
|
|
-
|
|
|
- &.uploading {
|
|
|
- border-color: #667eea;
|
|
|
- background: #f8f9ff;
|
|
|
+
|
|
|
+ .completion-badge {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ min-width: 70px;
|
|
|
+ height: 40px;
|
|
|
+ padding: 0 20px;
|
|
|
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
+ color: white;
|
|
|
+ border-radius: 20px;
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 800;
|
|
|
+ box-shadow: 0 6px 16px rgba(102, 126, 234, 0.4);
|
|
|
+ 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.3), transparent);
|
|
|
+ animation: shimmer 2s infinite;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- // 文件展示区域
|
|
|
- .files-display-section {
|
|
|
- .files-header {
|
|
|
- margin-bottom: 16px;
|
|
|
-
|
|
|
- h4 {
|
|
|
- font-size: 16px;
|
|
|
- font-weight: 700;
|
|
|
- color: #212529;
|
|
|
- margin: 0;
|
|
|
- }
|
|
|
+
|
|
|
+ @keyframes shimmer {
|
|
|
+ 0% { left: -100%; }
|
|
|
+ 100% { left: 100%; }
|
|
|
}
|
|
|
-
|
|
|
- .files-grid {
|
|
|
+
|
|
|
+ // 4个阶段卡片网格
|
|
|
+ .stages-grid {
|
|
|
display: grid;
|
|
|
- grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
|
|
|
- gap: 14px;
|
|
|
-
|
|
|
- .file-card {
|
|
|
- background: white;
|
|
|
- border-radius: 14px;
|
|
|
+ grid-template-columns: repeat(4, 1fr);
|
|
|
+ gap: 20px;
|
|
|
+ margin-bottom: 24px;
|
|
|
+
|
|
|
+ .stage-card {
|
|
|
+ position: relative;
|
|
|
+ background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
|
|
|
+ border: 3px solid #e2e8f0;
|
|
|
+ border-radius: 20px;
|
|
|
+ padding: 20px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
|
|
overflow: hidden;
|
|
|
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
|
|
|
- transition: all 0.3s ease;
|
|
|
-
|
|
|
+
|
|
|
+ // 柔化边缘效果
|
|
|
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);
|
|
|
+
|
|
|
+ // 背景装饰
|
|
|
+ &::before {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ top: -50%;
|
|
|
+ right: -50%;
|
|
|
+ width: 200%;
|
|
|
+ height: 200%;
|
|
|
+ background: radial-gradient(circle, rgba(102, 126, 234, 0.05) 0%, transparent 70%);
|
|
|
+ opacity: 0;
|
|
|
+ transition: opacity 0.4s ease;
|
|
|
+ }
|
|
|
+
|
|
|
&:hover {
|
|
|
- transform: translateY(-4px);
|
|
|
- box-shadow: 0 6px 20px rgba(0, 0, 0, 0.12);
|
|
|
+ transform: translateY(-6px) scale(1.02);
|
|
|
+ box-shadow: 0 12px 32px rgba(102, 126, 234, 0.2);
|
|
|
+ border-color: #667eea;
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- .file-preview {
|
|
|
- position: relative;
|
|
|
- width: 100%;
|
|
|
- aspect-ratio: 1;
|
|
|
- overflow: hidden;
|
|
|
- background: #f8f9fa;
|
|
|
- cursor: pointer;
|
|
|
-
|
|
|
- .preview-image {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- object-fit: cover;
|
|
|
+
|
|
|
+ // 不同阶段的渐变色(更鲜艳)
|
|
|
+ &[data-stage="white_model"] {
|
|
|
+ &.has-files {
|
|
|
+ background: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 50%, #a5b4fc 100%);
|
|
|
+ border-color: #818cf8;
|
|
|
+ box-shadow: 0 4px 16px rgba(129, 140, 248, 0.3);
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ box-shadow: 0 12px 32px rgba(129, 140, 248, 0.4);
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- .file-type-icon {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 48px;
|
|
|
- height: 48px;
|
|
|
- color: #adb5bd;
|
|
|
+ }
|
|
|
+
|
|
|
+ &[data-stage="soft_decor"] {
|
|
|
+ &.has-files {
|
|
|
+ background: linear-gradient(135deg, #fce7f3 0%, #fbcfe8 50%, #f9a8d4 100%);
|
|
|
+ border-color: #f472b6;
|
|
|
+ box-shadow: 0 4px 16px rgba(244, 114, 182, 0.3);
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ box-shadow: 0 12px 32px rgba(244, 114, 182, 0.4);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- .file-overlay {
|
|
|
- position: absolute;
|
|
|
- top: 0;
|
|
|
- left: 0;
|
|
|
- right: 0;
|
|
|
- bottom: 0;
|
|
|
- background: rgba(0, 0, 0, 0.6);
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- opacity: 0;
|
|
|
- transition: opacity 0.3s ease;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 32px;
|
|
|
- height: 32px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &[data-stage="rendering"] {
|
|
|
+ &.has-files {
|
|
|
+ background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 50%, #93c5fd 100%);
|
|
|
+ border-color: #60a5fa;
|
|
|
+ box-shadow: 0 4px 16px rgba(96, 165, 250, 0.3);
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ box-shadow: 0 12px 32px rgba(96, 165, 250, 0.4);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- &:hover .file-overlay {
|
|
|
- opacity: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ &[data-stage="post_process"] {
|
|
|
+ &.has-files {
|
|
|
+ background: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 50%, #6ee7b7 100%);
|
|
|
+ border-color: #34d399;
|
|
|
+ box-shadow: 0 4px 16px rgba(52, 211, 153, 0.3);
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ box-shadow: 0 12px 32px rgba(52, 211, 153, 0.4);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- .file-info {
|
|
|
- padding: 12px;
|
|
|
-
|
|
|
- .file-name {
|
|
|
- font-size: 13px;
|
|
|
+
|
|
|
+ .stage-card-header {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-bottom: 12px;
|
|
|
+
|
|
|
+ h4 {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 17px;
|
|
|
font-weight: 600;
|
|
|
- color: #212529;
|
|
|
- margin-bottom: 6px;
|
|
|
- overflow: hidden;
|
|
|
- text-overflow: ellipsis;
|
|
|
- white-space: nowrap;
|
|
|
+ color: #1e293b;
|
|
|
}
|
|
|
-
|
|
|
- .file-meta {
|
|
|
+
|
|
|
+ .image-count-badge {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- gap: 8px;
|
|
|
- font-size: 11px;
|
|
|
- color: #868e96;
|
|
|
- margin-bottom: 4px;
|
|
|
-
|
|
|
- .file-size {
|
|
|
- &::after {
|
|
|
- content: "•";
|
|
|
- margin-left: 8px;
|
|
|
- }
|
|
|
+ justify-content: center;
|
|
|
+ min-width: 32px;
|
|
|
+ height: 32px;
|
|
|
+ padding: 0 10px;
|
|
|
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
+ color: white;
|
|
|
+ border-radius: 16px;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 800;
|
|
|
+ box-shadow: 0 3px 12px rgba(102, 126, 234, 0.4);
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ // 脉冲动画
|
|
|
+ &::after {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ inset: -50%;
|
|
|
+ background: radial-gradient(circle, rgba(255, 255, 255, 0.4) 0%, transparent 70%);
|
|
|
+ animation: pulse 2s ease-in-out infinite;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- .file-uploader {
|
|
|
- font-size: 11px;
|
|
|
- color: #adb5bd;
|
|
|
- }
|
|
|
}
|
|
|
-
|
|
|
- .file-actions {
|
|
|
+
|
|
|
+ @keyframes pulse {
|
|
|
+ 0%, 100% { transform: scale(0.8); opacity: 0; }
|
|
|
+ 50% { transform: scale(1.2); opacity: 1; }
|
|
|
+ }
|
|
|
+
|
|
|
+ .stage-card-body {
|
|
|
+ width: 100%;
|
|
|
+ aspect-ratio: 1;
|
|
|
+ border-radius: 12px;
|
|
|
+ overflow: hidden;
|
|
|
+ background: white;
|
|
|
display: flex;
|
|
|
- gap: 6px;
|
|
|
- padding: 0 12px 12px;
|
|
|
-
|
|
|
- .action-button {
|
|
|
- flex: 1;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+
|
|
|
+ .stage-preview-img {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ object-fit: cover;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stage-placeholder {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
- padding: 8px;
|
|
|
- background: #f8f9fa;
|
|
|
- border: none;
|
|
|
- border-radius: 8px;
|
|
|
- cursor: pointer;
|
|
|
- transition: all 0.2s ease;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 18px;
|
|
|
- height: 18px;
|
|
|
- color: #6c757d;
|
|
|
- }
|
|
|
-
|
|
|
- &:hover {
|
|
|
- background: #e9ecef;
|
|
|
-
|
|
|
- .icon {
|
|
|
- color: #495057;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- &.preview:hover {
|
|
|
- background: #e3f2fd;
|
|
|
- .icon { color: #2196f3; }
|
|
|
- }
|
|
|
-
|
|
|
- &.download:hover {
|
|
|
- background: #e8f5e9;
|
|
|
- .icon { color: #4caf50; }
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ color: #cbd5e1;
|
|
|
+
|
|
|
+ svg {
|
|
|
+ width: 64px;
|
|
|
+ height: 64px;
|
|
|
}
|
|
|
-
|
|
|
- &.delete:hover {
|
|
|
- background: #ffebee;
|
|
|
- .icon { color: #f44336; }
|
|
|
+ }
|
|
|
+
|
|
|
+ .stage-empty-state {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ color: #94a3b8;
|
|
|
+ text-align: center;
|
|
|
+
|
|
|
+ p {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 14px;
|
|
|
+ line-height: 1.6;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- // 空状态
|
|
|
- .empty-state {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- padding: 60px 20px;
|
|
|
- text-align: center;
|
|
|
- background: white;
|
|
|
- border-radius: 16px;
|
|
|
-
|
|
|
- .empty-icon {
|
|
|
- width: 80px;
|
|
|
- height: 80px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- border-radius: 50%;
|
|
|
- background: #f8f9fa;
|
|
|
- margin-bottom: 20px;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 48px;
|
|
|
- height: 48px;
|
|
|
- color: #adb5bd;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- h4 {
|
|
|
- font-size: 18px;
|
|
|
- font-weight: 700;
|
|
|
- color: #495057;
|
|
|
- margin: 0 0 8px;
|
|
|
- }
|
|
|
-
|
|
|
- p {
|
|
|
- font-size: 14px;
|
|
|
- color: #868e96;
|
|
|
- margin: 0 0 24px;
|
|
|
- line-height: 1.5;
|
|
|
- }
|
|
|
-
|
|
|
- .upload-button-primary {
|
|
|
+
|
|
|
+ // 选中阶段的文件详情
|
|
|
+ .stage-files-detail {
|
|
|
+ background: #f8fafc;
|
|
|
+ border: 2px solid #e2e8f0;
|
|
|
+ border-radius: 12px;
|
|
|
+ padding: 20px;
|
|
|
+ margin-bottom: 20px;
|
|
|
+
|
|
|
+ .detail-header {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- gap: 8px;
|
|
|
- padding: 14px 28px;
|
|
|
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
- color: white;
|
|
|
- border: none;
|
|
|
- border-radius: 12px;
|
|
|
- font-size: 15px;
|
|
|
- font-weight: 600;
|
|
|
- cursor: pointer;
|
|
|
- transition: all 0.3s ease;
|
|
|
- box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 20px;
|
|
|
- height: 20px;
|
|
|
- }
|
|
|
-
|
|
|
- &:hover {
|
|
|
- transform: translateY(-2px);
|
|
|
- box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
|
|
|
- }
|
|
|
-
|
|
|
- &:active {
|
|
|
- transform: translateY(0);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 未选择场景状态
|
|
|
- .no-selection-state {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- padding: 80px 20px;
|
|
|
- text-align: center;
|
|
|
- background: white;
|
|
|
- border-radius: 16px;
|
|
|
- margin-top: 20px;
|
|
|
-
|
|
|
- .state-icon {
|
|
|
- width: 100px;
|
|
|
- height: 100px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- border-radius: 50%;
|
|
|
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
- margin-bottom: 24px;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 56px;
|
|
|
- height: 56px;
|
|
|
- color: white;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- h3 {
|
|
|
- font-size: 20px;
|
|
|
- font-weight: 700;
|
|
|
- color: #212529;
|
|
|
- margin: 0 0 10px;
|
|
|
- }
|
|
|
-
|
|
|
- p {
|
|
|
- font-size: 15px;
|
|
|
- color: #6c757d;
|
|
|
- margin: 0;
|
|
|
- line-height: 1.5;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 没有场景状态
|
|
|
- .no-products-state {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- padding: 80px 20px;
|
|
|
- text-align: center;
|
|
|
- background: white;
|
|
|
- border-radius: 16px;
|
|
|
-
|
|
|
- .state-icon {
|
|
|
- width: 100px;
|
|
|
- height: 100px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- border-radius: 50%;
|
|
|
- background: #f8f9fa;
|
|
|
- margin-bottom: 24px;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 56px;
|
|
|
- height: 56px;
|
|
|
- color: #adb5bd;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- h3 {
|
|
|
- font-size: 20px;
|
|
|
- font-weight: 700;
|
|
|
- color: #495057;
|
|
|
- margin: 0 0 10px;
|
|
|
- }
|
|
|
-
|
|
|
- p {
|
|
|
- font-size: 15px;
|
|
|
- color: #868e96;
|
|
|
- margin: 0;
|
|
|
- line-height: 1.5;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// 移动端响应式
|
|
|
-@media (max-width: 768px) {
|
|
|
- .stage-delivery-container {
|
|
|
- padding: 12px;
|
|
|
-
|
|
|
- .product-tabs-section {
|
|
|
- .product-tabs {
|
|
|
- grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
|
|
|
- gap: 8px;
|
|
|
-
|
|
|
- .product-tab {
|
|
|
- padding: 12px 10px;
|
|
|
-
|
|
|
- .product-icon {
|
|
|
- width: 32px;
|
|
|
- height: 32px;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 18px;
|
|
|
- height: 18px;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .product-name {
|
|
|
- font-size: 12px;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-bottom: 16px;
|
|
|
+
|
|
|
+ h4 {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #475569;
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .delivery-types-section {
|
|
|
- .delivery-types-tabs {
|
|
|
- grid-template-columns: repeat(2, 1fr);
|
|
|
- gap: 8px;
|
|
|
-
|
|
|
- .delivery-type-tab {
|
|
|
- padding: 14px 8px;
|
|
|
-
|
|
|
- .type-icon {
|
|
|
- width: 40px;
|
|
|
- height: 40px;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 22px;
|
|
|
- height: 22px;
|
|
|
+
|
|
|
+ .upload-detail-btn {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 6px;
|
|
|
+ padding: 8px 16px;
|
|
|
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+ border-radius: 8px;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 600;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+ box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
|
|
|
+
|
|
|
+ &:hover:not(:disabled) {
|
|
|
+ transform: translateY(-2px);
|
|
|
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- .type-content {
|
|
|
- .type-name {
|
|
|
- font-size: 13px;
|
|
|
+
|
|
|
+ &:disabled {
|
|
|
+ opacity: 0.6;
|
|
|
+ cursor: not-allowed;
|
|
|
}
|
|
|
-
|
|
|
- .type-description {
|
|
|
- font-size: 10px;
|
|
|
+
|
|
|
+ svg {
|
|
|
+ width: 18px;
|
|
|
+ height: 18px;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .delivery-content-section {
|
|
|
- gap: 16px;
|
|
|
-
|
|
|
- .upload-section {
|
|
|
- .upload-area {
|
|
|
- padding: 20px;
|
|
|
-
|
|
|
- .upload-content {
|
|
|
- gap: 12px;
|
|
|
-
|
|
|
- .upload-icon {
|
|
|
- width: 48px;
|
|
|
- height: 48px;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 28px;
|
|
|
- height: 28px;
|
|
|
+
|
|
|
+ .files-detail-grid {
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
|
|
|
+ gap: 12px;
|
|
|
+
|
|
|
+ .file-detail-item {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 6px;
|
|
|
+
|
|
|
+ .file-detail-preview {
|
|
|
+ position: relative;
|
|
|
+ width: 100%;
|
|
|
+ aspect-ratio: 1;
|
|
|
+ background: white;
|
|
|
+ border: 2px solid #e2e8f0;
|
|
|
+ border-radius: 10px;
|
|
|
+ overflow: hidden;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ border-color: #667eea;
|
|
|
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.2);
|
|
|
+ transform: translateY(-2px);
|
|
|
+
|
|
|
+ .delete-detail-btn {
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- .upload-text {
|
|
|
- h4 {
|
|
|
- font-size: 15px;
|
|
|
+
|
|
|
+ .file-detail-img {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ object-fit: cover;
|
|
|
}
|
|
|
-
|
|
|
- p {
|
|
|
- font-size: 12px;
|
|
|
+
|
|
|
+ .file-detail-placeholder {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ color: #cbd5e1;
|
|
|
+
|
|
|
+ svg {
|
|
|
+ width: 48px;
|
|
|
+ height: 48px;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- .upload-button {
|
|
|
- padding: 10px 20px;
|
|
|
- font-size: 13px;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 18px;
|
|
|
- height: 18px;
|
|
|
+
|
|
|
+ .delete-detail-btn {
|
|
|
+ position: absolute;
|
|
|
+ top: 6px;
|
|
|
+ right: 6px;
|
|
|
+ width: 28px;
|
|
|
+ height: 28px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ background: rgba(239, 68, 68, 0.9);
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+ border-radius: 6px;
|
|
|
+ cursor: pointer;
|
|
|
+ opacity: 0;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: rgba(220, 38, 38, 1);
|
|
|
+ transform: scale(1.1);
|
|
|
+ }
|
|
|
+
|
|
|
+ svg {
|
|
|
+ width: 16px;
|
|
|
+ height: 16px;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ .file-detail-name {
|
|
|
+ font-size: 12px;
|
|
|
+ color: #64748b;
|
|
|
+ text-align: center;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ white-space: nowrap;
|
|
|
+ padding: 0 4px;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- .files-display-section {
|
|
|
- .files-grid {
|
|
|
- grid-template-columns: repeat(2, 1fr);
|
|
|
+
|
|
|
+ // 空间确认按钮区域
|
|
|
+ .space-confirm-section {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ gap: 12px;
|
|
|
+ padding: 20px;
|
|
|
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
|
|
|
+ border: 2px solid #e2e8f0;
|
|
|
+ border-radius: 12px;
|
|
|
+
|
|
|
+ .space-confirm-btn,
|
|
|
+ .space-reconfirm-btn {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
gap: 12px;
|
|
|
+ padding: 18px 48px;
|
|
|
+ background: linear-gradient(135deg, #10b981 0%, #059669 100%);
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+ border-radius: 16px;
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 700;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
|
|
+ box-shadow: 0 6px 20px rgba(16, 185, 129, 0.4);
|
|
|
+ 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.3), transparent);
|
|
|
+ transition: left 0.5s ease;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover:not(:disabled) {
|
|
|
+ transform: translateY(-4px) scale(1.05);
|
|
|
+ box-shadow: 0 12px 32px rgba(16, 185, 129, 0.5);
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ left: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &:active:not(:disabled) {
|
|
|
+ transform: translateY(-2px) scale(1.02);
|
|
|
+ }
|
|
|
+
|
|
|
+ &:disabled {
|
|
|
+ opacity: 0.5;
|
|
|
+ cursor: not-allowed;
|
|
|
+ }
|
|
|
+
|
|
|
+ svg {
|
|
|
+ width: 24px;
|
|
|
+ height: 24px;
|
|
|
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2));
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .no-selection-state,
|
|
|
- .no-products-state {
|
|
|
- padding: 60px 16px;
|
|
|
-
|
|
|
- .state-icon {
|
|
|
- width: 80px;
|
|
|
- height: 80px;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 48px;
|
|
|
- height: 48px;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- h3 {
|
|
|
- font-size: 18px;
|
|
|
- }
|
|
|
-
|
|
|
- p {
|
|
|
- font-size: 14px;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 操作按钮(参考售后归档样式)
|
|
|
- .action-buttons {
|
|
|
- margin-top: 24px;
|
|
|
- padding: 16px;
|
|
|
-
|
|
|
- .btn {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- gap: 12px;
|
|
|
- padding: 18px 48px;
|
|
|
- border-radius: 14px;
|
|
|
- font-size: 17px;
|
|
|
- font-weight: 700;
|
|
|
- cursor: pointer;
|
|
|
- transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
|
|
|
- border: none;
|
|
|
- outline: none;
|
|
|
- min-height: 58px;
|
|
|
- width: 100%;
|
|
|
- max-width: 400px;
|
|
|
- position: relative;
|
|
|
- overflow: hidden;
|
|
|
- letter-spacing: 0.5px;
|
|
|
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 22px;
|
|
|
- height: 22px;
|
|
|
- filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.15));
|
|
|
- transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
|
|
|
- }
|
|
|
-
|
|
|
- // 多层按钮涟漪效果
|
|
|
- &::before {
|
|
|
- content: '';
|
|
|
- position: absolute;
|
|
|
- top: 50%;
|
|
|
- left: 50%;
|
|
|
- width: 0;
|
|
|
- height: 0;
|
|
|
- border-radius: 50%;
|
|
|
- background: radial-gradient(circle, rgba(255, 255, 255, 0.6) 0%, transparent 70%);
|
|
|
- transform: translate(-50%, -50%);
|
|
|
- transition: width 0.7s cubic-bezier(0.4, 0, 0.2, 1), height 0.7s cubic-bezier(0.4, 0, 0.2, 1);
|
|
|
- }
|
|
|
-
|
|
|
- // 光泽层
|
|
|
- &::after {
|
|
|
- content: '';
|
|
|
- position: absolute;
|
|
|
- top: -50%;
|
|
|
- left: -50%;
|
|
|
- width: 200%;
|
|
|
- height: 200%;
|
|
|
- background: linear-gradient(
|
|
|
- 120deg,
|
|
|
- transparent 0%,
|
|
|
- transparent 40%,
|
|
|
- rgba(255, 255, 255, 0.15) 50%,
|
|
|
- transparent 60%,
|
|
|
- transparent 100%
|
|
|
- );
|
|
|
- transform: translateX(-100%);
|
|
|
- transition: transform 0.6s ease;
|
|
|
- }
|
|
|
-
|
|
|
- &:active:not(:disabled)::before {
|
|
|
- width: 400px;
|
|
|
- height: 400px;
|
|
|
- transition: width 0.3s, height 0.3s;
|
|
|
- }
|
|
|
-
|
|
|
- &:hover:not(:disabled)::after {
|
|
|
- transform: translateX(100%);
|
|
|
- }
|
|
|
-
|
|
|
- // 提交审批按钮(参考售后归档样式)
|
|
|
- &.btn-primary {
|
|
|
- background: var(--primary-color, #3880ff);
|
|
|
- color: white;
|
|
|
-
|
|
|
- &:hover:not(:disabled) {
|
|
|
- background: #2f6ce5;
|
|
|
- transform: translateY(-2px);
|
|
|
- }
|
|
|
-
|
|
|
- &:active:not(:disabled) {
|
|
|
- transform: translateY(0);
|
|
|
+
|
|
|
+ .space-reconfirm-btn {
|
|
|
+ background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
|
|
|
+ box-shadow: 0 6px 20px rgba(245, 158, 11, 0.4);
|
|
|
+
|
|
|
+ &:hover:not(:disabled) {
|
|
|
+ box-shadow: 0 12px 32px rgba(245, 158, 11, 0.5);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- &.btn-block {
|
|
|
- width: 100%;
|
|
|
- }
|
|
|
-
|
|
|
- &.btn-large {
|
|
|
- padding: 16px 24px;
|
|
|
- font-size: 15px;
|
|
|
+
|
|
|
+ .confirm-hint {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 13px;
|
|
|
+ color: #94a3b8;
|
|
|
+ text-align: center;
|
|
|
}
|
|
|
-
|
|
|
- &:disabled {
|
|
|
- opacity: 0.5;
|
|
|
- cursor: not-allowed;
|
|
|
- pointer-events: none;
|
|
|
- box-shadow: none;
|
|
|
- transform: none;
|
|
|
- }
|
|
|
-
|
|
|
- .icon-spin {
|
|
|
- animation: spin 1s linear infinite;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 移动端优化
|
|
|
- @media (max-width: 768px) {
|
|
|
- padding: 24px 16px;
|
|
|
- margin: 32px auto 24px;
|
|
|
- border-radius: 16px;
|
|
|
-
|
|
|
- .btn {
|
|
|
- max-width: 100%;
|
|
|
- width: 100%;
|
|
|
- padding: 16px 36px;
|
|
|
- font-size: 16px;
|
|
|
- min-height: 54px;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 20px;
|
|
|
- height: 20px;
|
|
|
+
|
|
|
+ .space-confirmed-info {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 16px;
|
|
|
+ padding: 20px 32px;
|
|
|
+ background: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 50%, #6ee7b7 100%);
|
|
|
+ border: 3px solid #34d399;
|
|
|
+ border-radius: 16px;
|
|
|
+ color: #059669;
|
|
|
+ box-shadow: 0 6px 20px rgba(52, 211, 153, 0.3);
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ // 成功光环效果
|
|
|
+ &::before {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ inset: -50%;
|
|
|
+ background: radial-gradient(circle, rgba(255, 255, 255, 0.3) 0%, transparent 70%);
|
|
|
+ animation: successGlow 3s ease-in-out infinite;
|
|
|
+ }
|
|
|
+
|
|
|
+ svg {
|
|
|
+ width: 28px;
|
|
|
+ height: 28px;
|
|
|
+ flex-shrink: 0;
|
|
|
+ filter: drop-shadow(0 2px 6px rgba(5, 150, 105, 0.4));
|
|
|
+ position: relative;
|
|
|
+ z-index: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .confirmed-text {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 6px;
|
|
|
+ position: relative;
|
|
|
+ z-index: 1;
|
|
|
+
|
|
|
+ .confirmed-label {
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 700;
|
|
|
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
|
|
+ }
|
|
|
+
|
|
|
+ .confirmed-detail {
|
|
|
+ font-size: 14px;
|
|
|
+ color: #047857;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @media (max-width: 480px) {
|
|
|
- padding: 20px 12px;
|
|
|
- margin: 24px auto 20px;
|
|
|
-
|
|
|
- .btn {
|
|
|
- padding: 14px 28px;
|
|
|
- font-size: 15px;
|
|
|
- min-height: 50px;
|
|
|
- gap: 10px;
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 18px;
|
|
|
- height: 18px;
|
|
|
+
|
|
|
+ @keyframes successGlow {
|
|
|
+ 0%, 100% { transform: scale(1); opacity: 0.3; }
|
|
|
+ 50% { transform: scale(1.5); opacity: 0.6; }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @keyframes spin {
|
|
|
- from { transform: rotate(0deg); }
|
|
|
- to { transform: rotate(360deg); }
|
|
|
- }
|
|
|
-
|
|
|
- .button-tip {
|
|
|
- margin-top: 16px;
|
|
|
- padding: 12px 20px;
|
|
|
- text-align: center;
|
|
|
- background: linear-gradient(135deg, #fff3cd 0%, #ffeaa7 100%);
|
|
|
- border-left: 4px solid #ffc107;
|
|
|
- border-radius: 8px;
|
|
|
- color: #856404;
|
|
|
- font-size: 14px;
|
|
|
- box-shadow: 0 2px 8px rgba(255, 193, 7, 0.15);
|
|
|
-
|
|
|
- &::before {
|
|
|
- content: '💡 ';
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// ✨ 审批状态样式(紧凑单行样式)
|
|
|
-.file-approval-status {
|
|
|
- margin-top: 8px;
|
|
|
- padding: 6px 10px;
|
|
|
- background: #f8f9fa;
|
|
|
- border-radius: 6px;
|
|
|
- font-size: 12px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- gap: 6px;
|
|
|
- border-left: 3px solid #e0e0e0;
|
|
|
-
|
|
|
- .status-icon {
|
|
|
- font-size: 14px;
|
|
|
- line-height: 1;
|
|
|
- }
|
|
|
-
|
|
|
- .status-text {
|
|
|
- font-weight: 600;
|
|
|
- color: #495057;
|
|
|
- }
|
|
|
-
|
|
|
- .status-by {
|
|
|
- color: #6c757d;
|
|
|
- font-size: 11px;
|
|
|
- }
|
|
|
-
|
|
|
- .status-reason {
|
|
|
- color: #6c757d;
|
|
|
- font-size: 11px;
|
|
|
- font-style: italic;
|
|
|
- }
|
|
|
-
|
|
|
- &.status-pending {
|
|
|
- background: rgba(56, 128, 255, 0.1);
|
|
|
- border-left-color: #3880ff;
|
|
|
- }
|
|
|
-
|
|
|
- &.status-approved {
|
|
|
- background: rgba(45, 211, 111, 0.1);
|
|
|
- border-left-color: #2dd36f;
|
|
|
- }
|
|
|
-
|
|
|
- &.status-rejected {
|
|
|
- background: rgba(235, 68, 90, 0.1);
|
|
|
- border-left-color: #eb445a;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// 未验证文件徽章
|
|
|
-.unverified-badge {
|
|
|
- display: inline-block;
|
|
|
- padding: 2px 8px;
|
|
|
- background: #ff9f43;
|
|
|
- color: white;
|
|
|
- border-radius: 10px;
|
|
|
- font-size: 11px;
|
|
|
- font-weight: 600;
|
|
|
- margin-left: 8px;
|
|
|
- animation: pulse 2s ease-in-out infinite;
|
|
|
-}
|
|
|
-
|
|
|
-@keyframes pulse {
|
|
|
- 0%, 100% {
|
|
|
- opacity: 1;
|
|
|
- }
|
|
|
- 50% {
|
|
|
- opacity: 0.7;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// 类型徽章容器
|
|
|
-.type-badges {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- gap: 8px;
|
|
|
-}
|
|
|
-
|
|
|
-// ✨ 文件卡片增强样式(参考售后归档)
|
|
|
-.file-card {
|
|
|
- transition: all 0.3s ease;
|
|
|
-
|
|
|
- &.has-approval-issue {
|
|
|
- border: 2px solid #eb445a;
|
|
|
- animation: shake 0.5s ease-in-out;
|
|
|
- }
|
|
|
-
|
|
|
- .file-preview {
|
|
|
- position: relative;
|
|
|
+ // 没有场景时的提示
|
|
|
+ .no-products-state {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ padding: 100px 20px;
|
|
|
+ background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
|
|
|
+ border-radius: 20px;
|
|
|
+ border: 3px dashed #e2e8f0;
|
|
|
|
|
|
- // 审批状态角标
|
|
|
- .approval-corner-badge {
|
|
|
- position: absolute;
|
|
|
- top: 8px;
|
|
|
- right: 8px;
|
|
|
- width: 32px;
|
|
|
- height: 32px;
|
|
|
- border-radius: 50%;
|
|
|
+ .state-icon {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
- font-size: 16px;
|
|
|
- background: rgba(255, 255, 255, 0.95);
|
|
|
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
|
|
- z-index: 2;
|
|
|
-
|
|
|
- &.badge-unverified {
|
|
|
- background: linear-gradient(135deg, #fff3cd, #ffc107);
|
|
|
- }
|
|
|
-
|
|
|
- &.badge-pending {
|
|
|
- background: linear-gradient(135deg, #d1ecf1, #17a2b8);
|
|
|
- }
|
|
|
-
|
|
|
- &.badge-approved {
|
|
|
- background: linear-gradient(135deg, #d4edda, #28a745);
|
|
|
- }
|
|
|
+ width: 120px;
|
|
|
+ height: 120px;
|
|
|
+ background: linear-gradient(135deg, #f1f5f9 0%, #e2e8f0 100%);
|
|
|
+ border-radius: 50%;
|
|
|
+ color: #94a3b8;
|
|
|
+ margin-bottom: 24px;
|
|
|
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
|
|
|
|
|
|
- &.badge-rejected {
|
|
|
- background: linear-gradient(135deg, #f8d7da, #dc3545);
|
|
|
+ svg {
|
|
|
+ width: 72px;
|
|
|
+ height: 72px;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 删除按钮(参考售后归档样式)
|
|
|
- .delete-btn {
|
|
|
- position: absolute;
|
|
|
- top: 8px;
|
|
|
- left: 8px;
|
|
|
- width: 32px;
|
|
|
- height: 32px;
|
|
|
- border: none;
|
|
|
- background: rgba(235, 68, 90, 0.9);
|
|
|
- border-radius: 50%;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- cursor: pointer;
|
|
|
- transition: all 0.3s;
|
|
|
- padding: 0;
|
|
|
- z-index: 3;
|
|
|
- opacity: 0;
|
|
|
-
|
|
|
- &:hover {
|
|
|
- background: #eb445a;
|
|
|
- transform: scale(1.1);
|
|
|
- }
|
|
|
-
|
|
|
- .icon {
|
|
|
- width: 18px;
|
|
|
- height: 18px;
|
|
|
- color: white;
|
|
|
- }
|
|
|
+ h3 {
|
|
|
+ margin: 0 0 12px 0;
|
|
|
+ font-size: 24px;
|
|
|
+ font-weight: 700;
|
|
|
+ background: linear-gradient(135deg, #475569 0%, #64748b 100%);
|
|
|
+ -webkit-background-clip: text;
|
|
|
+ -webkit-text-fill-color: transparent;
|
|
|
+ background-clip: text;
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- &:hover {
|
|
|
- .delete-btn {
|
|
|
- opacity: 1;
|
|
|
+
|
|
|
+ p {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 16px;
|
|
|
+ color: #94a3b8;
|
|
|
+ font-weight: 500;
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-@keyframes shake {
|
|
|
- 0%, 100% {
|
|
|
- transform: translateX(0);
|
|
|
- }
|
|
|
- 25% {
|
|
|
- transform: translateX(-5px);
|
|
|
- }
|
|
|
- 75% {
|
|
|
- transform: translateX(5px);
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
-@media (max-width: 480px) {
|
|
|
- .stage-delivery-container {
|
|
|
- .product-tabs-section {
|
|
|
- .product-tabs {
|
|
|
- grid-template-columns: repeat(2, 1fr);
|
|
|
- }
|
|
|
+ // 动画
|
|
|
+ @keyframes slideDown {
|
|
|
+ from {
|
|
|
+ opacity: 0;
|
|
|
+ transform: translateY(-10px);
|
|
|
}
|
|
|
-
|
|
|
- .delivery-content-section {
|
|
|
- .files-display-section {
|
|
|
- .files-grid {
|
|
|
- grid-template-columns: repeat(2, 1fr);
|
|
|
- }
|
|
|
- }
|
|
|
+ to {
|
|
|
+ opacity: 1;
|
|
|
+ transform: translateY(0);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-// 🎨 按钮加载动画
|
|
|
-.icon-spin {
|
|
|
- animation: spin 1s linear infinite;
|
|
|
-}
|
|
|
-
|
|
|
-@keyframes spin {
|
|
|
- from {
|
|
|
- transform: rotate(0deg);
|
|
|
- }
|
|
|
- to {
|
|
|
- transform: rotate(360deg);
|
|
|
- }
|
|
|
-}
|