添加项目基础文件结构、路由配置、API接口和核心组件 实现登录认证、权限控制、WebSocket通信等基础功能 引入antd-mobile UI组件库和Vite构建工具 配置TypeScript、ESLint、Prettier等开发环境 添加移动端适配方案和全局样式 完成首页、工作台、个人中心等基础页面框架
266 lines
5.1 KiB
SCSS
266 lines
5.1 KiB
SCSS
.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);
|
|
}
|
|
}
|