neo-cmp-cli 1.1.8 → 1.1.9

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 (50) hide show
  1. package/package.json +1 -1
  2. package/src/cmpUtils/createCommonModulesCode.js +61 -0
  3. package/src/cmpUtils/getCmpPreview.js +3 -1
  4. package/src/module/index.js +10 -0
  5. package/src/module/main.js +33 -10
  6. package/src/module/neoInitByCopy.js +8 -0
  7. package/src/neo/neoRequire.js +14 -2
  8. package/src/template/antd-custom-cmp-template/neo.config.js +6 -0
  9. package/src/template/antd-custom-cmp-template/src/components/data-dashboard/model.ts +2 -2
  10. package/src/template/antd-custom-cmp-template/src/components/data-dashboard/style.scss +377 -119
  11. package/src/template/echarts-custom-cmp-template/README.md +91 -0
  12. package/src/template/echarts-custom-cmp-template/neo.config.js +117 -0
  13. package/src/template/echarts-custom-cmp-template/package.json +60 -0
  14. package/src/template/echarts-custom-cmp-template/src/components/chart-widget/README.md +186 -0
  15. package/src/template/echarts-custom-cmp-template/src/components/chart-widget/index.tsx +724 -0
  16. package/src/template/echarts-custom-cmp-template/src/components/chart-widget/model.ts +153 -0
  17. package/src/template/echarts-custom-cmp-template/src/components/chart-widget/style.scss +209 -0
  18. package/src/template/neo-custom-cmp-template/.prettierrc.js +12 -0
  19. package/src/template/neo-custom-cmp-template/commitlint.config.js +59 -0
  20. package/src/template/{echart-custom-cmp-template → neo-custom-cmp-template}/package.json +7 -5
  21. package/src/template/neo-custom-cmp-template/public/css/base.css +283 -0
  22. package/src/template/neo-custom-cmp-template/public/scripts/app/bluebird.js +6679 -0
  23. package/src/template/neo-custom-cmp-template/public/template.html +13 -0
  24. package/src/template/neo-custom-cmp-template/src/assets/css/common.scss +127 -0
  25. package/src/template/neo-custom-cmp-template/src/assets/css/mixin.scss +47 -0
  26. package/src/template/neo-custom-cmp-template/src/components/info-card/index.tsx +69 -0
  27. package/src/template/neo-custom-cmp-template/src/components/info-card/model.ts +78 -0
  28. package/src/template/neo-custom-cmp-template/src/components/info-card/style.scss +105 -0
  29. package/src/template/neo-custom-cmp-template/src/components/neo-entity-grid/README.md +128 -0
  30. package/src/template/neo-custom-cmp-template/src/components/neo-entity-grid/index.tsx +295 -0
  31. package/src/template/neo-custom-cmp-template/src/components/neo-entity-grid/model.ts +94 -0
  32. package/src/template/neo-custom-cmp-template/src/components/neo-entity-grid/style.scss +127 -0
  33. package/src/template/neo-custom-cmp-template/tsconfig.json +68 -0
  34. package/src/template/echart-custom-cmp-template/src/components/list-widget/README.md +0 -2
  35. package/src/template/echart-custom-cmp-template/src/components/list-widget/index.tsx +0 -208
  36. package/src/template/echart-custom-cmp-template/src/components/list-widget/model.ts +0 -90
  37. package/src/template/echart-custom-cmp-template/src/components/list-widget/style.scss +0 -350
  38. /package/src/template/{echart-custom-cmp-template → echarts-custom-cmp-template}/.prettierrc.js +0 -0
  39. /package/src/template/{echart-custom-cmp-template → echarts-custom-cmp-template}/commitlint.config.js +0 -0
  40. /package/src/template/{echart-custom-cmp-template → echarts-custom-cmp-template}/public/css/base.css +0 -0
  41. /package/src/template/{echart-custom-cmp-template → echarts-custom-cmp-template}/public/scripts/app/bluebird.js +0 -0
  42. /package/src/template/{echart-custom-cmp-template → echarts-custom-cmp-template}/public/template.html +0 -0
  43. /package/src/template/{echart-custom-cmp-template → echarts-custom-cmp-template}/src/assets/css/common.scss +0 -0
  44. /package/src/template/{echart-custom-cmp-template → echarts-custom-cmp-template}/src/assets/css/mixin.scss +0 -0
  45. /package/src/template/{echart-custom-cmp-template → echarts-custom-cmp-template}/src/components/info-card/index.tsx +0 -0
  46. /package/src/template/{echart-custom-cmp-template → echarts-custom-cmp-template}/src/components/info-card/model.ts +0 -0
  47. /package/src/template/{echart-custom-cmp-template → echarts-custom-cmp-template}/src/components/info-card/style.scss +0 -0
  48. /package/src/template/{echart-custom-cmp-template → echarts-custom-cmp-template}/tsconfig.json +0 -0
  49. /package/src/template/{echart-custom-cmp-template → neo-custom-cmp-template}/README.md +0 -0
  50. /package/src/template/{echart-custom-cmp-template → neo-custom-cmp-template}/neo.config.js +0 -0
@@ -4,7 +4,7 @@
4
4
  --primary-color: #6366f1;
5
5
  --primary-light: #8b5cf6;
6
6
  --primary-dark: #4f46e5;
7
-
7
+
8
8
  // 功能色
9
9
  --success-color: #10b981;
10
10
  --success-light: #34d399;
@@ -14,34 +14,37 @@
14
14
  --error-light: #f87171;
15
15
  --info-color: #06b6d4;
16
16
  --info-light: #22d3ee;
17
-
17
+
18
18
  // 中性色
19
19
  --text-primary: #111827;
20
20
  --text-secondary: #6b7280;
21
21
  --text-tertiary: #9ca3af;
22
22
  --text-inverse: #ffffff;
23
-
23
+
24
24
  // 背景色
25
25
  --bg-primary: #ffffff;
26
26
  --bg-secondary: #f9fafb;
27
27
  --bg-tertiary: #f3f4f6;
28
28
  --bg-dark: #1f2937;
29
29
  --bg-dark-secondary: #374151;
30
-
30
+
31
31
  // 边框和分割线
32
32
  --border-light: #e5e7eb;
33
33
  --border-medium: #d1d5db;
34
34
  --border-dark: #9ca3af;
35
-
35
+
36
36
  // 阴影系统
37
37
  --shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
38
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);
39
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
40
+ 0 2px 4px -1px rgba(0, 0, 0, 0.06);
41
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1),
42
+ 0 4px 6px -2px rgba(0, 0, 0, 0.05);
43
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1),
44
+ 0 10px 10px -5px rgba(0, 0, 0, 0.04);
42
45
  --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
43
46
  --shadow-glow: 0 0 20px rgba(99, 102, 241, 0.3);
44
-
47
+
45
48
  // 圆角系统
46
49
  --radius-sm: 6px;
47
50
  --radius-md: 12px;
@@ -49,18 +52,18 @@
49
52
  --radius-xl: 20px;
50
53
  --radius-2xl: 24px;
51
54
  --radius-full: 9999px;
52
-
55
+
53
56
  // 动画缓动
54
57
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
55
58
  --ease-out: cubic-bezier(0, 0, 0.2, 1);
56
59
  --ease-in: cubic-bezier(0.4, 0, 1, 1);
57
60
  --ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
58
-
61
+
59
62
  // 过渡时间
60
63
  --duration-fast: 150ms;
61
64
  --duration-normal: 300ms;
62
65
  --duration-slow: 500ms;
63
-
66
+
64
67
  // 间距系统
65
68
  --space-xs: 4px;
66
69
  --space-sm: 8px;
@@ -117,7 +120,8 @@
117
120
  }
118
121
 
119
122
  @keyframes pulse {
120
- 0%, 100% {
123
+ 0%,
124
+ 100% {
121
125
  transform: scale(1);
122
126
  }
123
127
  50% {
@@ -126,7 +130,8 @@
126
130
  }
127
131
 
128
132
  @keyframes glow {
129
- 0%, 100% {
133
+ 0%,
134
+ 100% {
130
135
  box-shadow: var(--shadow-lg), var(--shadow-glow);
131
136
  }
132
137
  50% {
@@ -135,7 +140,8 @@
135
140
  }
136
141
 
137
142
  @keyframes float {
138
- 0%, 100% {
143
+ 0%,
144
+ 100% {
139
145
  transform: translateY(0px) rotate(0deg);
140
146
  }
141
147
  33% {
@@ -176,10 +182,15 @@
176
182
  }
177
183
 
178
184
  @keyframes bounce {
179
- 0%, 20%, 53%, 80%, 100% {
185
+ 0%,
186
+ 20%,
187
+ 53%,
188
+ 80%,
189
+ 100% {
180
190
  transform: translate3d(0, 0, 0);
181
191
  }
182
- 40%, 43% {
192
+ 40%,
193
+ 43% {
183
194
  transform: translate3d(0, -8px, 0);
184
195
  }
185
196
  70% {
@@ -208,20 +219,21 @@
208
219
  min-height: 100vh;
209
220
  padding: var(--space-lg);
210
221
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
211
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
222
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
223
+ 'Helvetica Neue', Arial, sans-serif;
212
224
  overflow-x: hidden;
213
225
  line-height: 1.6;
214
226
 
215
227
  // 主题变体
216
228
  &.light {
217
229
  background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
218
-
230
+
219
231
  .dashboard-header {
220
232
  background: var(--bg-primary);
221
233
  border: 1px solid var(--border-light);
222
234
  backdrop-filter: blur(20px);
223
235
  }
224
-
236
+
225
237
  .metric-card,
226
238
  .products-card,
227
239
  .activities-card,
@@ -235,14 +247,25 @@
235
247
 
236
248
  &.dark {
237
249
  background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
238
- color: var(--text-inverse);
239
-
250
+ color: var(--text-inverse) !important;
251
+
240
252
  .dashboard-header {
241
253
  background: rgba(30, 41, 59, 0.8);
242
254
  border: 1px solid rgba(51, 65, 85, 0.5);
243
255
  backdrop-filter: blur(20px);
256
+ color: var(--text-inverse);
257
+
258
+ .dashboard-title {
259
+ color: var(--text-inverse);
260
+ }
261
+
262
+ .user-info {
263
+ .user-name {
264
+ color: var(--text-inverse);
265
+ }
266
+ }
244
267
  }
245
-
268
+
246
269
  .metric-card,
247
270
  .products-card,
248
271
  .activities-card,
@@ -252,6 +275,89 @@
252
275
  border: 1px solid rgba(51, 65, 85, 0.5);
253
276
  color: var(--text-inverse);
254
277
  backdrop-filter: blur(20px);
278
+
279
+ .ant-card-head-title {
280
+ color: var(--text-inverse);
281
+ }
282
+
283
+ .ant-statistic-title {
284
+ color: var(--text-inverse);
285
+ }
286
+
287
+ .ant-statistic-content-value {
288
+ color: var(--text-inverse);
289
+ }
290
+
291
+ .metric-trend {
292
+ .trend-text {
293
+ color: var(--text-inverse);
294
+ }
295
+ }
296
+
297
+ .product-name {
298
+ color: var(--text-inverse);
299
+ }
300
+
301
+ .product-sales {
302
+ color: rgba(255, 255, 255, 0.7);
303
+ }
304
+
305
+ .activity-text {
306
+ .user-name {
307
+ color: var(--primary-light);
308
+ }
309
+
310
+ .action {
311
+ color: var(--text-inverse);
312
+ }
313
+ }
314
+
315
+ .activity-time {
316
+ color: rgba(255, 255, 255, 0.7);
317
+ }
318
+
319
+ .performance-header {
320
+ .metric-name {
321
+ color: var(--text-inverse);
322
+ }
323
+
324
+ .metric-value {
325
+ color: var(--primary-light);
326
+ }
327
+ }
328
+
329
+ .performance-target {
330
+ color: rgba(255, 255, 255, 0.7);
331
+ }
332
+
333
+ .active-users-description {
334
+ color: rgba(255, 255, 255, 0.7);
335
+ }
336
+
337
+ .active-users-number {
338
+ .unit {
339
+ color: rgba(255, 255, 255, 0.7);
340
+ }
341
+ }
342
+
343
+ .ant-btn {
344
+ color: var(--text-inverse);
345
+ border-color: rgba(255, 255, 255, 0.3);
346
+
347
+ &:hover {
348
+ color: var(--text-inverse);
349
+ border-color: var(--primary-light);
350
+ }
351
+ }
352
+
353
+ .ant-tag {
354
+ color: var(--text-inverse);
355
+ border-color: rgba(255, 255, 255, 0.3);
356
+ }
357
+
358
+ .ant-progress-text {
359
+ color: var(--text-inverse);
360
+ }
255
361
  }
256
362
  }
257
363
 
@@ -259,7 +365,7 @@
259
365
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
260
366
  background-size: 400% 400%;
261
367
  animation: gradientShift 15s ease infinite;
262
-
368
+
263
369
  &::before {
264
370
  content: '';
265
371
  position: absolute;
@@ -267,14 +373,25 @@
267
373
  left: 0;
268
374
  right: 0;
269
375
  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%);
376
+ background: radial-gradient(
377
+ circle at 20% 50%,
378
+ rgba(99, 102, 241, 0.2) 0%,
379
+ transparent 50%
380
+ ),
381
+ radial-gradient(
382
+ circle at 80% 20%,
383
+ rgba(139, 92, 246, 0.2) 0%,
384
+ transparent 50%
385
+ ),
386
+ radial-gradient(
387
+ circle at 40% 80%,
388
+ rgba(6, 182, 212, 0.2) 0%,
389
+ transparent 50%
390
+ );
274
391
  pointer-events: none;
275
392
  animation: gradientShift 20s ease infinite reverse;
276
393
  }
277
-
394
+
278
395
  &::after {
279
396
  content: '';
280
397
  position: absolute;
@@ -282,8 +399,12 @@
282
399
  left: 0;
283
400
  right: 0;
284
401
  bottom: 0;
285
- background:
286
- linear-gradient(45deg, transparent 30%, rgba(255, 255, 255, 0.05) 50%, transparent 70%);
402
+ background: linear-gradient(
403
+ 45deg,
404
+ transparent 30%,
405
+ rgba(255, 255, 255, 0.05) 50%,
406
+ transparent 70%
407
+ );
287
408
  pointer-events: none;
288
409
  animation: shimmer 3s ease-in-out infinite;
289
410
  }
@@ -294,7 +415,7 @@
294
415
  .metric-card {
295
416
  animation: pulse var(--duration-normal) var(--ease-bounce);
296
417
  }
297
-
418
+
298
419
  .product-item,
299
420
  .activity-item {
300
421
  animation: slideIn var(--duration-normal) var(--ease-out);
@@ -325,7 +446,12 @@
325
446
  left: 0;
326
447
  right: 0;
327
448
  height: 3px;
328
- background: linear-gradient(90deg, var(--primary-color), var(--primary-light), var(--info-color));
449
+ background: linear-gradient(
450
+ 90deg,
451
+ var(--primary-color),
452
+ var(--primary-light),
453
+ var(--info-color)
454
+ );
329
455
  border-radius: var(--radius-xl) var(--radius-xl) 0 0;
330
456
  }
331
457
 
@@ -333,7 +459,12 @@
333
459
  margin: 0;
334
460
  font-size: 32px;
335
461
  font-weight: 800;
336
- background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-light) 50%, var(--info-color) 100%);
462
+ background: linear-gradient(
463
+ 135deg,
464
+ var(--primary-color) 0%,
465
+ var(--primary-light) 50%,
466
+ var(--info-color) 100%
467
+ );
337
468
  background-size: 200% 200%;
338
469
  -webkit-background-clip: text;
339
470
  -webkit-text-fill-color: transparent;
@@ -343,14 +474,18 @@
343
474
  gap: var(--space-md);
344
475
  animation: gradientShift 3s ease infinite;
345
476
  letter-spacing: -0.02em;
346
-
477
+
347
478
  .ant-tag {
348
479
  font-size: 14px;
349
480
  font-weight: 600;
350
481
  padding: 4px 12px;
351
482
  border-radius: var(--radius-full);
352
483
  border: none;
353
- background: linear-gradient(135deg, var(--primary-color), var(--primary-light));
484
+ background: linear-gradient(
485
+ 135deg,
486
+ var(--primary-color),
487
+ var(--primary-light)
488
+ );
354
489
  color: white;
355
490
  box-shadow: var(--shadow-sm);
356
491
  }
@@ -361,7 +496,11 @@
361
496
  align-items: center;
362
497
  gap: var(--space-md);
363
498
  padding: var(--space-sm) var(--space-lg);
364
- background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1));
499
+ background: linear-gradient(
500
+ 135deg,
501
+ rgba(99, 102, 241, 0.1),
502
+ rgba(139, 92, 246, 0.1)
503
+ );
365
504
  border-radius: var(--radius-full);
366
505
  border: 1px solid rgba(99, 102, 241, 0.2);
367
506
  backdrop-filter: blur(10px);
@@ -376,7 +515,12 @@
376
515
  left: -100%;
377
516
  width: 100%;
378
517
  height: 100%;
379
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
518
+ background: linear-gradient(
519
+ 90deg,
520
+ transparent,
521
+ rgba(255, 255, 255, 0.2),
522
+ transparent
523
+ );
380
524
  transition: left 0.5s;
381
525
  }
382
526
 
@@ -384,7 +528,7 @@
384
528
  transform: translateY(-2px);
385
529
  box-shadow: var(--shadow-lg);
386
530
  border-color: rgba(99, 102, 241, 0.3);
387
-
531
+
388
532
  &::before {
389
533
  left: 100%;
390
534
  }
@@ -433,7 +577,11 @@
433
577
  left: 0;
434
578
  right: 0;
435
579
  height: 4px;
436
- background: linear-gradient(90deg, var(--primary-color), var(--primary-light));
580
+ background: linear-gradient(
581
+ 90deg,
582
+ var(--primary-color),
583
+ var(--primary-light)
584
+ );
437
585
  border-radius: var(--radius-xl) var(--radius-xl) 0 0;
438
586
  }
439
587
 
@@ -444,7 +592,11 @@
444
592
  left: 0;
445
593
  right: 0;
446
594
  bottom: 0;
447
- background: linear-gradient(135deg, rgba(99, 102, 241, 0.02), rgba(139, 92, 246, 0.02));
595
+ background: linear-gradient(
596
+ 135deg,
597
+ rgba(99, 102, 241, 0.02),
598
+ rgba(139, 92, 246, 0.02)
599
+ );
448
600
  opacity: 0;
449
601
  transition: opacity var(--duration-normal) var(--ease-in-out);
450
602
  }
@@ -453,16 +605,16 @@
453
605
  transform: translateY(-8px) scale(1.02);
454
606
  box-shadow: var(--shadow-2xl);
455
607
  border-color: rgba(99, 102, 241, 0.3);
456
-
608
+
457
609
  &::after {
458
610
  opacity: 1;
459
611
  }
460
-
612
+
461
613
  .metric-icon {
462
614
  transform: scale(1.1) rotate(5deg);
463
615
  color: var(--primary-color);
464
616
  }
465
-
617
+
466
618
  .ant-statistic-content-value {
467
619
  transform: scale(1.05);
468
620
  }
@@ -488,7 +640,11 @@
488
640
  font-size: 36px;
489
641
  font-weight: 800;
490
642
  line-height: 1.1;
491
- background: linear-gradient(135deg, var(--text-primary), var(--text-secondary));
643
+ background: linear-gradient(
644
+ 135deg,
645
+ var(--text-primary),
646
+ var(--text-secondary)
647
+ );
492
648
  -webkit-background-clip: text;
493
649
  -webkit-text-fill-color: transparent;
494
650
  background-clip: text;
@@ -516,7 +672,11 @@
516
672
 
517
673
  .ant-badge {
518
674
  .ant-badge-count {
519
- background: linear-gradient(135deg, var(--success-color), var(--success-light));
675
+ background: linear-gradient(
676
+ 135deg,
677
+ var(--success-color),
678
+ var(--success-light)
679
+ );
520
680
  border: none;
521
681
  font-weight: 600;
522
682
  font-size: 12px;
@@ -534,9 +694,13 @@
534
694
  // 特定卡片样式
535
695
  .users-card {
536
696
  &::before {
537
- background: linear-gradient(90deg, var(--primary-color), var(--primary-light));
697
+ background: linear-gradient(
698
+ 90deg,
699
+ var(--primary-color),
700
+ var(--primary-light)
701
+ );
538
702
  }
539
-
703
+
540
704
  .metric-icon {
541
705
  color: var(--primary-color);
542
706
  }
@@ -544,13 +708,17 @@
544
708
 
545
709
  .orders-card {
546
710
  &::before {
547
- background: linear-gradient(90deg, var(--success-color), var(--success-light));
711
+ background: linear-gradient(
712
+ 90deg,
713
+ var(--success-color),
714
+ var(--success-light)
715
+ );
548
716
  }
549
-
717
+
550
718
  .metric-icon {
551
719
  color: var(--success-color);
552
720
  }
553
-
721
+
554
722
  .metric-trend {
555
723
  background: rgba(16, 185, 129, 0.1);
556
724
  border-color: rgba(16, 185, 129, 0.2);
@@ -559,13 +727,17 @@
559
727
 
560
728
  .revenue-card {
561
729
  &::before {
562
- background: linear-gradient(90deg, var(--warning-color), var(--warning-light));
730
+ background: linear-gradient(
731
+ 90deg,
732
+ var(--warning-color),
733
+ var(--warning-light)
734
+ );
563
735
  }
564
-
736
+
565
737
  .metric-icon {
566
738
  color: var(--warning-color);
567
739
  }
568
-
740
+
569
741
  .metric-trend {
570
742
  background: rgba(245, 158, 11, 0.1);
571
743
  border-color: rgba(245, 158, 11, 0.2);
@@ -574,13 +746,17 @@
574
746
 
575
747
  .conversion-card {
576
748
  &::before {
577
- background: linear-gradient(90deg, var(--error-color), var(--error-light));
749
+ background: linear-gradient(
750
+ 90deg,
751
+ var(--error-color),
752
+ var(--error-light)
753
+ );
578
754
  }
579
-
755
+
580
756
  .metric-icon {
581
757
  color: var(--error-color);
582
758
  }
583
-
759
+
584
760
  .metric-trend {
585
761
  background: rgba(239, 68, 68, 0.1);
586
762
  border-color: rgba(239, 68, 68, 0.2);
@@ -611,7 +787,11 @@
611
787
  left: 0;
612
788
  right: 0;
613
789
  height: 3px;
614
- background: linear-gradient(90deg, var(--primary-color), var(--primary-light));
790
+ background: linear-gradient(
791
+ 90deg,
792
+ var(--primary-color),
793
+ var(--primary-light)
794
+ );
615
795
  border-radius: var(--radius-xl) var(--radius-xl) 0 0;
616
796
  }
617
797
 
@@ -624,8 +804,12 @@
624
804
  .ant-card-head {
625
805
  border-bottom: 1px solid rgba(0, 0, 0, 0.06);
626
806
  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
-
807
+ background: linear-gradient(
808
+ 135deg,
809
+ rgba(99, 102, 241, 0.02),
810
+ rgba(139, 92, 246, 0.02)
811
+ );
812
+
629
813
  .ant-card-head-title {
630
814
  font-size: 20px;
631
815
  font-weight: 700;
@@ -649,13 +833,17 @@
649
833
  .ant-card-extra {
650
834
  .ant-btn {
651
835
  border: none;
652
- background: linear-gradient(135deg, var(--primary-color), var(--primary-light));
836
+ background: linear-gradient(
837
+ 135deg,
838
+ var(--primary-color),
839
+ var(--primary-light)
840
+ );
653
841
  color: white;
654
842
  border-radius: var(--radius-md);
655
843
  font-weight: 600;
656
844
  padding: var(--space-sm) var(--space-lg);
657
845
  transition: all var(--duration-normal) var(--ease-in-out);
658
-
846
+
659
847
  &:hover {
660
848
  transform: translateY(-2px);
661
849
  box-shadow: var(--shadow-md);
@@ -683,7 +871,11 @@
683
871
  }
684
872
 
685
873
  &:hover {
686
- background: linear-gradient(135deg, rgba(99, 102, 241, 0.05), rgba(139, 92, 246, 0.05));
874
+ background: linear-gradient(
875
+ 135deg,
876
+ rgba(99, 102, 241, 0.05),
877
+ rgba(139, 92, 246, 0.05)
878
+ );
687
879
  border-radius: var(--radius-md);
688
880
  padding-left: var(--space-md);
689
881
  padding-right: var(--space-md);
@@ -712,21 +904,29 @@
712
904
 
713
905
  .product-growth {
714
906
  margin: 0 var(--space-lg);
715
-
907
+
716
908
  .ant-tag {
717
909
  border: none;
718
910
  border-radius: var(--radius-md);
719
911
  font-weight: 600;
720
912
  font-size: 12px;
721
913
  padding: var(--space-xs) var(--space-sm);
722
-
914
+
723
915
  &.ant-tag-green {
724
- background: linear-gradient(135deg, var(--success-color), var(--success-light));
916
+ background: linear-gradient(
917
+ 135deg,
918
+ var(--success-color),
919
+ var(--success-light)
920
+ );
725
921
  color: white;
726
922
  }
727
-
923
+
728
924
  &.ant-tag-red {
729
- background: linear-gradient(135deg, var(--error-color), var(--error-light));
925
+ background: linear-gradient(
926
+ 135deg,
927
+ var(--error-color),
928
+ var(--error-light)
929
+ );
730
930
  color: white;
731
931
  }
732
932
  }
@@ -734,12 +934,12 @@
734
934
 
735
935
  .product-progress {
736
936
  width: 120px;
737
-
937
+
738
938
  .ant-progress {
739
939
  .ant-progress-bg {
740
940
  border-radius: var(--radius-sm);
741
941
  }
742
-
942
+
743
943
  .ant-progress-outer {
744
944
  .ant-progress-inner {
745
945
  background-color: var(--bg-tertiary);
@@ -769,7 +969,11 @@
769
969
  }
770
970
 
771
971
  &:hover {
772
- background: linear-gradient(135deg, rgba(99, 102, 241, 0.05), rgba(139, 92, 246, 0.05));
972
+ background: linear-gradient(
973
+ 135deg,
974
+ rgba(99, 102, 241, 0.05),
975
+ rgba(139, 92, 246, 0.05)
976
+ );
773
977
  border-radius: var(--radius-md);
774
978
  padding-left: var(--space-md);
775
979
  padding-right: var(--space-md);
@@ -821,7 +1025,7 @@
821
1025
  gap: var(--space-xs);
822
1026
  opacity: 0;
823
1027
  transition: all var(--duration-normal) var(--ease-in-out);
824
-
1028
+
825
1029
  .ant-btn {
826
1030
  border: none;
827
1031
  background: transparent;
@@ -829,7 +1033,7 @@
829
1033
  padding: var(--space-xs);
830
1034
  border-radius: var(--radius-sm);
831
1035
  transition: all var(--duration-fast) var(--ease-in-out);
832
-
1036
+
833
1037
  &:hover {
834
1038
  background: rgba(99, 102, 241, 0.1);
835
1039
  color: var(--primary-color);
@@ -866,7 +1070,11 @@
866
1070
  left: 0;
867
1071
  right: 0;
868
1072
  height: 3px;
869
- background: linear-gradient(90deg, var(--primary-color), var(--primary-light));
1073
+ background: linear-gradient(
1074
+ 90deg,
1075
+ var(--primary-color),
1076
+ var(--primary-light)
1077
+ );
870
1078
  border-radius: var(--radius-xl) var(--radius-xl) 0 0;
871
1079
  }
872
1080
 
@@ -878,8 +1086,12 @@
878
1086
 
879
1087
  .ant-card-head {
880
1088
  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
-
1089
+ background: linear-gradient(
1090
+ 135deg,
1091
+ rgba(99, 102, 241, 0.02),
1092
+ rgba(139, 92, 246, 0.02)
1093
+ );
1094
+
883
1095
  .ant-card-head-title {
884
1096
  font-size: 20px;
885
1097
  font-weight: 700;
@@ -913,7 +1125,11 @@
913
1125
  font-size: 20px;
914
1126
  font-weight: 800;
915
1127
  color: var(--primary-color);
916
- background: linear-gradient(135deg, var(--primary-color), var(--primary-light));
1128
+ background: linear-gradient(
1129
+ 135deg,
1130
+ var(--primary-color),
1131
+ var(--primary-light)
1132
+ );
917
1133
  -webkit-background-clip: text;
918
1134
  -webkit-text-fill-color: transparent;
919
1135
  background-clip: text;
@@ -924,7 +1140,7 @@
924
1140
  .ant-progress-bg {
925
1141
  border-radius: var(--radius-sm);
926
1142
  }
927
-
1143
+
928
1144
  .ant-progress-outer {
929
1145
  .ant-progress-inner {
930
1146
  background-color: var(--bg-tertiary);
@@ -965,7 +1181,11 @@
965
1181
  left: 0;
966
1182
  right: 0;
967
1183
  height: 3px;
968
- background: linear-gradient(90deg, var(--primary-color), var(--primary-light));
1184
+ background: linear-gradient(
1185
+ 90deg,
1186
+ var(--primary-color),
1187
+ var(--primary-light)
1188
+ );
969
1189
  border-radius: var(--radius-xl) var(--radius-xl) 0 0;
970
1190
  }
971
1191
 
@@ -977,8 +1197,12 @@
977
1197
 
978
1198
  .ant-card-head {
979
1199
  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
-
1200
+ background: linear-gradient(
1201
+ 135deg,
1202
+ rgba(99, 102, 241, 0.02),
1203
+ rgba(139, 92, 246, 0.02)
1204
+ );
1205
+
982
1206
  .ant-card-head-title {
983
1207
  font-size: 20px;
984
1208
  font-weight: 700;
@@ -1013,7 +1237,12 @@
1013
1237
  .number {
1014
1238
  font-size: 56px;
1015
1239
  font-weight: 900;
1016
- background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-light) 50%, var(--info-color) 100%);
1240
+ background: linear-gradient(
1241
+ 135deg,
1242
+ var(--primary-color) 0%,
1243
+ var(--primary-light) 50%,
1244
+ var(--info-color) 100%
1245
+ );
1017
1246
  background-size: 200% 200%;
1018
1247
  -webkit-background-clip: text;
1019
1248
  -webkit-text-fill-color: transparent;
@@ -1081,18 +1310,18 @@
1081
1310
  .data-dashboard-container {
1082
1311
  padding: var(--space-md);
1083
1312
  }
1084
-
1313
+
1085
1314
  .dashboard-header {
1086
1315
  padding: var(--space-lg) var(--space-xl);
1087
-
1316
+
1088
1317
  .dashboard-title {
1089
1318
  font-size: 28px;
1090
1319
  }
1091
1320
  }
1092
-
1321
+
1093
1322
  .active-users-content {
1094
1323
  gap: var(--space-lg);
1095
-
1324
+
1096
1325
  .active-users-visual {
1097
1326
  width: 200px;
1098
1327
  height: 200px;
@@ -1117,7 +1346,7 @@
1117
1346
  flex-direction: column;
1118
1347
  gap: var(--space-sm);
1119
1348
  }
1120
-
1349
+
1121
1350
  .user-info {
1122
1351
  align-self: center;
1123
1352
  }
@@ -1128,13 +1357,13 @@
1128
1357
  .ant-card-body {
1129
1358
  padding: var(--space-lg);
1130
1359
  }
1131
-
1360
+
1132
1361
  .ant-statistic-content {
1133
1362
  .ant-statistic-content-value {
1134
1363
  font-size: 28px;
1135
1364
  }
1136
1365
  }
1137
-
1366
+
1138
1367
  .metric-icon {
1139
1368
  font-size: 24px;
1140
1369
  }
@@ -1160,16 +1389,16 @@
1160
1389
  height: 180px;
1161
1390
  align-self: center;
1162
1391
  }
1163
-
1392
+
1164
1393
  .active-users-number {
1165
1394
  justify-content: center;
1166
-
1395
+
1167
1396
  .number {
1168
1397
  font-size: 48px;
1169
1398
  }
1170
1399
  }
1171
1400
  }
1172
-
1401
+
1173
1402
  .performance-row {
1174
1403
  .performance-card {
1175
1404
  .ant-card-body {
@@ -1183,21 +1412,21 @@
1183
1412
  .data-dashboard-container {
1184
1413
  padding: var(--space-xs);
1185
1414
  }
1186
-
1415
+
1187
1416
  .dashboard-header {
1188
1417
  padding: var(--space-md);
1189
-
1418
+
1190
1419
  .dashboard-title {
1191
1420
  font-size: 20px;
1192
1421
  }
1193
1422
  }
1194
-
1423
+
1195
1424
  .metrics-row {
1196
1425
  .metric-card {
1197
1426
  .ant-card-body {
1198
1427
  padding: var(--space-md);
1199
1428
  }
1200
-
1429
+
1201
1430
  .ant-statistic-content {
1202
1431
  .ant-statistic-content-value {
1203
1432
  font-size: 24px;
@@ -1205,18 +1434,18 @@
1205
1434
  }
1206
1435
  }
1207
1436
  }
1208
-
1437
+
1209
1438
  .active-users-content {
1210
1439
  .active-users-visual {
1211
1440
  width: 150px;
1212
1441
  height: 150px;
1213
1442
  }
1214
-
1443
+
1215
1444
  .active-users-number {
1216
1445
  .number {
1217
1446
  font-size: 40px;
1218
1447
  }
1219
-
1448
+
1220
1449
  .unit {
1221
1450
  font-size: 16px;
1222
1451
  }
@@ -1229,11 +1458,15 @@
1229
1458
  .ant-spin {
1230
1459
  .ant-spin-dot {
1231
1460
  .ant-spin-dot-item {
1232
- background: linear-gradient(135deg, var(--primary-color), var(--primary-light));
1461
+ background: linear-gradient(
1462
+ 135deg,
1463
+ var(--primary-color),
1464
+ var(--primary-light)
1465
+ );
1233
1466
  border-radius: var(--radius-sm);
1234
1467
  }
1235
1468
  }
1236
-
1469
+
1237
1470
  .ant-spin-text {
1238
1471
  color: var(--text-primary);
1239
1472
  font-weight: 600;
@@ -1253,7 +1486,11 @@
1253
1486
  }
1254
1487
 
1255
1488
  ::-webkit-scrollbar-thumb {
1256
- background: linear-gradient(135deg, var(--primary-color), var(--primary-light));
1489
+ background: linear-gradient(
1490
+ 135deg,
1491
+ var(--primary-color),
1492
+ var(--primary-light)
1493
+ );
1257
1494
  border-radius: var(--radius-sm);
1258
1495
  transition: all var(--duration-normal) var(--ease-in-out);
1259
1496
  }
@@ -1277,7 +1514,7 @@
1277
1514
  }
1278
1515
  }
1279
1516
  }
1280
-
1517
+
1281
1518
  // 添加数据更新时的闪烁效果
1282
1519
  &.animating {
1283
1520
  .metric-card {
@@ -1286,16 +1523,24 @@
1286
1523
  }
1287
1524
  }
1288
1525
  }
1289
-
1526
+
1290
1527
  // 添加页面加载时的入场动画
1291
1528
  .dashboard-content {
1292
1529
  > * {
1293
1530
  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; }
1531
+
1532
+ &:nth-child(1) {
1533
+ animation-delay: 0.1s;
1534
+ }
1535
+ &:nth-child(2) {
1536
+ animation-delay: 0.2s;
1537
+ }
1538
+ &:nth-child(3) {
1539
+ animation-delay: 0.3s;
1540
+ }
1541
+ &:nth-child(4) {
1542
+ animation-delay: 0.4s;
1543
+ }
1299
1544
  }
1300
1545
  }
1301
1546
  }
@@ -1304,7 +1549,7 @@
1304
1549
  .ant-btn {
1305
1550
  position: relative;
1306
1551
  overflow: hidden;
1307
-
1552
+
1308
1553
  &::before {
1309
1554
  content: '';
1310
1555
  position: absolute;
@@ -1312,10 +1557,15 @@
1312
1557
  left: -100%;
1313
1558
  width: 100%;
1314
1559
  height: 100%;
1315
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
1560
+ background: linear-gradient(
1561
+ 90deg,
1562
+ transparent,
1563
+ rgba(255, 255, 255, 0.2),
1564
+ transparent
1565
+ );
1316
1566
  transition: left 0.5s;
1317
1567
  }
1318
-
1568
+
1319
1569
  &:hover::before {
1320
1570
  left: 100%;
1321
1571
  }
@@ -1324,7 +1574,7 @@
1324
1574
  // 添加标签悬停效果
1325
1575
  .ant-tag {
1326
1576
  transition: all var(--duration-normal) var(--ease-in-out);
1327
-
1577
+
1328
1578
  &:hover {
1329
1579
  transform: translateY(-2px) scale(1.05);
1330
1580
  box-shadow: var(--shadow-md);
@@ -1341,7 +1591,7 @@
1341
1591
  // 添加头像悬停效果
1342
1592
  .ant-avatar {
1343
1593
  transition: all var(--duration-normal) var(--ease-bounce);
1344
-
1594
+
1345
1595
  &:hover {
1346
1596
  transform: scale(1.1) rotate(5deg);
1347
1597
  box-shadow: var(--shadow-lg);
@@ -1352,7 +1602,7 @@
1352
1602
  .ant-card {
1353
1603
  .ant-card-body {
1354
1604
  position: relative;
1355
-
1605
+
1356
1606
  &::before {
1357
1607
  content: '';
1358
1608
  position: absolute;
@@ -1360,13 +1610,17 @@
1360
1610
  left: 0;
1361
1611
  right: 0;
1362
1612
  bottom: 0;
1363
- background: linear-gradient(135deg, rgba(99, 102, 241, 0.02), rgba(139, 92, 246, 0.02));
1613
+ background: linear-gradient(
1614
+ 135deg,
1615
+ rgba(99, 102, 241, 0.02),
1616
+ rgba(139, 92, 246, 0.02)
1617
+ );
1364
1618
  opacity: 0;
1365
1619
  transition: opacity var(--duration-normal) var(--ease-in-out);
1366
1620
  pointer-events: none;
1367
1621
  }
1368
1622
  }
1369
-
1623
+
1370
1624
  &:hover .ant-card-body::before {
1371
1625
  opacity: 1;
1372
1626
  }
@@ -1399,11 +1653,15 @@
1399
1653
  }
1400
1654
 
1401
1655
  .gradient-text {
1402
- background: linear-gradient(135deg, var(--primary-color), var(--primary-light), var(--info-color));
1656
+ background: linear-gradient(
1657
+ 135deg,
1658
+ var(--primary-color),
1659
+ var(--primary-light),
1660
+ var(--info-color)
1661
+ );
1403
1662
  background-size: 200% 200%;
1404
1663
  -webkit-background-clip: text;
1405
1664
  -webkit-text-fill-color: transparent;
1406
1665
  background-clip: text;
1407
1666
  animation: textShine 3s ease infinite;
1408
1667
  }
1409
-