.fileUploadContainer { width: 100%; // 覆盖 antd Upload 组件的默认样式 :global { .ant-upload { width: 100%; } .ant-upload-list { width: 100%; } .ant-upload-list-text { width: 100%; } .ant-upload-list-text .ant-upload-list-item { width: 100%; } } .fileUploadButton { width: 100%; aspect-ratio: 16 / 9; min-height: clamp(90px, 20vw, 180px); border: 2px dashed #d9d9d9; border-radius: 12px; background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%); display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.3s ease; position: relative; overflow: hidden; &:hover { border-color: #1890ff; background: linear-gradient(135deg, #f0f8ff 0%, #e6f7ff 100%); transform: translateY(-2px); box-shadow: 0 8px 25px rgba(24, 144, 255, 0.15); } &:active { transform: translateY(0); } .uploadingContainer { display: flex; flex-direction: column; align-items: center; gap: 12px; width: 100%; padding: 20px; .uploadingIcon { font-size: clamp(24px, 4vw, 32px); color: #1890ff; animation: pulse 2s infinite; } .uploadingText { font-size: clamp(11px, 2vw, 14px); color: #666; font-weight: 500; } .uploadProgress { width: 100%; max-width: 200px; } } .uploadContent { display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 20px; text-align: center; .uploadIcon { font-size: clamp(50px, 6vw, 48px); color: #1890ff; transition: all 0.3s ease; } .uploadText { .uploadTitle { font-size: clamp(14px, 2.5vw, 16px); font-weight: 600; color: #333; margin-bottom: 4px; } .uploadSubtitle { font-size: clamp(10px, 1.5vw, 14px); color: #666; line-height: 1.4; } } &:hover .uploadIcon { transform: scale(1.1); color: #40a9ff; } } } .fileItem { width: 100%; background: #fff; border: 1px solid #f0f0f0; border-radius: 8px; padding: 12px; margin-bottom: 8px; transition: all 0.3s ease; &:hover { border-color: #1890ff; box-shadow: 0 4px 12px rgba(24, 144, 255, 0.1); } .fileItemContent { display: flex; align-items: center; gap: 12px; .fileIcon { width: clamp(28px, 5vw, 40px); height: clamp(28px, 5vw, 40px); border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: clamp(14px, 2.5vw, 18px); flex-shrink: 0; // Excel文件图标样式 :global(.anticon-file-excel) { color: #217346; background: rgba(33, 115, 70, 0.1); } // Word文件图标样式 :global(.anticon-file-word) { color: #2b579a; background: rgba(43, 87, 154, 0.1); } // PPT文件图标样式 :global(.anticon-file-ppt) { color: #d24726; background: rgba(210, 71, 38, 0.1); } // 默认文件图标样式 :global(.anticon-file) { color: #666; background: rgba(102, 102, 102, 0.1); } } .fileInfo { flex: 1; min-width: 0; .fileName { font-size: clamp(11px, 2vw, 14px); font-weight: 500; color: #333; margin-bottom: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .fileSize { font-size: clamp(10px, 1.5vw, 12px); color: #666; } } .fileActions { display: flex; gap: 4px; flex-shrink: 0; .previewBtn, .deleteBtn { padding: 4px 8px; border-radius: 6px; transition: all 0.3s ease; &:hover { background: #f5f5f5; } } .previewBtn { color: #1890ff; &:hover { color: #40a9ff; background: #e6f7ff; } } .deleteBtn { color: #ff4d4f; &:hover { color: #ff7875; background: #fff2f0; } } } } .itemProgress { margin-top: 8px; } } .filePreview { display: flex; justify-content: center; align-items: center; background: #f5f5f5; border-radius: 8px; overflow: hidden; iframe { border-radius: 8px; } } } // 禁用状态 .fileUploadContainer.disabled { opacity: 0.6; pointer-events: none; } // 错误状态 .fileUploadContainer.error { .fileUploadButton { border-color: #ff4d4f; background: #fff2f0; } } // 动画效果 @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.1); } 100% { transform: scale(1); } }