neo-cmp-cli 1.8.3 → 1.8.6

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 (189) hide show
  1. package/package.json +3 -3
  2. package/src/utils/cmpUtils/createCmpByTemplate.js +1 -1
  3. package/src/utils/projectUtils/createCmpProjectByTemplate.js +1 -1
  4. package/template/antd-custom-cmp-template/.prettierrc.js +12 -0
  5. package/template/antd-custom-cmp-template/README.md +153 -0
  6. package/template/antd-custom-cmp-template/commitlint.config.js +59 -0
  7. package/template/antd-custom-cmp-template/neo.config.js +144 -0
  8. package/template/antd-custom-cmp-template/package.json +60 -0
  9. package/template/antd-custom-cmp-template/public/css/base.css +283 -0
  10. package/template/antd-custom-cmp-template/public/scripts/app/bluebird.js +6679 -0
  11. package/template/antd-custom-cmp-template/public/template.html +13 -0
  12. package/template/antd-custom-cmp-template/src/assets/css/common.scss +127 -0
  13. package/template/antd-custom-cmp-template/src/assets/css/mixin.scss +47 -0
  14. package/template/antd-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  15. package/template/antd-custom-cmp-template/src/assets/img/custom-widget.svg +1 -0
  16. package/template/antd-custom-cmp-template/src/assets/img/favicon.png +0 -0
  17. package/template/antd-custom-cmp-template/src/components/dataDashboard/README.md +39 -0
  18. package/template/antd-custom-cmp-template/src/components/dataDashboard/index.tsx +462 -0
  19. package/template/antd-custom-cmp-template/src/components/dataDashboard/model.ts +75 -0
  20. package/template/antd-custom-cmp-template/src/components/dataDashboard/style.scss +1667 -0
  21. package/template/antd-custom-cmp-template/src/components/infoCard/index.tsx +87 -0
  22. package/template/antd-custom-cmp-template/src/components/infoCard/model.ts +80 -0
  23. package/template/antd-custom-cmp-template/src/components/infoCard/style.scss +105 -0
  24. package/template/antd-custom-cmp-template/tsconfig.json +68 -0
  25. package/template/develop/neo-custom-cmp-template/.prettierrc.js +12 -0
  26. package/template/develop/neo-custom-cmp-template/README.md +48 -0
  27. package/template/develop/neo-custom-cmp-template/commitlint.config.js +59 -0
  28. package/template/develop/neo-custom-cmp-template/docs/README.md +13 -0
  29. package/template/develop/neo-custom-cmp-template/neo.config.js +121 -0
  30. package/template/develop/neo-custom-cmp-template/package.json +63 -0
  31. package/template/develop/neo-custom-cmp-template/public/css/base.css +283 -0
  32. package/template/develop/neo-custom-cmp-template/public/scripts/app/bluebird.js +6679 -0
  33. package/template/develop/neo-custom-cmp-template/public/template.html +13 -0
  34. package/template/develop/neo-custom-cmp-template/src/assets/css/common.scss +127 -0
  35. package/template/develop/neo-custom-cmp-template/src/assets/css/mixin.scss +47 -0
  36. package/template/develop/neo-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  37. package/template/develop/neo-custom-cmp-template/src/assets/img/custom-widget.svg +1 -0
  38. package/template/develop/neo-custom-cmp-template/src/assets/img/favicon.png +0 -0
  39. package/template/develop/neo-custom-cmp-template/src/assets/img/table.svg +1 -0
  40. package/template/develop/neo-custom-cmp-template/src/components/contactCardList/README.md +65 -0
  41. package/template/develop/neo-custom-cmp-template/src/components/contactCardList/index.tsx +180 -0
  42. package/template/develop/neo-custom-cmp-template/src/components/contactCardList/model.ts +50 -0
  43. package/template/develop/neo-custom-cmp-template/src/components/contactCardList/style.scss +260 -0
  44. package/template/develop/neo-custom-cmp-template/src/components/contactForm/README.md +94 -0
  45. package/template/develop/neo-custom-cmp-template/src/components/contactForm/index.tsx +251 -0
  46. package/template/develop/neo-custom-cmp-template/src/components/contactForm/model.ts +56 -0
  47. package/template/develop/neo-custom-cmp-template/src/components/contactForm/style.scss +120 -0
  48. package/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/README.md +115 -0
  49. package/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/index.tsx +304 -0
  50. package/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/model.ts +87 -0
  51. package/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/style.scss +127 -0
  52. package/template/develop/neo-custom-cmp-template/src/utils/axiosFetcher.ts +29 -0
  53. package/template/develop/neo-custom-cmp-template/src/utils/queryObjectData.ts +39 -0
  54. package/template/develop/neo-custom-cmp-template/src/utils/xobjects.ts +203 -0
  55. package/template/develop/neo-custom-cmp-template/tsconfig.json +68 -0
  56. package/template/echarts-custom-cmp-template/.prettierrc.js +12 -0
  57. package/template/echarts-custom-cmp-template/README.md +198 -0
  58. package/template/echarts-custom-cmp-template/commitlint.config.js +59 -0
  59. package/template/echarts-custom-cmp-template/neo.config.js +140 -0
  60. package/template/echarts-custom-cmp-template/package.json +61 -0
  61. package/template/echarts-custom-cmp-template/public/css/base.css +283 -0
  62. package/template/echarts-custom-cmp-template/public/scripts/app/bluebird.js +6679 -0
  63. package/template/echarts-custom-cmp-template/public/template.html +13 -0
  64. package/template/echarts-custom-cmp-template/src/assets/css/common.scss +127 -0
  65. package/template/echarts-custom-cmp-template/src/assets/css/mixin.scss +47 -0
  66. package/template/echarts-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  67. package/template/echarts-custom-cmp-template/src/assets/img/chart.svg +1 -0
  68. package/template/echarts-custom-cmp-template/src/assets/img/custom-widget.svg +1 -0
  69. package/template/echarts-custom-cmp-template/src/assets/img/favicon.png +0 -0
  70. package/template/echarts-custom-cmp-template/src/components/chartWidget/README.md +186 -0
  71. package/template/echarts-custom-cmp-template/src/components/chartWidget/index.tsx +724 -0
  72. package/template/echarts-custom-cmp-template/src/components/chartWidget/model.ts +151 -0
  73. package/template/echarts-custom-cmp-template/src/components/chartWidget/style.scss +209 -0
  74. package/template/echarts-custom-cmp-template/src/components/mapWidget/README.md +125 -0
  75. package/template/echarts-custom-cmp-template/src/components/mapWidget/USAGE.md +190 -0
  76. package/template/echarts-custom-cmp-template/src/components/mapWidget/index.tsx +385 -0
  77. package/template/echarts-custom-cmp-template/src/components/mapWidget/model.ts +107 -0
  78. package/template/echarts-custom-cmp-template/src/components/mapWidget/style.scss +192 -0
  79. package/template/echarts-custom-cmp-template/src/utils/url.ts +82 -0
  80. package/template/echarts-custom-cmp-template/tsconfig.json +68 -0
  81. package/template/empty-cmp/index.tsx +58 -0
  82. package/template/empty-cmp/model.ts +79 -0
  83. package/template/empty-cmp/style.scss +72 -0
  84. package/template/empty-custom-cmp-template/.prettierrc.js +12 -0
  85. package/template/empty-custom-cmp-template/README.md +154 -0
  86. package/template/empty-custom-cmp-template/commitlint.config.js +59 -0
  87. package/template/empty-custom-cmp-template/neo.config.js +138 -0
  88. package/template/empty-custom-cmp-template/package.json +58 -0
  89. package/template/empty-custom-cmp-template/public/css/base.css +283 -0
  90. package/template/empty-custom-cmp-template/public/scripts/app/bluebird.js +6679 -0
  91. package/template/empty-custom-cmp-template/public/template.html +13 -0
  92. package/template/empty-custom-cmp-template/src/assets/css/common.scss +127 -0
  93. package/template/empty-custom-cmp-template/src/assets/css/mixin.scss +47 -0
  94. package/template/empty-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  95. package/template/empty-custom-cmp-template/src/assets/img/custom-widget.svg +1 -0
  96. package/template/empty-custom-cmp-template/src/assets/img/favicon.png +0 -0
  97. package/template/empty-custom-cmp-template/src/assets/img/map.svg +1 -0
  98. package/template/empty-custom-cmp-template/src/components/README.md +3 -0
  99. package/template/empty-custom-cmp-template/tsconfig.json +68 -0
  100. package/template/neo-custom-cmp-template/.prettierrc.js +12 -0
  101. package/template/neo-custom-cmp-template/README.md +155 -0
  102. package/template/neo-custom-cmp-template/commitlint.config.js +59 -0
  103. package/template/neo-custom-cmp-template/docs/README.md +244 -0
  104. package/template/neo-custom-cmp-template/neo.config.js +140 -0
  105. package/template/neo-custom-cmp-template/package.json +66 -0
  106. package/template/neo-custom-cmp-template/public/css/base.css +283 -0
  107. package/template/neo-custom-cmp-template/public/scripts/app/bluebird.js +6679 -0
  108. package/template/neo-custom-cmp-template/public/template.html +13 -0
  109. package/template/neo-custom-cmp-template/src/assets/css/common.scss +127 -0
  110. package/template/neo-custom-cmp-template/src/assets/css/mixin.scss +47 -0
  111. package/template/neo-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  112. package/template/neo-custom-cmp-template/src/assets/img/card-list.svg +1 -0
  113. package/template/neo-custom-cmp-template/src/assets/img/contact-form.svg +1 -0
  114. package/template/neo-custom-cmp-template/src/assets/img/custom-form.svg +1 -0
  115. package/template/neo-custom-cmp-template/src/assets/img/custom-widget.svg +1 -0
  116. package/template/neo-custom-cmp-template/src/assets/img/data-list.svg +1 -0
  117. package/template/neo-custom-cmp-template/src/assets/img/detail.svg +1 -0
  118. package/template/neo-custom-cmp-template/src/assets/img/table.svg +1 -0
  119. package/template/neo-custom-cmp-template/src/components/entityCardList/README.md +61 -0
  120. package/template/neo-custom-cmp-template/src/components/entityCardList/index.tsx +202 -0
  121. package/template/neo-custom-cmp-template/src/components/entityCardList/model.ts +74 -0
  122. package/template/neo-custom-cmp-template/src/components/entityCardList/style.scss +260 -0
  123. package/template/neo-custom-cmp-template/src/components/entityDetail/README.md +176 -0
  124. package/template/neo-custom-cmp-template/src/components/entityDetail/index.tsx +334 -0
  125. package/template/neo-custom-cmp-template/src/components/entityDetail/model.ts +123 -0
  126. package/template/neo-custom-cmp-template/src/components/entityDetail/style.scss +292 -0
  127. package/template/neo-custom-cmp-template/src/components/entityForm/README.md +176 -0
  128. package/template/neo-custom-cmp-template/src/components/entityForm/index.tsx +615 -0
  129. package/template/neo-custom-cmp-template/src/components/entityForm/model.ts +107 -0
  130. package/template/neo-custom-cmp-template/src/components/entityForm/style.scss +370 -0
  131. package/template/neo-custom-cmp-template/src/components/entityTable/README.md +92 -0
  132. package/template/neo-custom-cmp-template/src/components/entityTable/index.tsx +784 -0
  133. package/template/neo-custom-cmp-template/src/components/entityTable/model.ts +134 -0
  134. package/template/neo-custom-cmp-template/src/components/entityTable/style.scss +304 -0
  135. package/template/neo-custom-cmp-template/src/utils/axiosFetcher.ts +37 -0
  136. package/template/neo-custom-cmp-template/src/utils/queryObjectData.ts +76 -0
  137. package/template/neo-custom-cmp-template/src/utils/xobjects.ts +162 -0
  138. package/template/neo-custom-cmp-template/tsconfig.json +49 -0
  139. package/template/react-custom-cmp-template/.prettierrc.js +12 -0
  140. package/template/react-custom-cmp-template/README.md +154 -0
  141. package/template/react-custom-cmp-template/commitlint.config.js +59 -0
  142. package/template/react-custom-cmp-template/neo.config.js +137 -0
  143. package/template/react-custom-cmp-template/package.json +57 -0
  144. package/template/react-custom-cmp-template/public/css/base.css +283 -0
  145. package/template/react-custom-cmp-template/public/scripts/app/bluebird.js +6679 -0
  146. package/template/react-custom-cmp-template/public/template.html +13 -0
  147. package/template/react-custom-cmp-template/src/assets/css/common.scss +127 -0
  148. package/template/react-custom-cmp-template/src/assets/css/mixin.scss +47 -0
  149. package/template/react-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  150. package/template/react-custom-cmp-template/src/assets/img/custom-widget.svg +1 -0
  151. package/template/react-custom-cmp-template/src/assets/img/favicon.png +0 -0
  152. package/template/react-custom-cmp-template/src/components/infoCard/index.jsx +45 -0
  153. package/template/react-custom-cmp-template/src/components/infoCard/model.js +81 -0
  154. package/template/react-custom-cmp-template/src/components/infoCard/style.scss +67 -0
  155. package/template/react-ts-custom-cmp-template/.prettierrc.js +12 -0
  156. package/template/react-ts-custom-cmp-template/README.md +154 -0
  157. package/template/react-ts-custom-cmp-template/commitlint.config.js +59 -0
  158. package/template/react-ts-custom-cmp-template/neo.config.js +138 -0
  159. package/template/react-ts-custom-cmp-template/package.json +59 -0
  160. package/template/react-ts-custom-cmp-template/public/css/base.css +283 -0
  161. package/template/react-ts-custom-cmp-template/public/scripts/app/bluebird.js +6679 -0
  162. package/template/react-ts-custom-cmp-template/public/template.html +13 -0
  163. package/template/react-ts-custom-cmp-template/src/assets/css/common.scss +127 -0
  164. package/template/react-ts-custom-cmp-template/src/assets/css/mixin.scss +47 -0
  165. package/template/react-ts-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  166. package/template/react-ts-custom-cmp-template/src/assets/img/custom-widget.svg +1 -0
  167. package/template/react-ts-custom-cmp-template/src/assets/img/favicon.png +0 -0
  168. package/template/react-ts-custom-cmp-template/src/assets/img/map.svg +1 -0
  169. package/template/react-ts-custom-cmp-template/src/components/listWidget/README.md +2 -0
  170. package/template/react-ts-custom-cmp-template/src/components/listWidget/index.tsx +208 -0
  171. package/template/react-ts-custom-cmp-template/src/components/listWidget/model.ts +92 -0
  172. package/template/react-ts-custom-cmp-template/src/components/listWidget/style.scss +350 -0
  173. package/template/react-ts-custom-cmp-template/tsconfig.json +68 -0
  174. package/template/vue2-custom-cmp-template/.prettierrc.js +12 -0
  175. package/template/vue2-custom-cmp-template/README.md +154 -0
  176. package/template/vue2-custom-cmp-template/commitlint.config.js +59 -0
  177. package/template/vue2-custom-cmp-template/neo.config.js +146 -0
  178. package/template/vue2-custom-cmp-template/package.json +59 -0
  179. package/template/vue2-custom-cmp-template/public/css/base.css +283 -0
  180. package/template/vue2-custom-cmp-template/public/scripts/app/bluebird.js +6679 -0
  181. package/template/vue2-custom-cmp-template/public/template.html +13 -0
  182. package/template/vue2-custom-cmp-template/src/assets/css/common.scss +126 -0
  183. package/template/vue2-custom-cmp-template/src/assets/css/mixin.scss +47 -0
  184. package/template/vue2-custom-cmp-template/src/assets/img/NeoCRM.jpg +0 -0
  185. package/template/vue2-custom-cmp-template/src/assets/img/custom-widget.svg +1 -0
  186. package/template/vue2-custom-cmp-template/src/assets/img/favicon.png +0 -0
  187. package/template/vue2-custom-cmp-template/src/components/vueInfoCard/index.vue +131 -0
  188. package/template/vue2-custom-cmp-template/src/components/vueInfoCard/model.js +81 -0
  189. package/test/deprecate-versions.js +1 -1
@@ -0,0 +1,1667 @@
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
+ }