neo-cmp-cli 1.1.7 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/package.json +1 -1
  2. package/src/module/index.js +5 -0
  3. package/src/module/main.js +3 -3
  4. package/src/module/neoInitByCopy.js +4 -0
  5. package/src/template/antd-custom-cmp-template/.prettierrc.js +12 -0
  6. package/src/template/antd-custom-cmp-template/README.md +47 -0
  7. package/src/template/antd-custom-cmp-template/commitlint.config.js +59 -0
  8. package/src/template/antd-custom-cmp-template/neo.config.js +109 -0
  9. package/src/template/antd-custom-cmp-template/package.json +59 -0
  10. package/src/template/antd-custom-cmp-template/public/css/base.css +283 -0
  11. package/src/template/antd-custom-cmp-template/public/scripts/app/bluebird.js +6679 -0
  12. package/src/template/antd-custom-cmp-template/public/template.html +13 -0
  13. package/src/template/antd-custom-cmp-template/src/assets/css/common.scss +127 -0
  14. package/src/template/antd-custom-cmp-template/src/assets/css/mixin.scss +47 -0
  15. package/src/template/antd-custom-cmp-template/src/components/data-dashboard/README.md +39 -0
  16. package/src/template/antd-custom-cmp-template/src/components/data-dashboard/index.tsx +462 -0
  17. package/src/template/antd-custom-cmp-template/src/components/data-dashboard/model.ts +76 -0
  18. package/src/template/antd-custom-cmp-template/src/components/data-dashboard/style.scss +1409 -0
  19. package/src/template/antd-custom-cmp-template/src/components/info-card/index.tsx +72 -0
  20. package/src/template/antd-custom-cmp-template/src/components/info-card/model.ts +78 -0
  21. package/src/template/antd-custom-cmp-template/src/components/info-card/style.scss +105 -0
  22. package/src/template/antd-custom-cmp-template/tsconfig.json +68 -0
  23. package/src/template/echart-custom-cmp-template/.prettierrc.js +12 -0
  24. package/src/template/echart-custom-cmp-template/README.md +47 -0
  25. package/src/template/echart-custom-cmp-template/commitlint.config.js +59 -0
  26. package/src/template/echart-custom-cmp-template/neo.config.js +109 -0
  27. package/src/template/echart-custom-cmp-template/package.json +58 -0
  28. package/src/template/echart-custom-cmp-template/public/css/base.css +283 -0
  29. package/src/template/echart-custom-cmp-template/public/scripts/app/bluebird.js +6679 -0
  30. package/src/template/echart-custom-cmp-template/public/template.html +13 -0
  31. package/src/template/echart-custom-cmp-template/src/assets/css/common.scss +127 -0
  32. package/src/template/echart-custom-cmp-template/src/assets/css/mixin.scss +47 -0
  33. package/src/template/echart-custom-cmp-template/src/components/info-card/index.tsx +69 -0
  34. package/src/template/echart-custom-cmp-template/src/components/info-card/model.ts +78 -0
  35. package/src/template/echart-custom-cmp-template/src/components/info-card/style.scss +105 -0
  36. package/src/template/echart-custom-cmp-template/src/components/list-widget/README.md +2 -0
  37. package/src/template/echart-custom-cmp-template/src/components/list-widget/index.tsx +208 -0
  38. package/src/template/echart-custom-cmp-template/src/components/list-widget/model.ts +90 -0
  39. package/src/template/echart-custom-cmp-template/src/components/list-widget/style.scss +350 -0
  40. package/src/template/echart-custom-cmp-template/tsconfig.json +68 -0
  41. package/src/template/react-custom-cmp-template/package.json +1 -1
  42. package/src/template/react-ts-custom-cmp-template/package.json +1 -2
  43. package/src/template/react-ts-custom-cmp-template/src/components/info-card/index.tsx +1 -4
  44. package/src/template/vue2-custom-cmp-template/package.json +1 -1
@@ -0,0 +1,1409 @@
1
+ // 数据仪表板样式文件 - 现代化设计
2
+ :root {
3
+ // 主色调 - 现代蓝紫渐变
4
+ --primary-color: #6366f1;
5
+ --primary-light: #8b5cf6;
6
+ --primary-dark: #4f46e5;
7
+
8
+ // 功能色
9
+ --success-color: #10b981;
10
+ --success-light: #34d399;
11
+ --warning-color: #f59e0b;
12
+ --warning-light: #fbbf24;
13
+ --error-color: #ef4444;
14
+ --error-light: #f87171;
15
+ --info-color: #06b6d4;
16
+ --info-light: #22d3ee;
17
+
18
+ // 中性色
19
+ --text-primary: #111827;
20
+ --text-secondary: #6b7280;
21
+ --text-tertiary: #9ca3af;
22
+ --text-inverse: #ffffff;
23
+
24
+ // 背景色
25
+ --bg-primary: #ffffff;
26
+ --bg-secondary: #f9fafb;
27
+ --bg-tertiary: #f3f4f6;
28
+ --bg-dark: #1f2937;
29
+ --bg-dark-secondary: #374151;
30
+
31
+ // 边框和分割线
32
+ --border-light: #e5e7eb;
33
+ --border-medium: #d1d5db;
34
+ --border-dark: #9ca3af;
35
+
36
+ // 阴影系统
37
+ --shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
38
+ --shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
39
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
40
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
41
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
42
+ --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
43
+ --shadow-glow: 0 0 20px rgba(99, 102, 241, 0.3);
44
+
45
+ // 圆角系统
46
+ --radius-sm: 6px;
47
+ --radius-md: 12px;
48
+ --radius-lg: 16px;
49
+ --radius-xl: 20px;
50
+ --radius-2xl: 24px;
51
+ --radius-full: 9999px;
52
+
53
+ // 动画缓动
54
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
55
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
56
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
57
+ --ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
58
+
59
+ // 过渡时间
60
+ --duration-fast: 150ms;
61
+ --duration-normal: 300ms;
62
+ --duration-slow: 500ms;
63
+
64
+ // 间距系统
65
+ --space-xs: 4px;
66
+ --space-sm: 8px;
67
+ --space-md: 16px;
68
+ --space-lg: 24px;
69
+ --space-xl: 32px;
70
+ --space-2xl: 48px;
71
+ --space-3xl: 64px;
72
+ }
73
+
74
+ // 现代化动画关键帧
75
+ @keyframes fadeInUp {
76
+ from {
77
+ opacity: 0;
78
+ transform: translateY(40px) scale(0.95);
79
+ }
80
+ to {
81
+ opacity: 1;
82
+ transform: translateY(0) scale(1);
83
+ }
84
+ }
85
+
86
+ @keyframes fadeInLeft {
87
+ from {
88
+ opacity: 0;
89
+ transform: translateX(-30px);
90
+ }
91
+ to {
92
+ opacity: 1;
93
+ transform: translateX(0);
94
+ }
95
+ }
96
+
97
+ @keyframes fadeInRight {
98
+ from {
99
+ opacity: 0;
100
+ transform: translateX(30px);
101
+ }
102
+ to {
103
+ opacity: 1;
104
+ transform: translateX(0);
105
+ }
106
+ }
107
+
108
+ @keyframes scaleIn {
109
+ from {
110
+ opacity: 0;
111
+ transform: scale(0.8);
112
+ }
113
+ to {
114
+ opacity: 1;
115
+ transform: scale(1);
116
+ }
117
+ }
118
+
119
+ @keyframes pulse {
120
+ 0%, 100% {
121
+ transform: scale(1);
122
+ }
123
+ 50% {
124
+ transform: scale(1.02);
125
+ }
126
+ }
127
+
128
+ @keyframes glow {
129
+ 0%, 100% {
130
+ box-shadow: var(--shadow-lg), var(--shadow-glow);
131
+ }
132
+ 50% {
133
+ box-shadow: var(--shadow-xl), 0 0 30px rgba(99, 102, 241, 0.4);
134
+ }
135
+ }
136
+
137
+ @keyframes float {
138
+ 0%, 100% {
139
+ transform: translateY(0px) rotate(0deg);
140
+ }
141
+ 33% {
142
+ transform: translateY(-8px) rotate(1deg);
143
+ }
144
+ 66% {
145
+ transform: translateY(-4px) rotate(-1deg);
146
+ }
147
+ }
148
+
149
+ @keyframes rotate {
150
+ from {
151
+ transform: rotate(0deg);
152
+ }
153
+ to {
154
+ transform: rotate(360deg);
155
+ }
156
+ }
157
+
158
+ @keyframes slideIn {
159
+ from {
160
+ opacity: 0;
161
+ transform: translateX(-20px);
162
+ }
163
+ to {
164
+ opacity: 1;
165
+ transform: translateX(0);
166
+ }
167
+ }
168
+
169
+ @keyframes shimmer {
170
+ 0% {
171
+ background-position: -200px 0;
172
+ }
173
+ 100% {
174
+ background-position: calc(200px + 100%) 0;
175
+ }
176
+ }
177
+
178
+ @keyframes bounce {
179
+ 0%, 20%, 53%, 80%, 100% {
180
+ transform: translate3d(0, 0, 0);
181
+ }
182
+ 40%, 43% {
183
+ transform: translate3d(0, -8px, 0);
184
+ }
185
+ 70% {
186
+ transform: translate3d(0, -4px, 0);
187
+ }
188
+ 90% {
189
+ transform: translate3d(0, -2px, 0);
190
+ }
191
+ }
192
+
193
+ @keyframes gradientShift {
194
+ 0% {
195
+ background-position: 0% 50%;
196
+ }
197
+ 50% {
198
+ background-position: 100% 50%;
199
+ }
200
+ 100% {
201
+ background-position: 0% 50%;
202
+ }
203
+ }
204
+
205
+ // 主容器 - 现代化设计
206
+ .data-dashboard-container {
207
+ position: relative;
208
+ min-height: 100vh;
209
+ padding: var(--space-lg);
210
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
211
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
212
+ overflow-x: hidden;
213
+ line-height: 1.6;
214
+
215
+ // 主题变体
216
+ &.light {
217
+ background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
218
+
219
+ .dashboard-header {
220
+ background: var(--bg-primary);
221
+ border: 1px solid var(--border-light);
222
+ backdrop-filter: blur(20px);
223
+ }
224
+
225
+ .metric-card,
226
+ .products-card,
227
+ .activities-card,
228
+ .performance-card,
229
+ .active-users-card {
230
+ background: var(--bg-primary);
231
+ border: 1px solid var(--border-light);
232
+ backdrop-filter: blur(20px);
233
+ }
234
+ }
235
+
236
+ &.dark {
237
+ background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
238
+ color: var(--text-inverse);
239
+
240
+ .dashboard-header {
241
+ background: rgba(30, 41, 59, 0.8);
242
+ border: 1px solid rgba(51, 65, 85, 0.5);
243
+ backdrop-filter: blur(20px);
244
+ }
245
+
246
+ .metric-card,
247
+ .products-card,
248
+ .activities-card,
249
+ .performance-card,
250
+ .active-users-card {
251
+ background: rgba(30, 41, 59, 0.8);
252
+ border: 1px solid rgba(51, 65, 85, 0.5);
253
+ color: var(--text-inverse);
254
+ backdrop-filter: blur(20px);
255
+ }
256
+ }
257
+
258
+ &.gradient {
259
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
260
+ background-size: 400% 400%;
261
+ animation: gradientShift 15s ease infinite;
262
+
263
+ &::before {
264
+ content: '';
265
+ position: absolute;
266
+ top: 0;
267
+ left: 0;
268
+ right: 0;
269
+ bottom: 0;
270
+ background:
271
+ radial-gradient(circle at 20% 50%, rgba(99, 102, 241, 0.2) 0%, transparent 50%),
272
+ radial-gradient(circle at 80% 20%, rgba(139, 92, 246, 0.2) 0%, transparent 50%),
273
+ radial-gradient(circle at 40% 80%, rgba(6, 182, 212, 0.2) 0%, transparent 50%);
274
+ pointer-events: none;
275
+ animation: gradientShift 20s ease infinite reverse;
276
+ }
277
+
278
+ &::after {
279
+ content: '';
280
+ position: absolute;
281
+ top: 0;
282
+ left: 0;
283
+ right: 0;
284
+ bottom: 0;
285
+ background:
286
+ linear-gradient(45deg, transparent 30%, rgba(255, 255, 255, 0.05) 50%, transparent 70%);
287
+ pointer-events: none;
288
+ animation: shimmer 3s ease-in-out infinite;
289
+ }
290
+ }
291
+
292
+ // 动画状态
293
+ &.animating {
294
+ .metric-card {
295
+ animation: pulse var(--duration-normal) var(--ease-bounce);
296
+ }
297
+
298
+ .product-item,
299
+ .activity-item {
300
+ animation: slideIn var(--duration-normal) var(--ease-out);
301
+ }
302
+ }
303
+ }
304
+
305
+ // 头部区域 - 现代化设计
306
+ .dashboard-header {
307
+ display: flex;
308
+ justify-content: space-between;
309
+ align-items: center;
310
+ padding: var(--space-xl) var(--space-2xl);
311
+ margin-bottom: var(--space-2xl);
312
+ background: rgba(255, 255, 255, 0.95);
313
+ backdrop-filter: blur(20px);
314
+ border-radius: var(--radius-xl);
315
+ box-shadow: var(--shadow-xl);
316
+ border: 1px solid rgba(255, 255, 255, 0.2);
317
+ animation: fadeInUp 0.8s var(--ease-out);
318
+ position: relative;
319
+ overflow: hidden;
320
+
321
+ &::before {
322
+ content: '';
323
+ position: absolute;
324
+ top: 0;
325
+ left: 0;
326
+ right: 0;
327
+ height: 3px;
328
+ background: linear-gradient(90deg, var(--primary-color), var(--primary-light), var(--info-color));
329
+ border-radius: var(--radius-xl) var(--radius-xl) 0 0;
330
+ }
331
+
332
+ .dashboard-title {
333
+ margin: 0;
334
+ font-size: 32px;
335
+ font-weight: 800;
336
+ background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-light) 50%, var(--info-color) 100%);
337
+ background-size: 200% 200%;
338
+ -webkit-background-clip: text;
339
+ -webkit-text-fill-color: transparent;
340
+ background-clip: text;
341
+ display: flex;
342
+ align-items: center;
343
+ gap: var(--space-md);
344
+ animation: gradientShift 3s ease infinite;
345
+ letter-spacing: -0.02em;
346
+
347
+ .ant-tag {
348
+ font-size: 14px;
349
+ font-weight: 600;
350
+ padding: 4px 12px;
351
+ border-radius: var(--radius-full);
352
+ border: none;
353
+ background: linear-gradient(135deg, var(--primary-color), var(--primary-light));
354
+ color: white;
355
+ box-shadow: var(--shadow-sm);
356
+ }
357
+ }
358
+
359
+ .user-info {
360
+ display: flex;
361
+ align-items: center;
362
+ gap: var(--space-md);
363
+ padding: var(--space-sm) var(--space-lg);
364
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1));
365
+ border-radius: var(--radius-full);
366
+ border: 1px solid rgba(99, 102, 241, 0.2);
367
+ backdrop-filter: blur(10px);
368
+ transition: all var(--duration-normal) var(--ease-in-out);
369
+ position: relative;
370
+ overflow: hidden;
371
+
372
+ &::before {
373
+ content: '';
374
+ position: absolute;
375
+ top: 0;
376
+ left: -100%;
377
+ width: 100%;
378
+ height: 100%;
379
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
380
+ transition: left 0.5s;
381
+ }
382
+
383
+ &:hover {
384
+ transform: translateY(-2px);
385
+ box-shadow: var(--shadow-lg);
386
+ border-color: rgba(99, 102, 241, 0.3);
387
+
388
+ &::before {
389
+ left: 100%;
390
+ }
391
+ }
392
+
393
+ .ant-avatar {
394
+ border: 2px solid rgba(255, 255, 255, 0.3);
395
+ box-shadow: var(--shadow-sm);
396
+ }
397
+
398
+ .user-name {
399
+ font-weight: 600;
400
+ color: var(--primary-color);
401
+ font-size: 16px;
402
+ }
403
+ }
404
+ }
405
+
406
+ // 仪表板内容
407
+ .dashboard-content {
408
+ position: relative;
409
+ z-index: 1;
410
+ }
411
+
412
+ // 指标卡片行 - 现代化设计
413
+ .metrics-row {
414
+ margin-bottom: var(--space-2xl);
415
+ animation: fadeInUp 0.8s var(--ease-out) 0.2s both;
416
+
417
+ .metric-card {
418
+ position: relative;
419
+ background: rgba(255, 255, 255, 0.95);
420
+ backdrop-filter: blur(20px);
421
+ border: 1px solid rgba(255, 255, 255, 0.2);
422
+ border-radius: var(--radius-xl);
423
+ box-shadow: var(--shadow-lg);
424
+ transition: all var(--duration-normal) var(--ease-in-out);
425
+ overflow: hidden;
426
+ height: 100%;
427
+ cursor: pointer;
428
+
429
+ &::before {
430
+ content: '';
431
+ position: absolute;
432
+ top: 0;
433
+ left: 0;
434
+ right: 0;
435
+ height: 4px;
436
+ background: linear-gradient(90deg, var(--primary-color), var(--primary-light));
437
+ border-radius: var(--radius-xl) var(--radius-xl) 0 0;
438
+ }
439
+
440
+ &::after {
441
+ content: '';
442
+ position: absolute;
443
+ top: 0;
444
+ left: 0;
445
+ right: 0;
446
+ bottom: 0;
447
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.02), rgba(139, 92, 246, 0.02));
448
+ opacity: 0;
449
+ transition: opacity var(--duration-normal) var(--ease-in-out);
450
+ }
451
+
452
+ &:hover {
453
+ transform: translateY(-8px) scale(1.02);
454
+ box-shadow: var(--shadow-2xl);
455
+ border-color: rgba(99, 102, 241, 0.3);
456
+
457
+ &::after {
458
+ opacity: 1;
459
+ }
460
+
461
+ .metric-icon {
462
+ transform: scale(1.1) rotate(5deg);
463
+ color: var(--primary-color);
464
+ }
465
+
466
+ .ant-statistic-content-value {
467
+ transform: scale(1.05);
468
+ }
469
+ }
470
+
471
+ .ant-card-body {
472
+ padding: var(--space-xl);
473
+ position: relative;
474
+ z-index: 1;
475
+ }
476
+
477
+ .ant-statistic-title {
478
+ color: var(--text-secondary);
479
+ font-size: 14px;
480
+ font-weight: 600;
481
+ margin-bottom: var(--space-sm);
482
+ text-transform: uppercase;
483
+ letter-spacing: 0.5px;
484
+ }
485
+
486
+ .ant-statistic-content {
487
+ .ant-statistic-content-value {
488
+ font-size: 36px;
489
+ font-weight: 800;
490
+ line-height: 1.1;
491
+ background: linear-gradient(135deg, var(--text-primary), var(--text-secondary));
492
+ -webkit-background-clip: text;
493
+ -webkit-text-fill-color: transparent;
494
+ background-clip: text;
495
+ transition: all var(--duration-normal) var(--ease-in-out);
496
+ }
497
+ }
498
+
499
+ .metric-icon {
500
+ font-size: 28px;
501
+ margin-right: var(--space-sm);
502
+ opacity: 0.8;
503
+ transition: all var(--duration-normal) var(--ease-bounce);
504
+ color: var(--primary-color);
505
+ }
506
+
507
+ .metric-trend {
508
+ display: flex;
509
+ align-items: center;
510
+ gap: var(--space-sm);
511
+ margin-top: var(--space-md);
512
+ padding: var(--space-sm) var(--space-md);
513
+ background: rgba(16, 185, 129, 0.1);
514
+ border-radius: var(--radius-md);
515
+ border: 1px solid rgba(16, 185, 129, 0.2);
516
+
517
+ .ant-badge {
518
+ .ant-badge-count {
519
+ background: linear-gradient(135deg, var(--success-color), var(--success-light));
520
+ border: none;
521
+ font-weight: 600;
522
+ font-size: 12px;
523
+ }
524
+ }
525
+
526
+ .trend-text {
527
+ font-size: 12px;
528
+ color: var(--text-secondary);
529
+ font-weight: 500;
530
+ }
531
+ }
532
+ }
533
+
534
+ // 特定卡片样式
535
+ .users-card {
536
+ &::before {
537
+ background: linear-gradient(90deg, var(--primary-color), var(--primary-light));
538
+ }
539
+
540
+ .metric-icon {
541
+ color: var(--primary-color);
542
+ }
543
+ }
544
+
545
+ .orders-card {
546
+ &::before {
547
+ background: linear-gradient(90deg, var(--success-color), var(--success-light));
548
+ }
549
+
550
+ .metric-icon {
551
+ color: var(--success-color);
552
+ }
553
+
554
+ .metric-trend {
555
+ background: rgba(16, 185, 129, 0.1);
556
+ border-color: rgba(16, 185, 129, 0.2);
557
+ }
558
+ }
559
+
560
+ .revenue-card {
561
+ &::before {
562
+ background: linear-gradient(90deg, var(--warning-color), var(--warning-light));
563
+ }
564
+
565
+ .metric-icon {
566
+ color: var(--warning-color);
567
+ }
568
+
569
+ .metric-trend {
570
+ background: rgba(245, 158, 11, 0.1);
571
+ border-color: rgba(245, 158, 11, 0.2);
572
+ }
573
+ }
574
+
575
+ .conversion-card {
576
+ &::before {
577
+ background: linear-gradient(90deg, var(--error-color), var(--error-light));
578
+ }
579
+
580
+ .metric-icon {
581
+ color: var(--error-color);
582
+ }
583
+
584
+ .metric-trend {
585
+ background: rgba(239, 68, 68, 0.1);
586
+ border-color: rgba(239, 68, 68, 0.2);
587
+ }
588
+ }
589
+ }
590
+
591
+ // 内容行 - 现代化设计
592
+ .content-row {
593
+ margin-bottom: var(--space-2xl);
594
+ animation: fadeInUp 0.8s var(--ease-out) 0.4s both;
595
+
596
+ .products-card,
597
+ .activities-card {
598
+ background: rgba(255, 255, 255, 0.95);
599
+ backdrop-filter: blur(20px);
600
+ border: 1px solid rgba(255, 255, 255, 0.2);
601
+ border-radius: var(--radius-xl);
602
+ box-shadow: var(--shadow-lg);
603
+ transition: all var(--duration-normal) var(--ease-in-out);
604
+ overflow: hidden;
605
+ position: relative;
606
+
607
+ &::before {
608
+ content: '';
609
+ position: absolute;
610
+ top: 0;
611
+ left: 0;
612
+ right: 0;
613
+ height: 3px;
614
+ background: linear-gradient(90deg, var(--primary-color), var(--primary-light));
615
+ border-radius: var(--radius-xl) var(--radius-xl) 0 0;
616
+ }
617
+
618
+ &:hover {
619
+ transform: translateY(-4px);
620
+ box-shadow: var(--shadow-2xl);
621
+ border-color: rgba(99, 102, 241, 0.3);
622
+ }
623
+
624
+ .ant-card-head {
625
+ border-bottom: 1px solid rgba(0, 0, 0, 0.06);
626
+ padding: var(--space-lg) var(--space-xl);
627
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.02), rgba(139, 92, 246, 0.02));
628
+
629
+ .ant-card-head-title {
630
+ font-size: 20px;
631
+ font-weight: 700;
632
+ color: var(--text-primary);
633
+ display: flex;
634
+ align-items: center;
635
+ gap: var(--space-sm);
636
+ }
637
+ }
638
+
639
+ .ant-card-body {
640
+ padding: var(--space-xl);
641
+ }
642
+
643
+ .section-icon {
644
+ color: var(--primary-color);
645
+ margin-right: var(--space-sm);
646
+ font-size: 20px;
647
+ }
648
+
649
+ .ant-card-extra {
650
+ .ant-btn {
651
+ border: none;
652
+ background: linear-gradient(135deg, var(--primary-color), var(--primary-light));
653
+ color: white;
654
+ border-radius: var(--radius-md);
655
+ font-weight: 600;
656
+ padding: var(--space-sm) var(--space-lg);
657
+ transition: all var(--duration-normal) var(--ease-in-out);
658
+
659
+ &:hover {
660
+ transform: translateY(-2px);
661
+ box-shadow: var(--shadow-md);
662
+ }
663
+ }
664
+ }
665
+ }
666
+ }
667
+
668
+ // 产品列表 - 现代化设计
669
+ .products-list {
670
+ .product-item {
671
+ display: flex;
672
+ align-items: center;
673
+ padding: var(--space-lg) 0;
674
+ border-bottom: 1px solid var(--border-light);
675
+ transition: all var(--duration-normal) var(--ease-in-out);
676
+ position: relative;
677
+ border-radius: var(--radius-md);
678
+ margin-bottom: var(--space-sm);
679
+
680
+ &:last-child {
681
+ border-bottom: none;
682
+ margin-bottom: 0;
683
+ }
684
+
685
+ &:hover {
686
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.05), rgba(139, 92, 246, 0.05));
687
+ border-radius: var(--radius-md);
688
+ padding-left: var(--space-md);
689
+ padding-right: var(--space-md);
690
+ transform: translateX(4px);
691
+ box-shadow: var(--shadow-sm);
692
+ }
693
+
694
+ .product-info {
695
+ flex: 1;
696
+ min-width: 0;
697
+
698
+ .product-name {
699
+ font-size: 16px;
700
+ font-weight: 700;
701
+ color: var(--text-primary);
702
+ margin-bottom: var(--space-xs);
703
+ letter-spacing: -0.01em;
704
+ }
705
+
706
+ .product-sales {
707
+ font-size: 14px;
708
+ color: var(--text-secondary);
709
+ font-weight: 500;
710
+ }
711
+ }
712
+
713
+ .product-growth {
714
+ margin: 0 var(--space-lg);
715
+
716
+ .ant-tag {
717
+ border: none;
718
+ border-radius: var(--radius-md);
719
+ font-weight: 600;
720
+ font-size: 12px;
721
+ padding: var(--space-xs) var(--space-sm);
722
+
723
+ &.ant-tag-green {
724
+ background: linear-gradient(135deg, var(--success-color), var(--success-light));
725
+ color: white;
726
+ }
727
+
728
+ &.ant-tag-red {
729
+ background: linear-gradient(135deg, var(--error-color), var(--error-light));
730
+ color: white;
731
+ }
732
+ }
733
+ }
734
+
735
+ .product-progress {
736
+ width: 120px;
737
+
738
+ .ant-progress {
739
+ .ant-progress-bg {
740
+ border-radius: var(--radius-sm);
741
+ }
742
+
743
+ .ant-progress-outer {
744
+ .ant-progress-inner {
745
+ background-color: var(--bg-tertiary);
746
+ border-radius: var(--radius-sm);
747
+ }
748
+ }
749
+ }
750
+ }
751
+ }
752
+ }
753
+
754
+ // 活动列表 - 现代化设计
755
+ .activities-list {
756
+ .activity-item {
757
+ display: flex;
758
+ align-items: center;
759
+ padding: var(--space-md) 0;
760
+ border-bottom: 1px solid var(--border-light);
761
+ transition: all var(--duration-normal) var(--ease-in-out);
762
+ position: relative;
763
+ border-radius: var(--radius-md);
764
+ margin-bottom: var(--space-sm);
765
+
766
+ &:last-child {
767
+ border-bottom: none;
768
+ margin-bottom: 0;
769
+ }
770
+
771
+ &:hover {
772
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.05), rgba(139, 92, 246, 0.05));
773
+ border-radius: var(--radius-md);
774
+ padding-left: var(--space-md);
775
+ padding-right: var(--space-md);
776
+ transform: translateX(4px);
777
+ box-shadow: var(--shadow-sm);
778
+ }
779
+
780
+ .ant-avatar {
781
+ border: 2px solid rgba(255, 255, 255, 0.3);
782
+ box-shadow: var(--shadow-sm);
783
+ transition: all var(--duration-normal) var(--ease-in-out);
784
+ }
785
+
786
+ &:hover .ant-avatar {
787
+ transform: scale(1.1);
788
+ box-shadow: var(--shadow-md);
789
+ }
790
+
791
+ .activity-content {
792
+ flex: 1;
793
+ margin-left: var(--space-md);
794
+ min-width: 0;
795
+
796
+ .activity-text {
797
+ .user-name {
798
+ font-weight: 700;
799
+ color: var(--primary-color);
800
+ margin-right: var(--space-sm);
801
+ font-size: 14px;
802
+ }
803
+
804
+ .action {
805
+ color: var(--text-primary);
806
+ font-weight: 500;
807
+ font-size: 14px;
808
+ }
809
+ }
810
+
811
+ .activity-time {
812
+ font-size: 12px;
813
+ color: var(--text-secondary);
814
+ margin-top: var(--space-xs);
815
+ font-weight: 500;
816
+ }
817
+ }
818
+
819
+ .activity-actions {
820
+ display: flex;
821
+ gap: var(--space-xs);
822
+ opacity: 0;
823
+ transition: all var(--duration-normal) var(--ease-in-out);
824
+
825
+ .ant-btn {
826
+ border: none;
827
+ background: transparent;
828
+ color: var(--text-secondary);
829
+ padding: var(--space-xs);
830
+ border-radius: var(--radius-sm);
831
+ transition: all var(--duration-fast) var(--ease-in-out);
832
+
833
+ &:hover {
834
+ background: rgba(99, 102, 241, 0.1);
835
+ color: var(--primary-color);
836
+ transform: scale(1.1);
837
+ }
838
+ }
839
+ }
840
+
841
+ &:hover .activity-actions {
842
+ opacity: 1;
843
+ }
844
+ }
845
+ }
846
+
847
+ // 性能指标行 - 现代化设计
848
+ .performance-row {
849
+ margin-bottom: var(--space-2xl);
850
+ animation: fadeInUp 0.8s var(--ease-out) 0.6s both;
851
+
852
+ .performance-card {
853
+ background: rgba(255, 255, 255, 0.95);
854
+ backdrop-filter: blur(20px);
855
+ border: 1px solid rgba(255, 255, 255, 0.2);
856
+ border-radius: var(--radius-xl);
857
+ box-shadow: var(--shadow-lg);
858
+ transition: all var(--duration-normal) var(--ease-in-out);
859
+ overflow: hidden;
860
+ position: relative;
861
+
862
+ &::before {
863
+ content: '';
864
+ position: absolute;
865
+ top: 0;
866
+ left: 0;
867
+ right: 0;
868
+ height: 3px;
869
+ background: linear-gradient(90deg, var(--primary-color), var(--primary-light));
870
+ border-radius: var(--radius-xl) var(--radius-xl) 0 0;
871
+ }
872
+
873
+ &:hover {
874
+ transform: translateY(-4px);
875
+ box-shadow: var(--shadow-2xl);
876
+ border-color: rgba(99, 102, 241, 0.3);
877
+ }
878
+
879
+ .ant-card-head {
880
+ padding: var(--space-lg) var(--space-xl);
881
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.02), rgba(139, 92, 246, 0.02));
882
+
883
+ .ant-card-head-title {
884
+ font-size: 20px;
885
+ font-weight: 700;
886
+ color: var(--text-primary);
887
+ display: flex;
888
+ align-items: center;
889
+ gap: var(--space-sm);
890
+ }
891
+ }
892
+
893
+ .ant-card-body {
894
+ padding: var(--space-xl);
895
+ }
896
+
897
+ .performance-item {
898
+ .performance-header {
899
+ display: flex;
900
+ justify-content: space-between;
901
+ align-items: center;
902
+ margin-bottom: var(--space-md);
903
+
904
+ .metric-name {
905
+ font-size: 14px;
906
+ font-weight: 600;
907
+ color: var(--text-primary);
908
+ text-transform: uppercase;
909
+ letter-spacing: 0.5px;
910
+ }
911
+
912
+ .metric-value {
913
+ font-size: 20px;
914
+ font-weight: 800;
915
+ color: var(--primary-color);
916
+ background: linear-gradient(135deg, var(--primary-color), var(--primary-light));
917
+ -webkit-background-clip: text;
918
+ -webkit-text-fill-color: transparent;
919
+ background-clip: text;
920
+ }
921
+ }
922
+
923
+ .ant-progress {
924
+ .ant-progress-bg {
925
+ border-radius: var(--radius-sm);
926
+ }
927
+
928
+ .ant-progress-outer {
929
+ .ant-progress-inner {
930
+ background-color: var(--bg-tertiary);
931
+ border-radius: var(--radius-sm);
932
+ }
933
+ }
934
+ }
935
+
936
+ .performance-target {
937
+ font-size: 12px;
938
+ color: var(--text-secondary);
939
+ margin-top: var(--space-sm);
940
+ text-align: right;
941
+ font-weight: 500;
942
+ }
943
+ }
944
+ }
945
+ }
946
+
947
+ // 活跃用户行 - 现代化设计
948
+ .active-users-row {
949
+ animation: fadeInUp 0.8s var(--ease-out) 0.8s both;
950
+
951
+ .active-users-card {
952
+ background: rgba(255, 255, 255, 0.95);
953
+ backdrop-filter: blur(20px);
954
+ border: 1px solid rgba(255, 255, 255, 0.2);
955
+ border-radius: var(--radius-xl);
956
+ box-shadow: var(--shadow-lg);
957
+ transition: all var(--duration-normal) var(--ease-in-out);
958
+ overflow: hidden;
959
+ position: relative;
960
+
961
+ &::before {
962
+ content: '';
963
+ position: absolute;
964
+ top: 0;
965
+ left: 0;
966
+ right: 0;
967
+ height: 3px;
968
+ background: linear-gradient(90deg, var(--primary-color), var(--primary-light));
969
+ border-radius: var(--radius-xl) var(--radius-xl) 0 0;
970
+ }
971
+
972
+ &:hover {
973
+ transform: translateY(-4px);
974
+ box-shadow: var(--shadow-2xl);
975
+ border-color: rgba(99, 102, 241, 0.3);
976
+ }
977
+
978
+ .ant-card-head {
979
+ padding: var(--space-lg) var(--space-xl);
980
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.02), rgba(139, 92, 246, 0.02));
981
+
982
+ .ant-card-head-title {
983
+ font-size: 20px;
984
+ font-weight: 700;
985
+ color: var(--text-primary);
986
+ display: flex;
987
+ align-items: center;
988
+ gap: var(--space-sm);
989
+ }
990
+ }
991
+
992
+ /*
993
+ .ant-card-body {
994
+ padding: var(--space-2xl);
995
+ }
996
+ */
997
+
998
+ .active-users-content {
999
+ display: flex;
1000
+ align-items: center;
1001
+ justify-content: space-between;
1002
+ gap: var(--space-2xl);
1003
+
1004
+ .active-users-main {
1005
+ flex: 1;
1006
+
1007
+ .active-users-number {
1008
+ display: flex;
1009
+ align-items: baseline;
1010
+ gap: var(--space-sm);
1011
+ margin-bottom: var(--space-md);
1012
+
1013
+ .number {
1014
+ font-size: 56px;
1015
+ font-weight: 900;
1016
+ background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-light) 50%, var(--info-color) 100%);
1017
+ background-size: 200% 200%;
1018
+ -webkit-background-clip: text;
1019
+ -webkit-text-fill-color: transparent;
1020
+ background-clip: text;
1021
+ line-height: 1;
1022
+ animation: gradientShift 3s ease infinite;
1023
+ letter-spacing: -0.02em;
1024
+ }
1025
+
1026
+ .unit {
1027
+ font-size: 20px;
1028
+ color: var(--text-secondary);
1029
+ font-weight: 600;
1030
+ text-transform: uppercase;
1031
+ letter-spacing: 0.5px;
1032
+ }
1033
+ }
1034
+
1035
+ .active-users-description {
1036
+ font-size: 16px;
1037
+ color: var(--text-secondary);
1038
+ font-weight: 500;
1039
+ line-height: 1.5;
1040
+ }
1041
+ }
1042
+
1043
+ .active-users-visual {
1044
+ position: relative;
1045
+ width: 80px;
1046
+ height: 80px;
1047
+ flex-shrink: 0;
1048
+
1049
+ .user-avatars {
1050
+ position: relative;
1051
+ width: 100%;
1052
+ height: 100%;
1053
+
1054
+ .user-avatar {
1055
+ position: absolute;
1056
+ top: 50%;
1057
+ left: 50%;
1058
+ margin-left: -20px;
1059
+ margin-top: -20px;
1060
+ animation: float 4s ease-in-out infinite;
1061
+ border: 3px solid rgba(255, 255, 255, 0.8);
1062
+ box-shadow: var(--shadow-lg);
1063
+ transition: all var(--duration-normal) var(--ease-bounce);
1064
+ cursor: pointer;
1065
+
1066
+ &:hover {
1067
+ transform: scale(1.3) rotate(10deg);
1068
+ z-index: 10;
1069
+ box-shadow: var(--shadow-2xl);
1070
+ animation-play-state: paused;
1071
+ }
1072
+ }
1073
+ }
1074
+ }
1075
+ }
1076
+ }
1077
+ }
1078
+
1079
+ // 响应式设计 - 现代化移动端适配
1080
+ @media (max-width: 1200px) {
1081
+ .data-dashboard-container {
1082
+ padding: var(--space-md);
1083
+ }
1084
+
1085
+ .dashboard-header {
1086
+ padding: var(--space-lg) var(--space-xl);
1087
+
1088
+ .dashboard-title {
1089
+ font-size: 28px;
1090
+ }
1091
+ }
1092
+
1093
+ .active-users-content {
1094
+ gap: var(--space-lg);
1095
+
1096
+ .active-users-visual {
1097
+ width: 200px;
1098
+ height: 200px;
1099
+ }
1100
+ }
1101
+ }
1102
+
1103
+ @media (max-width: 768px) {
1104
+ .data-dashboard-container {
1105
+ padding: var(--space-sm);
1106
+ }
1107
+
1108
+ .dashboard-header {
1109
+ flex-direction: column;
1110
+ gap: var(--space-lg);
1111
+ text-align: center;
1112
+ padding: var(--space-lg);
1113
+ border-radius: var(--radius-lg);
1114
+
1115
+ .dashboard-title {
1116
+ font-size: 24px;
1117
+ flex-direction: column;
1118
+ gap: var(--space-sm);
1119
+ }
1120
+
1121
+ .user-info {
1122
+ align-self: center;
1123
+ }
1124
+ }
1125
+
1126
+ .metrics-row {
1127
+ .metric-card {
1128
+ .ant-card-body {
1129
+ padding: var(--space-lg);
1130
+ }
1131
+
1132
+ .ant-statistic-content {
1133
+ .ant-statistic-content-value {
1134
+ font-size: 28px;
1135
+ }
1136
+ }
1137
+
1138
+ .metric-icon {
1139
+ font-size: 24px;
1140
+ }
1141
+ }
1142
+ }
1143
+
1144
+ .content-row {
1145
+ .products-card,
1146
+ .activities-card {
1147
+ .ant-card-body {
1148
+ padding: var(--space-lg);
1149
+ }
1150
+ }
1151
+ }
1152
+
1153
+ .active-users-content {
1154
+ flex-direction: column;
1155
+ gap: var(--space-xl);
1156
+ text-align: center;
1157
+
1158
+ .active-users-visual {
1159
+ width: 180px;
1160
+ height: 180px;
1161
+ align-self: center;
1162
+ }
1163
+
1164
+ .active-users-number {
1165
+ justify-content: center;
1166
+
1167
+ .number {
1168
+ font-size: 48px;
1169
+ }
1170
+ }
1171
+ }
1172
+
1173
+ .performance-row {
1174
+ .performance-card {
1175
+ .ant-card-body {
1176
+ padding: var(--space-lg);
1177
+ }
1178
+ }
1179
+ }
1180
+ }
1181
+
1182
+ @media (max-width: 480px) {
1183
+ .data-dashboard-container {
1184
+ padding: var(--space-xs);
1185
+ }
1186
+
1187
+ .dashboard-header {
1188
+ padding: var(--space-md);
1189
+
1190
+ .dashboard-title {
1191
+ font-size: 20px;
1192
+ }
1193
+ }
1194
+
1195
+ .metrics-row {
1196
+ .metric-card {
1197
+ .ant-card-body {
1198
+ padding: var(--space-md);
1199
+ }
1200
+
1201
+ .ant-statistic-content {
1202
+ .ant-statistic-content-value {
1203
+ font-size: 24px;
1204
+ }
1205
+ }
1206
+ }
1207
+ }
1208
+
1209
+ .active-users-content {
1210
+ .active-users-visual {
1211
+ width: 150px;
1212
+ height: 150px;
1213
+ }
1214
+
1215
+ .active-users-number {
1216
+ .number {
1217
+ font-size: 40px;
1218
+ }
1219
+
1220
+ .unit {
1221
+ font-size: 16px;
1222
+ }
1223
+ }
1224
+ }
1225
+ }
1226
+
1227
+ // 加载动画 - 现代化设计
1228
+ .ant-spin-container {
1229
+ .ant-spin {
1230
+ .ant-spin-dot {
1231
+ .ant-spin-dot-item {
1232
+ background: linear-gradient(135deg, var(--primary-color), var(--primary-light));
1233
+ border-radius: var(--radius-sm);
1234
+ }
1235
+ }
1236
+
1237
+ .ant-spin-text {
1238
+ color: var(--text-primary);
1239
+ font-weight: 600;
1240
+ }
1241
+ }
1242
+ }
1243
+
1244
+ // 滚动条样式 - 现代化设计
1245
+ ::-webkit-scrollbar {
1246
+ width: 8px;
1247
+ height: 8px;
1248
+ }
1249
+
1250
+ ::-webkit-scrollbar-track {
1251
+ background: var(--bg-tertiary);
1252
+ border-radius: var(--radius-sm);
1253
+ }
1254
+
1255
+ ::-webkit-scrollbar-thumb {
1256
+ background: linear-gradient(135deg, var(--primary-color), var(--primary-light));
1257
+ border-radius: var(--radius-sm);
1258
+ transition: all var(--duration-normal) var(--ease-in-out);
1259
+ }
1260
+
1261
+ ::-webkit-scrollbar-thumb:hover {
1262
+ background: linear-gradient(135deg, var(--primary-light), var(--info-color));
1263
+ transform: scale(1.1);
1264
+ }
1265
+
1266
+ // 额外的交互元素和微动画
1267
+ .data-dashboard-container {
1268
+ // 添加全局悬停效果
1269
+ .metric-card,
1270
+ .products-card,
1271
+ .activities-card,
1272
+ .performance-card,
1273
+ .active-users-card {
1274
+ &:hover {
1275
+ .section-icon {
1276
+ animation: bounce 0.6s var(--ease-bounce);
1277
+ }
1278
+ }
1279
+ }
1280
+
1281
+ // 添加数据更新时的闪烁效果
1282
+ &.animating {
1283
+ .metric-card {
1284
+ .ant-statistic-content-value {
1285
+ animation: pulse 0.8s var(--ease-bounce);
1286
+ }
1287
+ }
1288
+ }
1289
+
1290
+ // 添加页面加载时的入场动画
1291
+ .dashboard-content {
1292
+ > * {
1293
+ animation: fadeInUp 0.8s var(--ease-out) both;
1294
+
1295
+ &:nth-child(1) { animation-delay: 0.1s; }
1296
+ &:nth-child(2) { animation-delay: 0.2s; }
1297
+ &:nth-child(3) { animation-delay: 0.3s; }
1298
+ &:nth-child(4) { animation-delay: 0.4s; }
1299
+ }
1300
+ }
1301
+ }
1302
+
1303
+ // 添加按钮悬停效果
1304
+ .ant-btn {
1305
+ position: relative;
1306
+ overflow: hidden;
1307
+
1308
+ &::before {
1309
+ content: '';
1310
+ position: absolute;
1311
+ top: 0;
1312
+ left: -100%;
1313
+ width: 100%;
1314
+ height: 100%;
1315
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
1316
+ transition: left 0.5s;
1317
+ }
1318
+
1319
+ &:hover::before {
1320
+ left: 100%;
1321
+ }
1322
+ }
1323
+
1324
+ // 添加标签悬停效果
1325
+ .ant-tag {
1326
+ transition: all var(--duration-normal) var(--ease-in-out);
1327
+
1328
+ &:hover {
1329
+ transform: translateY(-2px) scale(1.05);
1330
+ box-shadow: var(--shadow-md);
1331
+ }
1332
+ }
1333
+
1334
+ // 添加进度条动画
1335
+ .ant-progress {
1336
+ .ant-progress-bg {
1337
+ transition: all var(--duration-slow) var(--ease-out);
1338
+ }
1339
+ }
1340
+
1341
+ // 添加头像悬停效果
1342
+ .ant-avatar {
1343
+ transition: all var(--duration-normal) var(--ease-bounce);
1344
+
1345
+ &:hover {
1346
+ transform: scale(1.1) rotate(5deg);
1347
+ box-shadow: var(--shadow-lg);
1348
+ }
1349
+ }
1350
+
1351
+ // 添加卡片内容悬停效果
1352
+ .ant-card {
1353
+ .ant-card-body {
1354
+ position: relative;
1355
+
1356
+ &::before {
1357
+ content: '';
1358
+ position: absolute;
1359
+ top: 0;
1360
+ left: 0;
1361
+ right: 0;
1362
+ bottom: 0;
1363
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.02), rgba(139, 92, 246, 0.02));
1364
+ opacity: 0;
1365
+ transition: opacity var(--duration-normal) var(--ease-in-out);
1366
+ pointer-events: none;
1367
+ }
1368
+ }
1369
+
1370
+ &:hover .ant-card-body::before {
1371
+ opacity: 1;
1372
+ }
1373
+ }
1374
+
1375
+ // 添加数字计数动画
1376
+ @keyframes countUp {
1377
+ from {
1378
+ opacity: 0;
1379
+ transform: translateY(20px);
1380
+ }
1381
+ to {
1382
+ opacity: 1;
1383
+ transform: translateY(0);
1384
+ }
1385
+ }
1386
+
1387
+ .ant-statistic-content-value {
1388
+ animation: countUp 0.8s var(--ease-out);
1389
+ }
1390
+
1391
+ // 添加渐变文字动画
1392
+ @keyframes textShine {
1393
+ 0% {
1394
+ background-position: 0% 50%;
1395
+ }
1396
+ 100% {
1397
+ background-position: 100% 50%;
1398
+ }
1399
+ }
1400
+
1401
+ .gradient-text {
1402
+ background: linear-gradient(135deg, var(--primary-color), var(--primary-light), var(--info-color));
1403
+ background-size: 200% 200%;
1404
+ -webkit-background-clip: text;
1405
+ -webkit-text-fill-color: transparent;
1406
+ background-clip: text;
1407
+ animation: textShine 3s ease infinite;
1408
+ }
1409
+