neo-cmp-cli 1.8.2 → 1.8.3

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 (200) hide show
  1. package/bin/neo.js +1 -1
  2. package/package.json +6 -5
  3. package/src/{module/index.js → index.js} +14 -14
  4. package/src/{module/main.js → main.js} +18 -18
  5. package/src/module/neoInitByCopy.js +6 -6
  6. package/src/neo/webpack.mf.js +1 -1
  7. package/src/oss/publish2oss.js +1 -1
  8. package/src/utils/cmpUtils/createCmpByZip.js +7 -5
  9. package/src/utils/cmpUtils/pullCmp.js +1 -1
  10. package/src/utils/cmpUtils/pushCmp.js +9 -7
  11. package/src/utils/projectUtils/updatePublishLog.js +1 -1
  12. package/test/demo.js +1 -1
  13. package/test/demo3.js +1 -1
  14. package/test/neo.config.js +77 -0
  15. package/src/template/antd-custom-cmp-template/.prettierrc.js +0 -12
  16. package/src/template/antd-custom-cmp-template/README.md +0 -153
  17. package/src/template/antd-custom-cmp-template/commitlint.config.js +0 -59
  18. package/src/template/antd-custom-cmp-template/neo.config.js +0 -144
  19. package/src/template/antd-custom-cmp-template/package.json +0 -60
  20. package/src/template/antd-custom-cmp-template/public/css/base.css +0 -283
  21. package/src/template/antd-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  22. package/src/template/antd-custom-cmp-template/public/template.html +0 -13
  23. package/src/template/antd-custom-cmp-template/src/assets/css/common.scss +0 -127
  24. package/src/template/antd-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  25. package/src/template/antd-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  26. package/src/template/antd-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  27. package/src/template/antd-custom-cmp-template/src/assets/img/favicon.png +0 -0
  28. package/src/template/antd-custom-cmp-template/src/components/dataDashboard/README.md +0 -39
  29. package/src/template/antd-custom-cmp-template/src/components/dataDashboard/index.tsx +0 -462
  30. package/src/template/antd-custom-cmp-template/src/components/dataDashboard/model.ts +0 -75
  31. package/src/template/antd-custom-cmp-template/src/components/dataDashboard/style.scss +0 -1667
  32. package/src/template/antd-custom-cmp-template/src/components/infoCard/index.tsx +0 -87
  33. package/src/template/antd-custom-cmp-template/src/components/infoCard/model.ts +0 -80
  34. package/src/template/antd-custom-cmp-template/src/components/infoCard/style.scss +0 -105
  35. package/src/template/antd-custom-cmp-template/tsconfig.json +0 -68
  36. package/src/template/develop/neo-custom-cmp-template/.prettierrc.js +0 -12
  37. package/src/template/develop/neo-custom-cmp-template/README.md +0 -48
  38. package/src/template/develop/neo-custom-cmp-template/commitlint.config.js +0 -59
  39. package/src/template/develop/neo-custom-cmp-template/docs/README.md +0 -13
  40. package/src/template/develop/neo-custom-cmp-template/neo.config.js +0 -121
  41. package/src/template/develop/neo-custom-cmp-template/package.json +0 -63
  42. package/src/template/develop/neo-custom-cmp-template/public/css/base.css +0 -283
  43. package/src/template/develop/neo-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  44. package/src/template/develop/neo-custom-cmp-template/public/template.html +0 -13
  45. package/src/template/develop/neo-custom-cmp-template/src/assets/css/common.scss +0 -127
  46. package/src/template/develop/neo-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  47. package/src/template/develop/neo-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  48. package/src/template/develop/neo-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  49. package/src/template/develop/neo-custom-cmp-template/src/assets/img/favicon.png +0 -0
  50. package/src/template/develop/neo-custom-cmp-template/src/assets/img/table.svg +0 -1
  51. package/src/template/develop/neo-custom-cmp-template/src/components/contactCardList/README.md +0 -65
  52. package/src/template/develop/neo-custom-cmp-template/src/components/contactCardList/index.tsx +0 -180
  53. package/src/template/develop/neo-custom-cmp-template/src/components/contactCardList/model.ts +0 -50
  54. package/src/template/develop/neo-custom-cmp-template/src/components/contactCardList/style.scss +0 -260
  55. package/src/template/develop/neo-custom-cmp-template/src/components/contactForm/README.md +0 -94
  56. package/src/template/develop/neo-custom-cmp-template/src/components/contactForm/index.tsx +0 -251
  57. package/src/template/develop/neo-custom-cmp-template/src/components/contactForm/model.ts +0 -56
  58. package/src/template/develop/neo-custom-cmp-template/src/components/contactForm/style.scss +0 -120
  59. package/src/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/README.md +0 -115
  60. package/src/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/index.tsx +0 -304
  61. package/src/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/model.ts +0 -87
  62. package/src/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/style.scss +0 -127
  63. package/src/template/develop/neo-custom-cmp-template/src/utils/axiosFetcher.ts +0 -29
  64. package/src/template/develop/neo-custom-cmp-template/src/utils/queryObjectData.ts +0 -39
  65. package/src/template/develop/neo-custom-cmp-template/src/utils/xobjects.ts +0 -203
  66. package/src/template/develop/neo-custom-cmp-template/tsconfig.json +0 -68
  67. package/src/template/echarts-custom-cmp-template/.prettierrc.js +0 -12
  68. package/src/template/echarts-custom-cmp-template/README.md +0 -198
  69. package/src/template/echarts-custom-cmp-template/commitlint.config.js +0 -59
  70. package/src/template/echarts-custom-cmp-template/neo.config.js +0 -140
  71. package/src/template/echarts-custom-cmp-template/package.json +0 -61
  72. package/src/template/echarts-custom-cmp-template/public/css/base.css +0 -283
  73. package/src/template/echarts-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  74. package/src/template/echarts-custom-cmp-template/public/template.html +0 -13
  75. package/src/template/echarts-custom-cmp-template/src/assets/css/common.scss +0 -127
  76. package/src/template/echarts-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  77. package/src/template/echarts-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  78. package/src/template/echarts-custom-cmp-template/src/assets/img/chart.svg +0 -1
  79. package/src/template/echarts-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  80. package/src/template/echarts-custom-cmp-template/src/assets/img/favicon.png +0 -0
  81. package/src/template/echarts-custom-cmp-template/src/components/chartWidget/README.md +0 -186
  82. package/src/template/echarts-custom-cmp-template/src/components/chartWidget/index.tsx +0 -724
  83. package/src/template/echarts-custom-cmp-template/src/components/chartWidget/model.ts +0 -151
  84. package/src/template/echarts-custom-cmp-template/src/components/chartWidget/style.scss +0 -209
  85. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/README.md +0 -125
  86. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/USAGE.md +0 -190
  87. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/index.tsx +0 -385
  88. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/model.ts +0 -107
  89. package/src/template/echarts-custom-cmp-template/src/components/mapWidget/style.scss +0 -192
  90. package/src/template/echarts-custom-cmp-template/src/utils/url.ts +0 -82
  91. package/src/template/echarts-custom-cmp-template/tsconfig.json +0 -68
  92. package/src/template/empty-cmp/index.tsx +0 -58
  93. package/src/template/empty-cmp/model.ts +0 -79
  94. package/src/template/empty-cmp/style.scss +0 -72
  95. package/src/template/empty-custom-cmp-template/.prettierrc.js +0 -12
  96. package/src/template/empty-custom-cmp-template/README.md +0 -154
  97. package/src/template/empty-custom-cmp-template/commitlint.config.js +0 -59
  98. package/src/template/empty-custom-cmp-template/neo.config.js +0 -138
  99. package/src/template/empty-custom-cmp-template/package.json +0 -58
  100. package/src/template/empty-custom-cmp-template/public/css/base.css +0 -283
  101. package/src/template/empty-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  102. package/src/template/empty-custom-cmp-template/public/template.html +0 -13
  103. package/src/template/empty-custom-cmp-template/src/assets/css/common.scss +0 -127
  104. package/src/template/empty-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  105. package/src/template/empty-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  106. package/src/template/empty-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  107. package/src/template/empty-custom-cmp-template/src/assets/img/favicon.png +0 -0
  108. package/src/template/empty-custom-cmp-template/src/assets/img/map.svg +0 -1
  109. package/src/template/empty-custom-cmp-template/src/components/README.md +0 -3
  110. package/src/template/empty-custom-cmp-template/tsconfig.json +0 -68
  111. package/src/template/neo-custom-cmp-template/.prettierrc.js +0 -12
  112. package/src/template/neo-custom-cmp-template/README.md +0 -155
  113. package/src/template/neo-custom-cmp-template/commitlint.config.js +0 -59
  114. package/src/template/neo-custom-cmp-template/docs/README.md +0 -244
  115. package/src/template/neo-custom-cmp-template/neo.config.js +0 -140
  116. package/src/template/neo-custom-cmp-template/package.json +0 -66
  117. package/src/template/neo-custom-cmp-template/public/css/base.css +0 -283
  118. package/src/template/neo-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  119. package/src/template/neo-custom-cmp-template/public/template.html +0 -13
  120. package/src/template/neo-custom-cmp-template/src/assets/css/common.scss +0 -127
  121. package/src/template/neo-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  122. package/src/template/neo-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  123. package/src/template/neo-custom-cmp-template/src/assets/img/card-list.svg +0 -1
  124. package/src/template/neo-custom-cmp-template/src/assets/img/contact-form.svg +0 -1
  125. package/src/template/neo-custom-cmp-template/src/assets/img/custom-form.svg +0 -1
  126. package/src/template/neo-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  127. package/src/template/neo-custom-cmp-template/src/assets/img/data-list.svg +0 -1
  128. package/src/template/neo-custom-cmp-template/src/assets/img/detail.svg +0 -1
  129. package/src/template/neo-custom-cmp-template/src/assets/img/table.svg +0 -1
  130. package/src/template/neo-custom-cmp-template/src/components/entityCardList/README.md +0 -61
  131. package/src/template/neo-custom-cmp-template/src/components/entityCardList/index.tsx +0 -202
  132. package/src/template/neo-custom-cmp-template/src/components/entityCardList/model.ts +0 -74
  133. package/src/template/neo-custom-cmp-template/src/components/entityCardList/style.scss +0 -260
  134. package/src/template/neo-custom-cmp-template/src/components/entityDetail/README.md +0 -176
  135. package/src/template/neo-custom-cmp-template/src/components/entityDetail/index.tsx +0 -334
  136. package/src/template/neo-custom-cmp-template/src/components/entityDetail/model.ts +0 -123
  137. package/src/template/neo-custom-cmp-template/src/components/entityDetail/style.scss +0 -292
  138. package/src/template/neo-custom-cmp-template/src/components/entityForm/README.md +0 -176
  139. package/src/template/neo-custom-cmp-template/src/components/entityForm/index.tsx +0 -615
  140. package/src/template/neo-custom-cmp-template/src/components/entityForm/model.ts +0 -107
  141. package/src/template/neo-custom-cmp-template/src/components/entityForm/style.scss +0 -370
  142. package/src/template/neo-custom-cmp-template/src/components/entityTable/README.md +0 -92
  143. package/src/template/neo-custom-cmp-template/src/components/entityTable/index.tsx +0 -784
  144. package/src/template/neo-custom-cmp-template/src/components/entityTable/model.ts +0 -134
  145. package/src/template/neo-custom-cmp-template/src/components/entityTable/style.scss +0 -304
  146. package/src/template/neo-custom-cmp-template/src/utils/axiosFetcher.ts +0 -37
  147. package/src/template/neo-custom-cmp-template/src/utils/queryObjectData.ts +0 -76
  148. package/src/template/neo-custom-cmp-template/src/utils/xobjects.ts +0 -162
  149. package/src/template/neo-custom-cmp-template/tsconfig.json +0 -49
  150. package/src/template/react-custom-cmp-template/.prettierrc.js +0 -12
  151. package/src/template/react-custom-cmp-template/README.md +0 -154
  152. package/src/template/react-custom-cmp-template/commitlint.config.js +0 -59
  153. package/src/template/react-custom-cmp-template/neo.config.js +0 -137
  154. package/src/template/react-custom-cmp-template/package.json +0 -57
  155. package/src/template/react-custom-cmp-template/public/css/base.css +0 -283
  156. package/src/template/react-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  157. package/src/template/react-custom-cmp-template/public/template.html +0 -13
  158. package/src/template/react-custom-cmp-template/src/assets/css/common.scss +0 -127
  159. package/src/template/react-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  160. package/src/template/react-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  161. package/src/template/react-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  162. package/src/template/react-custom-cmp-template/src/assets/img/favicon.png +0 -0
  163. package/src/template/react-custom-cmp-template/src/components/infoCard/index.jsx +0 -45
  164. package/src/template/react-custom-cmp-template/src/components/infoCard/model.js +0 -81
  165. package/src/template/react-custom-cmp-template/src/components/infoCard/style.scss +0 -67
  166. package/src/template/react-ts-custom-cmp-template/.prettierrc.js +0 -12
  167. package/src/template/react-ts-custom-cmp-template/README.md +0 -154
  168. package/src/template/react-ts-custom-cmp-template/commitlint.config.js +0 -59
  169. package/src/template/react-ts-custom-cmp-template/neo.config.js +0 -138
  170. package/src/template/react-ts-custom-cmp-template/package.json +0 -59
  171. package/src/template/react-ts-custom-cmp-template/public/css/base.css +0 -283
  172. package/src/template/react-ts-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  173. package/src/template/react-ts-custom-cmp-template/public/template.html +0 -13
  174. package/src/template/react-ts-custom-cmp-template/src/assets/css/common.scss +0 -127
  175. package/src/template/react-ts-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  176. package/src/template/react-ts-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  177. package/src/template/react-ts-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  178. package/src/template/react-ts-custom-cmp-template/src/assets/img/favicon.png +0 -0
  179. package/src/template/react-ts-custom-cmp-template/src/assets/img/map.svg +0 -1
  180. package/src/template/react-ts-custom-cmp-template/src/components/listWidget/README.md +0 -2
  181. package/src/template/react-ts-custom-cmp-template/src/components/listWidget/index.tsx +0 -208
  182. package/src/template/react-ts-custom-cmp-template/src/components/listWidget/model.ts +0 -92
  183. package/src/template/react-ts-custom-cmp-template/src/components/listWidget/style.scss +0 -350
  184. package/src/template/react-ts-custom-cmp-template/tsconfig.json +0 -68
  185. package/src/template/vue2-custom-cmp-template/.prettierrc.js +0 -12
  186. package/src/template/vue2-custom-cmp-template/README.md +0 -154
  187. package/src/template/vue2-custom-cmp-template/commitlint.config.js +0 -59
  188. package/src/template/vue2-custom-cmp-template/neo.config.js +0 -146
  189. package/src/template/vue2-custom-cmp-template/package.json +0 -59
  190. package/src/template/vue2-custom-cmp-template/public/css/base.css +0 -283
  191. package/src/template/vue2-custom-cmp-template/public/scripts/app/bluebird.js +0 -6679
  192. package/src/template/vue2-custom-cmp-template/public/template.html +0 -13
  193. package/src/template/vue2-custom-cmp-template/src/assets/css/common.scss +0 -126
  194. package/src/template/vue2-custom-cmp-template/src/assets/css/mixin.scss +0 -47
  195. package/src/template/vue2-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  196. package/src/template/vue2-custom-cmp-template/src/assets/img/custom-widget.svg +0 -1
  197. package/src/template/vue2-custom-cmp-template/src/assets/img/favicon.png +0 -0
  198. package/src/template/vue2-custom-cmp-template/src/components/vueInfoCard/index.vue +0 -131
  199. package/src/template/vue2-custom-cmp-template/src/components/vueInfoCard/model.js +0 -81
  200. package/src/utils/getConfigObj.js +0 -18
@@ -1,1667 +0,0 @@
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),
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);
45
- --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
46
- --shadow-glow: 0 0 20px rgba(99, 102, 241, 0.3);
47
-
48
- // 圆角系统
49
- --radius-sm: 6px;
50
- --radius-md: 12px;
51
- --radius-lg: 16px;
52
- --radius-xl: 20px;
53
- --radius-2xl: 24px;
54
- --radius-full: 9999px;
55
-
56
- // 动画缓动
57
- --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
58
- --ease-out: cubic-bezier(0, 0, 0.2, 1);
59
- --ease-in: cubic-bezier(0.4, 0, 1, 1);
60
- --ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
61
-
62
- // 过渡时间
63
- --duration-fast: 150ms;
64
- --duration-normal: 300ms;
65
- --duration-slow: 500ms;
66
-
67
- // 间距系统
68
- --space-xs: 4px;
69
- --space-sm: 8px;
70
- --space-md: 16px;
71
- --space-lg: 24px;
72
- --space-xl: 32px;
73
- --space-2xl: 48px;
74
- --space-3xl: 64px;
75
- }
76
-
77
- // 现代化动画关键帧
78
- @keyframes fadeInUp {
79
- from {
80
- opacity: 0;
81
- transform: translateY(40px) scale(0.95);
82
- }
83
- to {
84
- opacity: 1;
85
- transform: translateY(0) scale(1);
86
- }
87
- }
88
-
89
- @keyframes fadeInLeft {
90
- from {
91
- opacity: 0;
92
- transform: translateX(-30px);
93
- }
94
- to {
95
- opacity: 1;
96
- transform: translateX(0);
97
- }
98
- }
99
-
100
- @keyframes fadeInRight {
101
- from {
102
- opacity: 0;
103
- transform: translateX(30px);
104
- }
105
- to {
106
- opacity: 1;
107
- transform: translateX(0);
108
- }
109
- }
110
-
111
- @keyframes scaleIn {
112
- from {
113
- opacity: 0;
114
- transform: scale(0.8);
115
- }
116
- to {
117
- opacity: 1;
118
- transform: scale(1);
119
- }
120
- }
121
-
122
- @keyframes pulse {
123
- 0%,
124
- 100% {
125
- transform: scale(1);
126
- }
127
- 50% {
128
- transform: scale(1.02);
129
- }
130
- }
131
-
132
- @keyframes glow {
133
- 0%,
134
- 100% {
135
- box-shadow: var(--shadow-lg), var(--shadow-glow);
136
- }
137
- 50% {
138
- box-shadow: var(--shadow-xl), 0 0 30px rgba(99, 102, 241, 0.4);
139
- }
140
- }
141
-
142
- @keyframes float {
143
- 0%,
144
- 100% {
145
- transform: translateY(0px) rotate(0deg);
146
- }
147
- 33% {
148
- transform: translateY(-8px) rotate(1deg);
149
- }
150
- 66% {
151
- transform: translateY(-4px) rotate(-1deg);
152
- }
153
- }
154
-
155
- @keyframes rotate {
156
- from {
157
- transform: rotate(0deg);
158
- }
159
- to {
160
- transform: rotate(360deg);
161
- }
162
- }
163
-
164
- @keyframes slideIn {
165
- from {
166
- opacity: 0;
167
- transform: translateX(-20px);
168
- }
169
- to {
170
- opacity: 1;
171
- transform: translateX(0);
172
- }
173
- }
174
-
175
- @keyframes shimmer {
176
- 0% {
177
- background-position: -200px 0;
178
- }
179
- 100% {
180
- background-position: calc(200px + 100%) 0;
181
- }
182
- }
183
-
184
- @keyframes bounce {
185
- 0%,
186
- 20%,
187
- 53%,
188
- 80%,
189
- 100% {
190
- transform: translate3d(0, 0, 0);
191
- }
192
- 40%,
193
- 43% {
194
- transform: translate3d(0, -8px, 0);
195
- }
196
- 70% {
197
- transform: translate3d(0, -4px, 0);
198
- }
199
- 90% {
200
- transform: translate3d(0, -2px, 0);
201
- }
202
- }
203
-
204
- @keyframes gradientShift {
205
- 0% {
206
- background-position: 0% 50%;
207
- }
208
- 50% {
209
- background-position: 100% 50%;
210
- }
211
- 100% {
212
- background-position: 0% 50%;
213
- }
214
- }
215
-
216
- // 主容器 - 现代化设计
217
- .data-dashboard-container {
218
- position: relative;
219
- min-height: 100vh;
220
- padding: var(--space-lg);
221
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
222
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
223
- 'Helvetica Neue', Arial, sans-serif;
224
- overflow-x: hidden;
225
- line-height: 1.6;
226
-
227
- // 主题变体
228
- &.light {
229
- background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
230
-
231
- .dashboard-header {
232
- background: var(--bg-primary);
233
- border: 1px solid var(--border-light);
234
- backdrop-filter: blur(20px);
235
- }
236
-
237
- .metric-card,
238
- .products-card,
239
- .activities-card,
240
- .performance-card,
241
- .active-users-card {
242
- background: var(--bg-primary);
243
- border: 1px solid var(--border-light);
244
- backdrop-filter: blur(20px);
245
- }
246
- }
247
-
248
- &.dark {
249
- background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
250
- color: var(--text-inverse) !important;
251
-
252
- .dashboard-header {
253
- background: rgba(30, 41, 59, 0.8);
254
- border: 1px solid rgba(51, 65, 85, 0.5);
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
- }
267
- }
268
-
269
- .metric-card,
270
- .products-card,
271
- .activities-card,
272
- .performance-card,
273
- .active-users-card {
274
- background: rgba(30, 41, 59, 0.8);
275
- border: 1px solid rgba(51, 65, 85, 0.5);
276
- color: var(--text-inverse);
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
- }
361
- }
362
- }
363
-
364
- &.gradient {
365
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
366
- background-size: 400% 400%;
367
- animation: gradientShift 15s ease infinite;
368
-
369
- &::before {
370
- content: '';
371
- position: absolute;
372
- top: 0;
373
- left: 0;
374
- right: 0;
375
- bottom: 0;
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
- );
391
- pointer-events: none;
392
- animation: gradientShift 20s ease infinite reverse;
393
- }
394
-
395
- &::after {
396
- content: '';
397
- position: absolute;
398
- top: 0;
399
- left: 0;
400
- right: 0;
401
- bottom: 0;
402
- background: linear-gradient(
403
- 45deg,
404
- transparent 30%,
405
- rgba(255, 255, 255, 0.05) 50%,
406
- transparent 70%
407
- );
408
- pointer-events: none;
409
- animation: shimmer 3s ease-in-out infinite;
410
- }
411
- }
412
-
413
- // 动画状态
414
- &.animating {
415
- .metric-card {
416
- animation: pulse var(--duration-normal) var(--ease-bounce);
417
- }
418
-
419
- .product-item,
420
- .activity-item {
421
- animation: slideIn var(--duration-normal) var(--ease-out);
422
- }
423
- }
424
- }
425
-
426
- // 头部区域 - 现代化设计
427
- .dashboard-header {
428
- display: flex;
429
- justify-content: space-between;
430
- align-items: center;
431
- padding: var(--space-xl) var(--space-2xl);
432
- margin-bottom: var(--space-2xl);
433
- background: rgba(255, 255, 255, 0.95);
434
- backdrop-filter: blur(20px);
435
- border-radius: var(--radius-xl);
436
- box-shadow: var(--shadow-xl);
437
- border: 1px solid rgba(255, 255, 255, 0.2);
438
- animation: fadeInUp 0.8s var(--ease-out);
439
- position: relative;
440
- overflow: hidden;
441
-
442
- &::before {
443
- content: '';
444
- position: absolute;
445
- top: 0;
446
- left: 0;
447
- right: 0;
448
- height: 3px;
449
- background: linear-gradient(
450
- 90deg,
451
- var(--primary-color),
452
- var(--primary-light),
453
- var(--info-color)
454
- );
455
- border-radius: var(--radius-xl) var(--radius-xl) 0 0;
456
- }
457
-
458
- .dashboard-title {
459
- margin: 0;
460
- font-size: 32px;
461
- font-weight: 800;
462
- background: linear-gradient(
463
- 135deg,
464
- var(--primary-color) 0%,
465
- var(--primary-light) 50%,
466
- var(--info-color) 100%
467
- );
468
- background-size: 200% 200%;
469
- -webkit-background-clip: text;
470
- -webkit-text-fill-color: transparent;
471
- background-clip: text;
472
- display: flex;
473
- align-items: center;
474
- gap: var(--space-md);
475
- animation: gradientShift 3s ease infinite;
476
- letter-spacing: -0.02em;
477
-
478
- .ant-tag {
479
- font-size: 14px;
480
- font-weight: 600;
481
- padding: 4px 12px;
482
- border-radius: var(--radius-full);
483
- border: none;
484
- background: linear-gradient(
485
- 135deg,
486
- var(--primary-color),
487
- var(--primary-light)
488
- );
489
- color: white;
490
- box-shadow: var(--shadow-sm);
491
- }
492
- }
493
-
494
- .user-info {
495
- display: flex;
496
- align-items: center;
497
- gap: var(--space-md);
498
- padding: var(--space-sm) var(--space-lg);
499
- background: linear-gradient(
500
- 135deg,
501
- rgba(99, 102, 241, 0.1),
502
- rgba(139, 92, 246, 0.1)
503
- );
504
- border-radius: var(--radius-full);
505
- border: 1px solid rgba(99, 102, 241, 0.2);
506
- backdrop-filter: blur(10px);
507
- transition: all var(--duration-normal) var(--ease-in-out);
508
- position: relative;
509
- overflow: hidden;
510
-
511
- &::before {
512
- content: '';
513
- position: absolute;
514
- top: 0;
515
- left: -100%;
516
- width: 100%;
517
- height: 100%;
518
- background: linear-gradient(
519
- 90deg,
520
- transparent,
521
- rgba(255, 255, 255, 0.2),
522
- transparent
523
- );
524
- transition: left 0.5s;
525
- }
526
-
527
- &:hover {
528
- transform: translateY(-2px);
529
- box-shadow: var(--shadow-lg);
530
- border-color: rgba(99, 102, 241, 0.3);
531
-
532
- &::before {
533
- left: 100%;
534
- }
535
- }
536
-
537
- .ant-avatar {
538
- border: 2px solid rgba(255, 255, 255, 0.3);
539
- box-shadow: var(--shadow-sm);
540
- }
541
-
542
- .user-name {
543
- font-weight: 600;
544
- color: var(--primary-color);
545
- font-size: 16px;
546
- }
547
- }
548
- }
549
-
550
- // 仪表板内容
551
- .dashboard-content {
552
- position: relative;
553
- z-index: 1;
554
- }
555
-
556
- // 指标卡片行 - 现代化设计
557
- .metrics-row {
558
- margin-bottom: var(--space-2xl);
559
- animation: fadeInUp 0.8s var(--ease-out) 0.2s both;
560
-
561
- .metric-card {
562
- position: relative;
563
- background: rgba(255, 255, 255, 0.95);
564
- backdrop-filter: blur(20px);
565
- border: 1px solid rgba(255, 255, 255, 0.2);
566
- border-radius: var(--radius-xl);
567
- box-shadow: var(--shadow-lg);
568
- transition: all var(--duration-normal) var(--ease-in-out);
569
- overflow: hidden;
570
- height: 100%;
571
- cursor: pointer;
572
-
573
- &::before {
574
- content: '';
575
- position: absolute;
576
- top: 0;
577
- left: 0;
578
- right: 0;
579
- height: 4px;
580
- background: linear-gradient(
581
- 90deg,
582
- var(--primary-color),
583
- var(--primary-light)
584
- );
585
- border-radius: var(--radius-xl) var(--radius-xl) 0 0;
586
- }
587
-
588
- &::after {
589
- content: '';
590
- position: absolute;
591
- top: 0;
592
- left: 0;
593
- right: 0;
594
- bottom: 0;
595
- background: linear-gradient(
596
- 135deg,
597
- rgba(99, 102, 241, 0.02),
598
- rgba(139, 92, 246, 0.02)
599
- );
600
- opacity: 0;
601
- transition: opacity var(--duration-normal) var(--ease-in-out);
602
- }
603
-
604
- &:hover {
605
- transform: translateY(-8px) scale(1.02);
606
- box-shadow: var(--shadow-2xl);
607
- border-color: rgba(99, 102, 241, 0.3);
608
-
609
- &::after {
610
- opacity: 1;
611
- }
612
-
613
- .metric-icon {
614
- transform: scale(1.1) rotate(5deg);
615
- color: var(--primary-color);
616
- }
617
-
618
- .ant-statistic-content-value {
619
- transform: scale(1.05);
620
- }
621
- }
622
-
623
- .ant-card-body {
624
- padding: var(--space-xl);
625
- position: relative;
626
- z-index: 1;
627
- }
628
-
629
- .ant-statistic-title {
630
- color: var(--text-secondary);
631
- font-size: 14px;
632
- font-weight: 600;
633
- margin-bottom: var(--space-sm);
634
- text-transform: uppercase;
635
- letter-spacing: 0.5px;
636
- }
637
-
638
- .ant-statistic-content {
639
- .ant-statistic-content-value {
640
- font-size: 36px;
641
- font-weight: 800;
642
- line-height: 1.1;
643
- background: linear-gradient(
644
- 135deg,
645
- var(--text-primary),
646
- var(--text-secondary)
647
- );
648
- -webkit-background-clip: text;
649
- -webkit-text-fill-color: transparent;
650
- background-clip: text;
651
- transition: all var(--duration-normal) var(--ease-in-out);
652
- }
653
- }
654
-
655
- .metric-icon {
656
- font-size: 28px;
657
- margin-right: var(--space-sm);
658
- opacity: 0.8;
659
- transition: all var(--duration-normal) var(--ease-bounce);
660
- color: var(--primary-color);
661
- }
662
-
663
- .metric-trend {
664
- display: flex;
665
- align-items: center;
666
- gap: var(--space-sm);
667
- margin-top: var(--space-md);
668
- padding: var(--space-sm) var(--space-md);
669
- background: rgba(16, 185, 129, 0.1);
670
- border-radius: var(--radius-md);
671
- border: 1px solid rgba(16, 185, 129, 0.2);
672
-
673
- .ant-badge {
674
- .ant-badge-count {
675
- background: linear-gradient(
676
- 135deg,
677
- var(--success-color),
678
- var(--success-light)
679
- );
680
- border: none;
681
- font-weight: 600;
682
- font-size: 12px;
683
- }
684
- }
685
-
686
- .trend-text {
687
- font-size: 12px;
688
- color: var(--text-secondary);
689
- font-weight: 500;
690
- }
691
- }
692
- }
693
-
694
- // 特定卡片样式
695
- .users-card {
696
- &::before {
697
- background: linear-gradient(
698
- 90deg,
699
- var(--primary-color),
700
- var(--primary-light)
701
- );
702
- }
703
-
704
- .metric-icon {
705
- color: var(--primary-color);
706
- }
707
- }
708
-
709
- .orders-card {
710
- &::before {
711
- background: linear-gradient(
712
- 90deg,
713
- var(--success-color),
714
- var(--success-light)
715
- );
716
- }
717
-
718
- .metric-icon {
719
- color: var(--success-color);
720
- }
721
-
722
- .metric-trend {
723
- background: rgba(16, 185, 129, 0.1);
724
- border-color: rgba(16, 185, 129, 0.2);
725
- }
726
- }
727
-
728
- .revenue-card {
729
- &::before {
730
- background: linear-gradient(
731
- 90deg,
732
- var(--warning-color),
733
- var(--warning-light)
734
- );
735
- }
736
-
737
- .metric-icon {
738
- color: var(--warning-color);
739
- }
740
-
741
- .metric-trend {
742
- background: rgba(245, 158, 11, 0.1);
743
- border-color: rgba(245, 158, 11, 0.2);
744
- }
745
- }
746
-
747
- .conversion-card {
748
- &::before {
749
- background: linear-gradient(
750
- 90deg,
751
- var(--error-color),
752
- var(--error-light)
753
- );
754
- }
755
-
756
- .metric-icon {
757
- color: var(--error-color);
758
- }
759
-
760
- .metric-trend {
761
- background: rgba(239, 68, 68, 0.1);
762
- border-color: rgba(239, 68, 68, 0.2);
763
- }
764
- }
765
- }
766
-
767
- // 内容行 - 现代化设计
768
- .content-row {
769
- margin-bottom: var(--space-2xl);
770
- animation: fadeInUp 0.8s var(--ease-out) 0.4s both;
771
-
772
- .products-card,
773
- .activities-card {
774
- background: rgba(255, 255, 255, 0.95);
775
- backdrop-filter: blur(20px);
776
- border: 1px solid rgba(255, 255, 255, 0.2);
777
- border-radius: var(--radius-xl);
778
- box-shadow: var(--shadow-lg);
779
- transition: all var(--duration-normal) var(--ease-in-out);
780
- overflow: hidden;
781
- position: relative;
782
-
783
- &::before {
784
- content: '';
785
- position: absolute;
786
- top: 0;
787
- left: 0;
788
- right: 0;
789
- height: 3px;
790
- background: linear-gradient(
791
- 90deg,
792
- var(--primary-color),
793
- var(--primary-light)
794
- );
795
- border-radius: var(--radius-xl) var(--radius-xl) 0 0;
796
- }
797
-
798
- &:hover {
799
- transform: translateY(-4px);
800
- box-shadow: var(--shadow-2xl);
801
- border-color: rgba(99, 102, 241, 0.3);
802
- }
803
-
804
- .ant-card-head {
805
- border-bottom: 1px solid rgba(0, 0, 0, 0.06);
806
- padding: var(--space-lg) var(--space-xl);
807
- background: linear-gradient(
808
- 135deg,
809
- rgba(99, 102, 241, 0.02),
810
- rgba(139, 92, 246, 0.02)
811
- );
812
-
813
- .ant-card-head-title {
814
- font-size: 20px;
815
- font-weight: 700;
816
- color: var(--text-primary);
817
- display: flex;
818
- align-items: center;
819
- gap: var(--space-sm);
820
- }
821
- }
822
-
823
- .ant-card-body {
824
- padding: var(--space-xl);
825
- }
826
-
827
- .section-icon {
828
- color: var(--primary-color);
829
- margin-right: var(--space-sm);
830
- font-size: 20px;
831
- }
832
-
833
- .ant-card-extra {
834
- .ant-btn {
835
- border: none;
836
- background: linear-gradient(
837
- 135deg,
838
- var(--primary-color),
839
- var(--primary-light)
840
- );
841
- color: white;
842
- border-radius: var(--radius-md);
843
- font-weight: 600;
844
- padding: var(--space-sm) var(--space-lg);
845
- transition: all var(--duration-normal) var(--ease-in-out);
846
-
847
- &:hover {
848
- transform: translateY(-2px);
849
- box-shadow: var(--shadow-md);
850
- }
851
- }
852
- }
853
- }
854
- }
855
-
856
- // 产品列表 - 现代化设计
857
- .products-list {
858
- .product-item {
859
- display: flex;
860
- align-items: center;
861
- padding: var(--space-lg) 0;
862
- border-bottom: 1px solid var(--border-light);
863
- transition: all var(--duration-normal) var(--ease-in-out);
864
- position: relative;
865
- border-radius: var(--radius-md);
866
- margin-bottom: var(--space-sm);
867
-
868
- &:last-child {
869
- border-bottom: none;
870
- margin-bottom: 0;
871
- }
872
-
873
- &:hover {
874
- background: linear-gradient(
875
- 135deg,
876
- rgba(99, 102, 241, 0.05),
877
- rgba(139, 92, 246, 0.05)
878
- );
879
- border-radius: var(--radius-md);
880
- padding-left: var(--space-md);
881
- padding-right: var(--space-md);
882
- transform: translateX(4px);
883
- box-shadow: var(--shadow-sm);
884
- }
885
-
886
- .product-info {
887
- flex: 1;
888
- min-width: 0;
889
-
890
- .product-name {
891
- font-size: 16px;
892
- font-weight: 700;
893
- color: var(--text-primary);
894
- margin-bottom: var(--space-xs);
895
- letter-spacing: -0.01em;
896
- }
897
-
898
- .product-sales {
899
- font-size: 14px;
900
- color: var(--text-secondary);
901
- font-weight: 500;
902
- }
903
- }
904
-
905
- .product-growth {
906
- margin: 0 var(--space-lg);
907
-
908
- .ant-tag {
909
- border: none;
910
- border-radius: var(--radius-md);
911
- font-weight: 600;
912
- font-size: 12px;
913
- padding: var(--space-xs) var(--space-sm);
914
-
915
- &.ant-tag-green {
916
- background: linear-gradient(
917
- 135deg,
918
- var(--success-color),
919
- var(--success-light)
920
- );
921
- color: white;
922
- }
923
-
924
- &.ant-tag-red {
925
- background: linear-gradient(
926
- 135deg,
927
- var(--error-color),
928
- var(--error-light)
929
- );
930
- color: white;
931
- }
932
- }
933
- }
934
-
935
- .product-progress {
936
- width: 120px;
937
-
938
- .ant-progress {
939
- .ant-progress-bg {
940
- border-radius: var(--radius-sm);
941
- }
942
-
943
- .ant-progress-outer {
944
- .ant-progress-inner {
945
- background-color: var(--bg-tertiary);
946
- border-radius: var(--radius-sm);
947
- }
948
- }
949
- }
950
- }
951
- }
952
- }
953
-
954
- // 活动列表 - 现代化设计
955
- .activities-list {
956
- .activity-item {
957
- display: flex;
958
- align-items: center;
959
- padding: var(--space-md) 0;
960
- border-bottom: 1px solid var(--border-light);
961
- transition: all var(--duration-normal) var(--ease-in-out);
962
- position: relative;
963
- border-radius: var(--radius-md);
964
- margin-bottom: var(--space-sm);
965
-
966
- &:last-child {
967
- border-bottom: none;
968
- margin-bottom: 0;
969
- }
970
-
971
- &:hover {
972
- background: linear-gradient(
973
- 135deg,
974
- rgba(99, 102, 241, 0.05),
975
- rgba(139, 92, 246, 0.05)
976
- );
977
- border-radius: var(--radius-md);
978
- padding-left: var(--space-md);
979
- padding-right: var(--space-md);
980
- transform: translateX(4px);
981
- box-shadow: var(--shadow-sm);
982
- }
983
-
984
- .ant-avatar {
985
- border: 2px solid rgba(255, 255, 255, 0.3);
986
- box-shadow: var(--shadow-sm);
987
- transition: all var(--duration-normal) var(--ease-in-out);
988
- }
989
-
990
- &:hover .ant-avatar {
991
- transform: scale(1.1);
992
- box-shadow: var(--shadow-md);
993
- }
994
-
995
- .activity-content {
996
- flex: 1;
997
- margin-left: var(--space-md);
998
- min-width: 0;
999
-
1000
- .activity-text {
1001
- .user-name {
1002
- font-weight: 700;
1003
- color: var(--primary-color);
1004
- margin-right: var(--space-sm);
1005
- font-size: 14px;
1006
- }
1007
-
1008
- .action {
1009
- color: var(--text-primary);
1010
- font-weight: 500;
1011
- font-size: 14px;
1012
- }
1013
- }
1014
-
1015
- .activity-time {
1016
- font-size: 12px;
1017
- color: var(--text-secondary);
1018
- margin-top: var(--space-xs);
1019
- font-weight: 500;
1020
- }
1021
- }
1022
-
1023
- .activity-actions {
1024
- display: flex;
1025
- gap: var(--space-xs);
1026
- opacity: 0;
1027
- transition: all var(--duration-normal) var(--ease-in-out);
1028
-
1029
- .ant-btn {
1030
- border: none;
1031
- background: transparent;
1032
- color: var(--text-secondary);
1033
- padding: var(--space-xs);
1034
- border-radius: var(--radius-sm);
1035
- transition: all var(--duration-fast) var(--ease-in-out);
1036
-
1037
- &:hover {
1038
- background: rgba(99, 102, 241, 0.1);
1039
- color: var(--primary-color);
1040
- transform: scale(1.1);
1041
- }
1042
- }
1043
- }
1044
-
1045
- &:hover .activity-actions {
1046
- opacity: 1;
1047
- }
1048
- }
1049
- }
1050
-
1051
- // 性能指标行 - 现代化设计
1052
- .performance-row {
1053
- margin-bottom: var(--space-2xl);
1054
- animation: fadeInUp 0.8s var(--ease-out) 0.6s both;
1055
-
1056
- .performance-card {
1057
- background: rgba(255, 255, 255, 0.95);
1058
- backdrop-filter: blur(20px);
1059
- border: 1px solid rgba(255, 255, 255, 0.2);
1060
- border-radius: var(--radius-xl);
1061
- box-shadow: var(--shadow-lg);
1062
- transition: all var(--duration-normal) var(--ease-in-out);
1063
- overflow: hidden;
1064
- position: relative;
1065
-
1066
- &::before {
1067
- content: '';
1068
- position: absolute;
1069
- top: 0;
1070
- left: 0;
1071
- right: 0;
1072
- height: 3px;
1073
- background: linear-gradient(
1074
- 90deg,
1075
- var(--primary-color),
1076
- var(--primary-light)
1077
- );
1078
- border-radius: var(--radius-xl) var(--radius-xl) 0 0;
1079
- }
1080
-
1081
- &:hover {
1082
- transform: translateY(-4px);
1083
- box-shadow: var(--shadow-2xl);
1084
- border-color: rgba(99, 102, 241, 0.3);
1085
- }
1086
-
1087
- .ant-card-head {
1088
- padding: var(--space-lg) var(--space-xl);
1089
- background: linear-gradient(
1090
- 135deg,
1091
- rgba(99, 102, 241, 0.02),
1092
- rgba(139, 92, 246, 0.02)
1093
- );
1094
-
1095
- .ant-card-head-title {
1096
- font-size: 20px;
1097
- font-weight: 700;
1098
- color: var(--text-primary);
1099
- display: flex;
1100
- align-items: center;
1101
- gap: var(--space-sm);
1102
- }
1103
- }
1104
-
1105
- .ant-card-body {
1106
- padding: var(--space-xl);
1107
- }
1108
-
1109
- .performance-item {
1110
- .performance-header {
1111
- display: flex;
1112
- justify-content: space-between;
1113
- align-items: center;
1114
- margin-bottom: var(--space-md);
1115
-
1116
- .metric-name {
1117
- font-size: 14px;
1118
- font-weight: 600;
1119
- color: var(--text-primary);
1120
- text-transform: uppercase;
1121
- letter-spacing: 0.5px;
1122
- }
1123
-
1124
- .metric-value {
1125
- font-size: 20px;
1126
- font-weight: 800;
1127
- color: var(--primary-color);
1128
- background: linear-gradient(
1129
- 135deg,
1130
- var(--primary-color),
1131
- var(--primary-light)
1132
- );
1133
- -webkit-background-clip: text;
1134
- -webkit-text-fill-color: transparent;
1135
- background-clip: text;
1136
- }
1137
- }
1138
-
1139
- .ant-progress {
1140
- .ant-progress-bg {
1141
- border-radius: var(--radius-sm);
1142
- }
1143
-
1144
- .ant-progress-outer {
1145
- .ant-progress-inner {
1146
- background-color: var(--bg-tertiary);
1147
- border-radius: var(--radius-sm);
1148
- }
1149
- }
1150
- }
1151
-
1152
- .performance-target {
1153
- font-size: 12px;
1154
- color: var(--text-secondary);
1155
- margin-top: var(--space-sm);
1156
- text-align: right;
1157
- font-weight: 500;
1158
- }
1159
- }
1160
- }
1161
- }
1162
-
1163
- // 活跃用户行 - 现代化设计
1164
- .active-users-row {
1165
- animation: fadeInUp 0.8s var(--ease-out) 0.8s both;
1166
-
1167
- .active-users-card {
1168
- background: rgba(255, 255, 255, 0.95);
1169
- backdrop-filter: blur(20px);
1170
- border: 1px solid rgba(255, 255, 255, 0.2);
1171
- border-radius: var(--radius-xl);
1172
- box-shadow: var(--shadow-lg);
1173
- transition: all var(--duration-normal) var(--ease-in-out);
1174
- overflow: hidden;
1175
- position: relative;
1176
-
1177
- &::before {
1178
- content: '';
1179
- position: absolute;
1180
- top: 0;
1181
- left: 0;
1182
- right: 0;
1183
- height: 3px;
1184
- background: linear-gradient(
1185
- 90deg,
1186
- var(--primary-color),
1187
- var(--primary-light)
1188
- );
1189
- border-radius: var(--radius-xl) var(--radius-xl) 0 0;
1190
- }
1191
-
1192
- &:hover {
1193
- transform: translateY(-4px);
1194
- box-shadow: var(--shadow-2xl);
1195
- border-color: rgba(99, 102, 241, 0.3);
1196
- }
1197
-
1198
- .ant-card-head {
1199
- padding: var(--space-lg) var(--space-xl);
1200
- background: linear-gradient(
1201
- 135deg,
1202
- rgba(99, 102, 241, 0.02),
1203
- rgba(139, 92, 246, 0.02)
1204
- );
1205
-
1206
- .ant-card-head-title {
1207
- font-size: 20px;
1208
- font-weight: 700;
1209
- color: var(--text-primary);
1210
- display: flex;
1211
- align-items: center;
1212
- gap: var(--space-sm);
1213
- }
1214
- }
1215
-
1216
- /*
1217
- .ant-card-body {
1218
- padding: var(--space-2xl);
1219
- }
1220
- */
1221
-
1222
- .active-users-content {
1223
- display: flex;
1224
- align-items: center;
1225
- justify-content: space-between;
1226
- gap: var(--space-2xl);
1227
-
1228
- .active-users-main {
1229
- flex: 1;
1230
-
1231
- .active-users-number {
1232
- display: flex;
1233
- align-items: baseline;
1234
- gap: var(--space-sm);
1235
- margin-bottom: var(--space-md);
1236
-
1237
- .number {
1238
- font-size: 56px;
1239
- font-weight: 900;
1240
- background: linear-gradient(
1241
- 135deg,
1242
- var(--primary-color) 0%,
1243
- var(--primary-light) 50%,
1244
- var(--info-color) 100%
1245
- );
1246
- background-size: 200% 200%;
1247
- -webkit-background-clip: text;
1248
- -webkit-text-fill-color: transparent;
1249
- background-clip: text;
1250
- line-height: 1;
1251
- animation: gradientShift 3s ease infinite;
1252
- letter-spacing: -0.02em;
1253
- }
1254
-
1255
- .unit {
1256
- font-size: 20px;
1257
- color: var(--text-secondary);
1258
- font-weight: 600;
1259
- text-transform: uppercase;
1260
- letter-spacing: 0.5px;
1261
- }
1262
- }
1263
-
1264
- .active-users-description {
1265
- font-size: 16px;
1266
- color: var(--text-secondary);
1267
- font-weight: 500;
1268
- line-height: 1.5;
1269
- }
1270
- }
1271
-
1272
- .active-users-visual {
1273
- position: relative;
1274
- width: 80px;
1275
- height: 80px;
1276
- flex-shrink: 0;
1277
-
1278
- .user-avatars {
1279
- position: relative;
1280
- width: 100%;
1281
- height: 100%;
1282
-
1283
- .user-avatar {
1284
- position: absolute;
1285
- top: 50%;
1286
- left: 50%;
1287
- margin-left: -20px;
1288
- margin-top: -20px;
1289
- animation: float 4s ease-in-out infinite;
1290
- border: 3px solid rgba(255, 255, 255, 0.8);
1291
- box-shadow: var(--shadow-lg);
1292
- transition: all var(--duration-normal) var(--ease-bounce);
1293
- cursor: pointer;
1294
-
1295
- &:hover {
1296
- transform: scale(1.3) rotate(10deg);
1297
- z-index: 10;
1298
- box-shadow: var(--shadow-2xl);
1299
- animation-play-state: paused;
1300
- }
1301
- }
1302
- }
1303
- }
1304
- }
1305
- }
1306
- }
1307
-
1308
- // 响应式设计 - 现代化移动端适配
1309
- @media (max-width: 1200px) {
1310
- .data-dashboard-container {
1311
- padding: var(--space-md);
1312
- }
1313
-
1314
- .dashboard-header {
1315
- padding: var(--space-lg) var(--space-xl);
1316
-
1317
- .dashboard-title {
1318
- font-size: 28px;
1319
- }
1320
- }
1321
-
1322
- .active-users-content {
1323
- gap: var(--space-lg);
1324
-
1325
- .active-users-visual {
1326
- width: 200px;
1327
- height: 200px;
1328
- }
1329
- }
1330
- }
1331
-
1332
- @media (max-width: 768px) {
1333
- .data-dashboard-container {
1334
- padding: var(--space-sm);
1335
- }
1336
-
1337
- .dashboard-header {
1338
- flex-direction: column;
1339
- gap: var(--space-lg);
1340
- text-align: center;
1341
- padding: var(--space-lg);
1342
- border-radius: var(--radius-lg);
1343
-
1344
- .dashboard-title {
1345
- font-size: 24px;
1346
- flex-direction: column;
1347
- gap: var(--space-sm);
1348
- }
1349
-
1350
- .user-info {
1351
- align-self: center;
1352
- }
1353
- }
1354
-
1355
- .metrics-row {
1356
- .metric-card {
1357
- .ant-card-body {
1358
- padding: var(--space-lg);
1359
- }
1360
-
1361
- .ant-statistic-content {
1362
- .ant-statistic-content-value {
1363
- font-size: 28px;
1364
- }
1365
- }
1366
-
1367
- .metric-icon {
1368
- font-size: 24px;
1369
- }
1370
- }
1371
- }
1372
-
1373
- .content-row {
1374
- .products-card,
1375
- .activities-card {
1376
- .ant-card-body {
1377
- padding: var(--space-lg);
1378
- }
1379
- }
1380
- }
1381
-
1382
- .active-users-content {
1383
- flex-direction: column;
1384
- gap: var(--space-xl);
1385
- text-align: center;
1386
-
1387
- .active-users-visual {
1388
- width: 180px;
1389
- height: 180px;
1390
- align-self: center;
1391
- }
1392
-
1393
- .active-users-number {
1394
- justify-content: center;
1395
-
1396
- .number {
1397
- font-size: 48px;
1398
- }
1399
- }
1400
- }
1401
-
1402
- .performance-row {
1403
- .performance-card {
1404
- .ant-card-body {
1405
- padding: var(--space-lg);
1406
- }
1407
- }
1408
- }
1409
- }
1410
-
1411
- @media (max-width: 480px) {
1412
- .data-dashboard-container {
1413
- padding: var(--space-xs);
1414
- }
1415
-
1416
- .dashboard-header {
1417
- padding: var(--space-md);
1418
-
1419
- .dashboard-title {
1420
- font-size: 20px;
1421
- }
1422
- }
1423
-
1424
- .metrics-row {
1425
- .metric-card {
1426
- .ant-card-body {
1427
- padding: var(--space-md);
1428
- }
1429
-
1430
- .ant-statistic-content {
1431
- .ant-statistic-content-value {
1432
- font-size: 24px;
1433
- }
1434
- }
1435
- }
1436
- }
1437
-
1438
- .active-users-content {
1439
- .active-users-visual {
1440
- width: 150px;
1441
- height: 150px;
1442
- }
1443
-
1444
- .active-users-number {
1445
- .number {
1446
- font-size: 40px;
1447
- }
1448
-
1449
- .unit {
1450
- font-size: 16px;
1451
- }
1452
- }
1453
- }
1454
- }
1455
-
1456
- // 加载动画 - 现代化设计
1457
- .ant-spin-container {
1458
- .ant-spin {
1459
- .ant-spin-dot {
1460
- .ant-spin-dot-item {
1461
- background: linear-gradient(
1462
- 135deg,
1463
- var(--primary-color),
1464
- var(--primary-light)
1465
- );
1466
- border-radius: var(--radius-sm);
1467
- }
1468
- }
1469
-
1470
- .ant-spin-text {
1471
- color: var(--text-primary);
1472
- font-weight: 600;
1473
- }
1474
- }
1475
- }
1476
-
1477
- // 滚动条样式 - 现代化设计
1478
- ::-webkit-scrollbar {
1479
- width: 8px;
1480
- height: 8px;
1481
- }
1482
-
1483
- ::-webkit-scrollbar-track {
1484
- background: var(--bg-tertiary);
1485
- border-radius: var(--radius-sm);
1486
- }
1487
-
1488
- ::-webkit-scrollbar-thumb {
1489
- background: linear-gradient(
1490
- 135deg,
1491
- var(--primary-color),
1492
- var(--primary-light)
1493
- );
1494
- border-radius: var(--radius-sm);
1495
- transition: all var(--duration-normal) var(--ease-in-out);
1496
- }
1497
-
1498
- ::-webkit-scrollbar-thumb:hover {
1499
- background: linear-gradient(135deg, var(--primary-light), var(--info-color));
1500
- transform: scale(1.1);
1501
- }
1502
-
1503
- // 额外的交互元素和微动画
1504
- .data-dashboard-container {
1505
- // 添加全局悬停效果
1506
- .metric-card,
1507
- .products-card,
1508
- .activities-card,
1509
- .performance-card,
1510
- .active-users-card {
1511
- &:hover {
1512
- .section-icon {
1513
- animation: bounce 0.6s var(--ease-bounce);
1514
- }
1515
- }
1516
- }
1517
-
1518
- // 添加数据更新时的闪烁效果
1519
- &.animating {
1520
- .metric-card {
1521
- .ant-statistic-content-value {
1522
- animation: pulse 0.8s var(--ease-bounce);
1523
- }
1524
- }
1525
- }
1526
-
1527
- // 添加页面加载时的入场动画
1528
- .dashboard-content {
1529
- > * {
1530
- animation: fadeInUp 0.8s var(--ease-out) both;
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
- }
1544
- }
1545
- }
1546
- }
1547
-
1548
- // 添加按钮悬停效果
1549
- .ant-btn {
1550
- position: relative;
1551
- overflow: hidden;
1552
-
1553
- &::before {
1554
- content: '';
1555
- position: absolute;
1556
- top: 0;
1557
- left: -100%;
1558
- width: 100%;
1559
- height: 100%;
1560
- background: linear-gradient(
1561
- 90deg,
1562
- transparent,
1563
- rgba(255, 255, 255, 0.2),
1564
- transparent
1565
- );
1566
- transition: left 0.5s;
1567
- }
1568
-
1569
- &:hover::before {
1570
- left: 100%;
1571
- }
1572
- }
1573
-
1574
- // 添加标签悬停效果
1575
- .ant-tag {
1576
- transition: all var(--duration-normal) var(--ease-in-out);
1577
-
1578
- &:hover {
1579
- transform: translateY(-2px) scale(1.05);
1580
- box-shadow: var(--shadow-md);
1581
- }
1582
- }
1583
-
1584
- // 添加进度条动画
1585
- .ant-progress {
1586
- .ant-progress-bg {
1587
- transition: all var(--duration-slow) var(--ease-out);
1588
- }
1589
- }
1590
-
1591
- // 添加头像悬停效果
1592
- .ant-avatar {
1593
- transition: all var(--duration-normal) var(--ease-bounce);
1594
-
1595
- &:hover {
1596
- transform: scale(1.1) rotate(5deg);
1597
- box-shadow: var(--shadow-lg);
1598
- }
1599
- }
1600
-
1601
- // 添加卡片内容悬停效果
1602
- .ant-card {
1603
- .ant-card-body {
1604
- position: relative;
1605
-
1606
- &::before {
1607
- content: '';
1608
- position: absolute;
1609
- top: 0;
1610
- left: 0;
1611
- right: 0;
1612
- bottom: 0;
1613
- background: linear-gradient(
1614
- 135deg,
1615
- rgba(99, 102, 241, 0.02),
1616
- rgba(139, 92, 246, 0.02)
1617
- );
1618
- opacity: 0;
1619
- transition: opacity var(--duration-normal) var(--ease-in-out);
1620
- pointer-events: none;
1621
- }
1622
- }
1623
-
1624
- &:hover .ant-card-body::before {
1625
- opacity: 1;
1626
- }
1627
- }
1628
-
1629
- // 添加数字计数动画
1630
- @keyframes countUp {
1631
- from {
1632
- opacity: 0;
1633
- transform: translateY(20px);
1634
- }
1635
- to {
1636
- opacity: 1;
1637
- transform: translateY(0);
1638
- }
1639
- }
1640
-
1641
- .ant-statistic-content-value {
1642
- animation: countUp 0.8s var(--ease-out);
1643
- }
1644
-
1645
- // 添加渐变文字动画
1646
- @keyframes textShine {
1647
- 0% {
1648
- background-position: 0% 50%;
1649
- }
1650
- 100% {
1651
- background-position: 100% 50%;
1652
- }
1653
- }
1654
-
1655
- .gradient-text {
1656
- background: linear-gradient(
1657
- 135deg,
1658
- var(--primary-color),
1659
- var(--primary-light),
1660
- var(--info-color)
1661
- );
1662
- background-size: 200% 200%;
1663
- -webkit-background-clip: text;
1664
- -webkit-text-fill-color: transparent;
1665
- background-clip: text;
1666
- animation: textShine 3s ease infinite;
1667
- }