blob: af9e421871f822c85e391b1d5b63a02b6390858f [file] [log] [blame]
Akane121765b61a72025-05-17 13:52:25 +08001/* src/components/Dashboard.css */
2.dashboard-container {
3 display: flex;
4 flex-direction: column;
5 height: 100vh;
6 background-color: #f5f5f5;
7 }
8
9 .top-bar {
10 display: flex;
11 justify-content: space-between;
12 align-items: center;
13 padding: 10px 20px;
14 background-color: #fff;
15 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
16 position: sticky;
17 top: 0;
18 z-index: 100;
19 }
20
21 .search-container {
22 display: flex;
23 flex-grow: 1;
24 max-width: 600px;
25 margin: 0 auto;
26 }
27
28 .search-input {
29 flex-grow: 1;
30 padding: 8px 15px;
31 border: 1px solid #ddd;
32 border-radius: 20px 0 0 20px;
33 font-size: 16px;
34 outline: none;
35 }
36
37 .search-button {
38 padding: 8px 15px;
39 background-color: #007bff;
40 color: white;
41 border: none;
42 border-radius: 0 20px 20px 0;
43 cursor: pointer;
44 font-size: 16px;
45 }
46
47 .search-button:hover {
48 background-color: #0056b3;
49 }
50
51 .user-info {
52 display: flex;
53 align-items: center;
54 gap: 10px;
55 }
56
57 .user-avatar {
58 width: 40px;
59 height: 40px;
60 border-radius: 50%;
61 object-fit: cover;
62 }
63
64 .username {
65 font-weight: bold;
66 }
67
68 .logout-button {
69 padding: 5px 10px;
70 background-color: #f8f9fa;
71 border: 1px solid #ddd;
72 border-radius: 4px;
73 cursor: pointer;
74 margin-left: 10px;
75 }
76
77 .logout-button:hover {
78 background-color: #e9ecef;
79 }
80
81 .nav-tabs {
82 display: flex;
83 background-color: #fff;
84 border-bottom: 1px solid #ddd;
85 padding: 0 20px;
86 }
87
88 .tab-button {
89 padding: 12px 20px;
90 background: none;
91 border: none;
92 border-bottom: 3px solid transparent;
93 cursor: pointer;
94 font-size: 16px;
95 color: #666;
96 }
97
98 .tab-button:hover {
99 color: #007bff;
100 }
101
102 .tab-button.active {
103 color: #007bff;
104 border-bottom-color: #007bff;
105 font-weight: bold;
106 }
107
108 .content-area {
109 flex-grow: 1;
110 padding: 20px;
111 background-color: #fff;
112 margin: 20px;
113 border-radius: 4px;
114 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
115 }
116
117 .loading, .error {
118 padding: 20px;
119 text-align: center;
120 font-size: 18px;
121 }
122
123 .error {
124 color: #dc3545;
125 }
126
127/* 公告区样式 */
128 /* 轮播图样式 */
129.carousel-container {
130 position: relative;
131 width: 100%;
132 height: 200px;
133 overflow: hidden;
134 margin-bottom: 20px;
135 border-radius: 4px;
136 }
137
138 .carousel-slide {
139 position: absolute;
140 width: 100%;
141 height: 100%;
142 opacity: 0;
143 transition: opacity 1s ease-in-out;
144 }
145
146 .carousel-slide.active {
147 opacity: 1;
148 }
149
150 .carousel-image {
151 width: 100%;
152 height: 100%;
153 display: flex;
154 align-items: center;
155 justify-content: center;
156 font-size: 24px;
157 font-weight: bold;
158 color: white;
159 }
160
161 .gray-bg {
162 background-color: #666;
163 }
164
165 .carousel-dots {
166 position: absolute;
167 bottom: 15px;
168 left: 0;
169 right: 0;
170 display: flex;
171 justify-content: center;
172 gap: 10px;
173 }
174
175 .dot {
176 width: 12px;
177 height: 12px;
178 border-radius: 50%;
179 background-color: rgba(255, 255, 255, 0.5);
180 cursor: pointer;
181 }
182
183 .dot.active {
184 background-color: white;
185 }
186
187 /* 公告网格样式 */
188 .announcement-grid {
189 display: grid;
190 grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
191 gap: 20px;
192 }
193
194 .announcement-card {
195 background-color: white;
196 padding: 15px;
197 border-radius: 4px;
198 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
199 transition: transform 0.2s, box-shadow 0.2s;
200 }
201
202 .announcement-card:hover {
203 transform: translateY(-2px);
204 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
205 }
206
207 .announcement-card h3 {
208 margin-top: 0;
209 color: #007bff;
210 border-bottom: 1px solid #eee;
211 padding-bottom: 8px;
212 }
213
214 .announcement-card p {
215 margin-bottom: 0;
216 color: #666;
217 line-height: 1.5;
218 }
219/* 分享区样式 */
220 /* 上传头部样式 */
221.upload-header {
222 margin-bottom: 20px;
223 display: flex;
224 justify-content: flex-start;
225}
226
227.upload-btn {
228 padding: 10px 20px;
229 background: #1890ff;
230 color: white;
231 border: none;
232 border-radius: 4px;
233 font-size: 16px;
234 cursor: pointer;
235 transition: all 0.3s;
236}
237
238.upload-btn:hover {
239 background: #40a9ff;
240}
241
242/* 弹窗样式 */
243.modal-overlay {
244 position: fixed;
245 top: 0;
246 left: 0;
247 right: 0;
248 bottom: 0;
249 background: rgba(0,0,0,0.5);
250 display: flex;
251 justify-content: center;
252 align-items: center;
253 z-index: 1000;
254}
255
256.upload-modal {
257 background: white;
258 padding: 25px;
259 border-radius: 8px;
260 width: 500px;
261 max-width: 90%;
262 position: relative;
263}
264
265.close-btn {
266 position: absolute;
267 top: 15px;
268 right: 15px;
269 background: none;
270 border: none;
271 font-size: 20px;
272 cursor: pointer;
273}
274
275/* 表单样式 */
276.form-group {
277 margin-bottom: 15px;
278}
279
280.form-group label {
281 display: block;
282 margin-bottom: 5px;
283 font-weight: 500;
284}
285
286.form-group input[type="text"],
287.form-group select,
288.form-group textarea {
289 width: 100%;
290 padding: 8px;
291 border: 1px solid #d9d9d9;
292 border-radius: 4px;
293}
294
295.form-group textarea {
296 min-height: 80px;
297}
298
299.form-actions {
300 display: flex;
301 justify-content: flex-end;
302 gap: 10px;
303 margin-top: 20px;
304}
305
306.cancel-btn {
307 padding: 8px 15px;
308 background: #f5f5f5;
309 border: 1px solid #d9d9d9;
310 border-radius: 4px;
311 cursor: pointer;
312}
313
314.cancel-btn:hover {
315 background: #e6e6e6;
316}
317 /* 筛选区域 */
318.filter-section {
319 background: #f9f9f9;
320 padding: 15px;
321 border-radius: 8px;
322 margin-bottom: 20px;
323}
324
325.filter-group {
326 margin-bottom: 15px;
327}
328
329.filter-group h4 {
330 margin: 0 0 8px 0;
331 font-size: 15px;
332 color: #666;
333}
334
335/* 筛选按钮 */
336.filter-btn {
337 padding: 6px 12px;
338 margin-right: 8px;
339 margin-bottom: 8px;
340 border: 1px solid #ddd;
341 background: white;
342 border-radius: 4px;
343 cursor: pointer;
344 transition: all 0.2s;
345}
346
347.filter-btn:hover {
348 border-color: #1890ff;
349 color: #1890ff;
350}
351
352.filter-btn.active {
353 background: #1890ff;
354 color: white;
355 border-color: #1890ff;
356}
357
358/* 确定按钮 */
359.confirm-btn {
360 padding: 8px 20px;
361 background: #1890ff;
362 color: white;
363 border: none;
364 border-radius: 4px;
365 cursor: pointer;
366 font-size: 14px;
367 transition: opacity 0.3s;
368}
369
370.confirm-btn:hover {
371 background: #007bff;
372}
373
374.confirm-btn:disabled {
375 opacity: 0.5;
376 cursor: not-allowed;
377}
378
379
380/* 资源列表 */
381.resource-list {
382 display: flex;
383 flex-direction: column;
384 gap: 15px;
385}
386
387.resource-item {
388 display: flex;
389 align-items: center;
390 padding: 15px;
391 background-color: white;
392 border-radius: 4px;
393 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
394 transition: transform 0.2s, box-shadow 0.2s;
395}
396
397.resource-item:hover {
398 transform: translateY(-2px);
399 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
400}
401
402.resource-poster {
403 margin-right: 15px;
404}
405
406.poster-image {
407 width: 60px;
408 height: 80px;
409 background-color: #666;
410 display: flex;
411 align-items: center;
412 justify-content: center;
413 color: white;
414 font-size: 24px;
415 font-weight: bold;
416 border-radius: 4px;
417}
418
419.resource-info {
420 flex-grow: 1;
421}
422
423.resource-title {
424 margin: 0 0 5px 0;
425 font-size: 16px;
426 font-weight: bold;
427}
428
429.resource-meta {
430 margin: 0;
431 font-size: 14px;
432 color: #666;
433}
434
435.resource-stats {
436 display: flex;
437 flex-direction: column;
438 align-items: flex-end;
439 margin-right: 20px;
440 min-width: 150px;
441}
442
443.stat {
444 font-size: 13px;
445 color: #666;
446 margin-bottom: 5px;
447}
448
449.download-btn {
450 padding: 8px 15px;
451 background-color: #28a745;
452 color: white;
453 border: none;
454 border-radius: 4px;
455 cursor: pointer;
456 font-size: 14px;
457 transition: background-color 0.2s;
458}
459
460.download-btn:hover {
461 background-color: #218838;
462}
463/* 发帖按钮样式 */
464.post-header {
465 margin-bottom: 20px;
466 text-align: right;
467}
468
469.create-post-btn {
470 background-color: #1890ff;
471 color: white;
472 border: none;
473 padding: 8px 16px;
474 border-radius: 4px;
475 cursor: pointer;
476 font-size: 14px;
477 transition: background-color 0.3s;
478}
479
480.create-post-btn:hover {
481 background-color: #40a9ff;
482}
483
484/* 弹窗样式 */
485.post-modal-overlay {
486 position: fixed;
487 top: 0;
488 left: 0;
489 right: 0;
490 bottom: 0;
491 background-color: rgba(0, 0, 0, 0.5);
492 display: flex;
493 justify-content: center;
494 align-items: center;
495 z-index: 1000;
496}
497
498.post-modal {
499 background-color: white;
500 padding: 24px;
501 border-radius: 8px;
502 width: 500px;
503 max-width: 90%;
504 position: relative;
505 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
506}
507
508.post-modal h3 {
509 margin-top: 0;
510 margin-bottom: 20px;
511 font-size: 18px;
512 color: #333;
513}
514
515.modal-close-btn {
516 position: absolute;
517 top: 16px;
518 right: 16px;
519 background: none;
520 border: none;
521 font-size: 20px;
522 cursor: pointer;
523 color: #999;
524}
525
526.modal-close-btn:hover {
527 color: #666;
528}
529
530/* 表单样式 */
531.form-group {
532 margin-bottom: 16px;
533}
534
535.form-group label {
536 display: block;
537 margin-bottom: 8px;
538 font-weight: 500;
539 color: #333;
540}
541
542.form-group input[type="text"],
543.form-group textarea {
544 width: 100%;
545 padding: 8px 12px;
546 border: 1px solid #d9d9d9;
547 border-radius: 4px;
548 font-size: 14px;
549}
550
551.form-group textarea {
552 min-height: 120px;
553 resize: vertical;
554}
555
556.upload-image-btn {
557 display: flex;
558 align-items: center;
559}
560
561.upload-image-btn label {
562 background-color: #f5f5f5;
563 padding: 8px 16px;
564 border-radius: 4px;
565 cursor: pointer;
566 border: 1px dashed #d9d9d9;
567 margin-right: 10px;
568 transition: all 0.3s;
569}
570
571.upload-image-btn label:hover {
572 border-color: #1890ff;
573 color: #1890ff;
574}
575
576.image-name {
577 font-size: 14px;
578 color: #666;
579}
580
581/* 按钮样式 */
582.form-actions {
583 display: flex;
584 justify-content: flex-end;
585 margin-top: 24px;
586}
587
588.cancel-btn {
589 background-color: #f5f5f5;
590 color: #333;
591 border: none;
592 padding: 8px 16px;
593 border-radius: 4px;
594 cursor: pointer;
595 margin-right: 10px;
596 transition: background-color 0.3s;
597}
598
599.cancel-btn:hover {
600 background-color: #e6e6e6;
601}
602
603.submit-btn {
604 background-color: #1890ff;
605 color: white;
606 border: none;
607 padding: 8px 16px;
608 border-radius: 4px;
609 cursor: pointer;
610 transition: background-color 0.3s;
611}
612
613.submit-btn:hover {
614 background-color: #40a9ff;
615}
616
617.pagination {
618 display: flex;
619 justify-content: center;
620 margin: 20px 0;
621 gap: 5px;
622}
623
624.pagination button {
625 padding: 5px 10px;
626 border: 1px solid #ddd;
627 background: white;
628 cursor: pointer;
629}
630
631.pagination button.active {
632 background: #1890ff;
633 color: white;
634 border-color: #1890ff;
635}
636
637.pagination button:disabled {
638 opacity: 0.5;
639 cursor: not-allowed;
640}
641
642.filter-section {
643 position: sticky;
644 top: 0;
645 background: white;
646 z-index: 100;
647 padding: 15px;
648 box-shadow: 0 2px 5px rgba(0,0,0,0.1);
649}