.uploadContainer { width: 100%; // 自定义上传组件样式 :global { .adm-image-uploader { .adm-image-uploader-upload-button { width: 100px; height: 100px; border: 1px dashed #d9d9d9; border-radius: 8px; background: #fafafa; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.3s; &:hover { border-color: #1677ff; background: #f0f8ff; } .adm-image-uploader-upload-button-icon { font-size: 32px; color: #999; } } .adm-image-uploader-item { width: 100px; height: 100px; border-radius: 8px; overflow: hidden; position: relative; .adm-image-uploader-item-image { width: 100%; height: 100%; object-fit: cover; } .adm-image-uploader-item-delete { position: absolute; top: 4px; right: 4px; width: 24px; height: 24px; background: rgba(0, 0, 0, 0.6); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white; font-size: 14px; cursor: pointer; } .adm-image-uploader-item-loading { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.8); display: flex; align-items: center; justify-content: center; } } } } } // 禁用状态 .uploadContainer.disabled { opacity: 0.6; pointer-events: none; } // 错误状态 .uploadContainer.error { :global { .adm-image-uploader-upload-button { border-color: #ff4d4f; background: #fff2f0; } } } // 响应式设计 @media (max-width: 768px) { .uploadContainer { :global { .adm-image-uploader { .adm-image-uploader-upload-button, .adm-image-uploader-item { width: 80px; height: 80px; } .adm-image-uploader-upload-button-icon { font-size: 28px; } } } } } // 头像上传组件样式 .avatarUploadContainer { display: flex; flex-direction: column; align-items: center; gap: 12px; .avatarWrapper { position: relative; border-radius: 50%; overflow: hidden; background: #f0f0f0; border: 2px solid #e0e0e0; cursor: pointer; transition: all 0.3s ease; &:hover { border-color: var(--primary-color); box-shadow: 0 4px 12px rgba(24, 142, 238, 0.3); } .avatarImage { width: 100%; height: 100%; object-fit: cover; } .avatarPlaceholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; font-size: 40px; } .avatarUploadOverlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; color: white; font-size: 24px; opacity: 0; transition: opacity 0.3s ease; &:hover { opacity: 1; } .uploadLoading { font-size: 12px; text-align: center; line-height: 1.4; } } .avatarDeleteBtn { position: absolute; top: -8px; right: -8px; width: 24px; height: 24px; background: #ff4d4f; color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 16px; font-weight: bold; cursor: pointer; transition: all 0.3s ease; z-index: 10; &:hover { background: #ff7875; transform: scale(1.1); } } &:hover .avatarUploadOverlay { opacity: 1; } } .avatarTip { font-size: 12px; color: #999; text-align: center; line-height: 1.4; max-width: 200px; } } // 视频上传组件样式 .videoUploadContainer { width: 100%; .videoUploadButton { width: 100%; min-height: 120px; 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: 32px; color: #1890ff; animation: pulse 2s infinite; } .uploadingText { font-size: 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: 48px; color: #1890ff; transition: all 0.3s ease; } .uploadText { .uploadTitle { font-size: 16px; font-weight: 600; color: #333; margin-bottom: 4px; } .uploadSubtitle { font-size: 12px; color: #666; line-height: 1.4; } } &:hover .uploadIcon { transform: scale(1.1); color: #40a9ff; } } } .videoItem { 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); } .videoItemContent { display: flex; align-items: center; gap: 12px; .videoIcon { width: 40px; height: 40px; background: linear-gradient(135deg, #1890ff 0%, #40a9ff 100%); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: white; font-size: 18px; flex-shrink: 0; } .videoInfo { flex: 1; min-width: 0; .videoName { font-size: 14px; font-weight: 500; color: #333; margin-bottom: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .videoSize { font-size: 12px; color: #666; } } .videoActions { 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; } } .videoPreview { display: flex; justify-content: center; align-items: center; background: #000; border-radius: 8px; overflow: hidden; video { border-radius: 8px; } } } // 动画效果 @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.1); } 100% { transform: scale(1); } } // 暗色主题支持 @media (prefers-color-scheme: dark) { .videoUploadContainer { .videoUploadButton { background: linear-gradient(135deg, #2a2a2a 0%, #1f1f1f 100%); border-color: #434343; &:hover { background: linear-gradient(135deg, #1a365d 0%, #2d3748 100%); border-color: #40a9ff; } .uploadingContainer { .uploadingText { color: #ccc; } } .uploadContent { .uploadText { .uploadTitle { color: #fff; } .uploadSubtitle { color: #ccc; } } } } .videoItem { background: #2a2a2a; border-color: #434343; &:hover { border-color: #40a9ff; } .videoItemContent { .videoInfo { .videoName { color: #fff; } .videoSize { color: #ccc; } } .videoActions { .previewBtn, .deleteBtn { &:hover { background: #434343; } } } } } } }