wui-components-v2 1.1.69 → 1.1.71

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 (117) hide show
  1. package/api/core/index.ts +74 -74
  2. package/api/feishu.ts +20 -20
  3. package/api/index.ts +4 -4
  4. package/api/login.ts +51 -51
  5. package/api/menu.ts +45 -45
  6. package/api/page.ts +114 -114
  7. package/api/sys.ts +12 -12
  8. package/api/tree.ts +28 -28
  9. package/components/action-popup/action-popup.vue +116 -116
  10. package/components/add-address-list/add-address-list.vue +187 -187
  11. package/components/add-address-page/add-address-page.vue +77 -77
  12. package/components/add-address-page/config.ts +297 -297
  13. package/components/audio-play/audio-play.vue +220 -220
  14. package/components/batch-upload-file/batch-upload-file.vue +75 -75
  15. package/components/card-botom-buttons/card-botom-buttons.vue +279 -279
  16. package/components/custom-date-picker/custom-date-picker.vue +106 -106
  17. package/components/custom-select-picker/custom-select-picker.vue +95 -95
  18. package/components/demo-block/demo-block.vue +63 -63
  19. package/components/demo-card/demo-card.vue +44 -44
  20. package/components/detail-popup/detail-popup.vue +99 -99
  21. package/components/evaluation-page/evaluation-page.vue +196 -196
  22. package/components/fold-card/fold-card.vue +171 -171
  23. package/components/form-control/form-control.vue +661 -661
  24. package/components/global-loading/GlobalLoading.md +366 -366
  25. package/components/global-loading/global-loading.vue +55 -55
  26. package/components/global-message/GlobalMessage.md +570 -570
  27. package/components/global-message/global-message.vue +68 -68
  28. package/components/global-toast/GlobalToast.md +261 -261
  29. package/components/global-toast/global-toast.vue +56 -56
  30. package/components/label-value/label-value.vue +144 -144
  31. package/components/label-value/open-value-more.vue +56 -56
  32. package/components/list-top-buttons/list-top-buttons.vue +19 -19
  33. package/components/loading/loading.vue +5 -5
  34. package/components/login-form/login-form.vue +126 -126
  35. package/components/login-form-box/login-form-box.vue +65 -65
  36. package/components/mulselect-picker/mulselect-picker.vue +86 -86
  37. package/components/phone-login-form/phone-login-form.vue +204 -204
  38. package/components/privacy-popup/privacy-popup.vue +191 -191
  39. package/components/product-card/product-card.vue +201 -201
  40. package/components/scan-input/scan-input.vue +406 -406
  41. package/components/search/search.vue +128 -128
  42. package/components/select-col-picker/select-col-picker.vue +168 -168
  43. package/components/tab-search/tab-search.vue +73 -73
  44. package/components/tree-select/components/TreeNode.vue +200 -200
  45. package/components/tree-select/components/index.vue +471 -471
  46. package/components/tree-select/components/tree-select.vue +56 -56
  47. package/components/tree-select/index.vue +93 -93
  48. package/components/user-choose/user-choose.vue +169 -151
  49. package/components/video-play/video-play.vue +56 -56
  50. package/components/wui-auto-update-component/wui-auto-update-component.vue +132 -132
  51. package/components/wui-default/wui-default.vue +49 -49
  52. package/components/wui-details-page/wui-details-page.vue +147 -147
  53. package/components/wui-edit-page/wui-edit-page-copy.vue +757 -757
  54. package/components/wui-edit-page/wui-edit-page.vue +793 -793
  55. package/components/wui-enume-select-control/wui-enume-select-control.vue +92 -92
  56. package/components/wui-list/wui-list.vue +235 -235
  57. package/components/wui-login/wui-login.vue +43 -43
  58. package/components/wui-login1/wui-login.vue +41 -41
  59. package/components/wui-menus/wui-menus-top.vue +137 -137
  60. package/components/wui-menus/wui-menus-top1.vue +8 -8
  61. package/components/wui-menus/wui-menus.vue +247 -247
  62. package/components/wui-menus1/components/banner-carousel.vue +320 -320
  63. package/components/wui-menus1/components/navbar.vue +43 -43
  64. package/components/wui-menus1/components/quick-panel.vue +55 -55
  65. package/components/wui-menus1/components/search-bar.vue +49 -49
  66. package/components/wui-menus1/components/section-menus.vue +208 -208
  67. package/components/wui-menus1/wui-menus-top.vue +718 -718
  68. package/components/wui-menus1/wui-menus-top1.vue +398 -398
  69. package/components/wui-menus1/wui-menus.vue +564 -564
  70. package/components/wui-notify-info/notify-handle.vue +53 -53
  71. package/components/wui-notify-info/wui-notify-info.vue +280 -280
  72. package/components/wui-scan-binding-sensor/wui-scan-binding-sensor.vue +75 -75
  73. package/components/wui-search-history-babbar/components/SearchBar.vue +70 -70
  74. package/components/wui-search-history-babbar/wui-search-history-babbar.vue +204 -204
  75. package/components/wui-select-list/wui-select-list.vue +310 -310
  76. package/components/wui-select-popup/wui-select-popup.vue +613 -612
  77. package/components/wui-system-settings/wui-system-settings.vue +144 -144
  78. package/components/wui-tabbar/wui-tabbar.vue +106 -106
  79. package/components/wui-tree-page/components/tree-item.vue +238 -238
  80. package/components/wui-tree-page/wui-tree-page.vue +297 -297
  81. package/components/wui-update-component/wui-update-component.vue +221 -221
  82. package/components/wui-user/wui-user.vue +202 -202
  83. package/composables/types/theme.ts +65 -65
  84. package/composables/types/user.ts +5 -5
  85. package/composables/useColorGenerator.ts +221 -221
  86. package/composables/useCompanyFieldFilter.ts +91 -91
  87. package/composables/useEnumes.ts +43 -43
  88. package/composables/useEventBus.ts +37 -37
  89. package/composables/useGlobalLoading.ts +47 -47
  90. package/composables/useGlobalMessage.ts +53 -53
  91. package/composables/useGlobalToast.ts +63 -63
  92. package/composables/useLocale.ts +54 -54
  93. package/composables/useManualTheme.ts +179 -179
  94. package/composables/useMenus.ts +193 -193
  95. package/composables/useSectionMenus.ts +120 -120
  96. package/composables/useTabbar.ts +50 -50
  97. package/composables/useTheme.ts +74 -74
  98. package/composables/useUser.ts +24 -24
  99. package/index.d.ts +90 -90
  100. package/index.ts +83 -83
  101. package/package.json +24 -24
  102. package/static/iconfont/iconfont.css +63 -63
  103. package/store/language.ts +151 -151
  104. package/store/manualThemeStore.ts +143 -143
  105. package/store/persist.ts +41 -41
  106. package/store/themeStore.ts +74 -74
  107. package/store/userStore.ts +22 -22
  108. package/styles/dark-mode.css +523 -523
  109. package/styles/dark-mode.min.css +1 -1
  110. package/styles/dark-mode.scss +498 -498
  111. package/type.ts +154 -154
  112. package/utils/control-tree.ts +353 -353
  113. package/utils/control-type-supportor.ts +148 -148
  114. package/utils/eventBus.ts +36 -36
  115. package/utils/idata-scan.ts +99 -99
  116. package/utils/index.ts +979 -979
  117. package/utils/rsaEncrypt.ts +10 -10
@@ -1,398 +1,398 @@
1
- <template>
2
- <view class="banner-container">
3
- <view class="banner-wrapper">
4
- <!-- 热门标签 -->
5
- <view class="banner-badge">
6
- <text class="i-carbon:fire text-xs" />
7
- <text class="badge-text">
8
- 热门
9
- </text>
10
- </view>
11
-
12
- <!-- 图片区域 -->
13
- <view class="banner-image-wrapper">
14
- <image
15
- src="../../imgs/homeLog.png"
16
- class="banner-image"
17
- mode="aspectFill"
18
- />
19
- <view class="banner-gradient-overlay" />
20
- </view>
21
-
22
- <!-- 内容区域 -->
23
- <view class="banner-content">
24
- <view class="content-header">
25
- <text class="banner-title">
26
- 数字化办公平台
27
- </text>
28
- <view class="banner-tags">
29
- <text class="tag">
30
- 高效
31
- </text>
32
- <text class="tag">
33
- 智能
34
- </text>
35
- <text class="tag">
36
- 协同
37
- </text>
38
- </view>
39
- </view>
40
- <text class="banner-describe">
41
- 一站式企业数字化解决方案,助力团队高效协作
42
- </text>
43
-
44
- <!-- 快捷入口 -->
45
- <view class="banner-actions">
46
- <view class="primary action-btn">
47
- <text class="i-carbon:arrow-right text-sm" />
48
- <text class="btn-text">
49
- 立即体验
50
- </text>
51
- </view>
52
- <view class="action-btn secondary">
53
- <text class="i-carbon:information text-sm" />
54
- <text class="btn-text">
55
- 了解更多
56
- </text>
57
- </view>
58
- </view>
59
- </view>
60
-
61
- <!-- 装饰元素 -->
62
- <view class="banner-decoration">
63
- <view class="deco-circle c1" />
64
- <view class="deco-circle c2" />
65
- <view class="deco-line" />
66
- </view>
67
- </view>
68
-
69
- <!-- 指示器 -->
70
- <view class="banner-indicators">
71
- <view class="indicator active" />
72
- <view class="indicator" />
73
- <view class="indicator" />
74
- </view>
75
- </view>
76
- </template>
77
-
78
- <style lang="scss" scoped>
79
- .banner-container {
80
- padding: 24rpx 0 24rpx 0;
81
- animation: fadeInUp 0.7s ease-out;
82
- }
83
-
84
- .banner-wrapper {
85
- position: relative;
86
- border-radius: 28rpx;
87
- overflow: hidden;
88
- background: linear-gradient(145deg, #ffffff 0%, #f8fafc 100%);
89
- box-shadow:
90
- 0 12rpx 40rpx rgba(0, 0, 0, 0.08),
91
- 0 4rpx 12rpx rgba(0, 0, 0, 0.04),
92
- inset 0 1rpx 0 rgba(255, 255, 255, 1);
93
- border: 1rpx solid rgba(0, 0, 0, 0.04);
94
- transition: transform 0.3s ease, box-shadow 0.3s ease;
95
- }
96
-
97
- .banner-wrapper:active {
98
- transform: translateY(-2rpx) scale(0.995);
99
- box-shadow:
100
- 0 16rpx 48rpx rgba(0, 0, 0, 0.1),
101
- 0 6rpx 16rpx rgba(0, 0, 0, 0.06);
102
- }
103
-
104
- // 热门标签
105
- .banner-badge {
106
- position: absolute;
107
- top: 20rpx;
108
- left: 20rpx;
109
- z-index: 10;
110
- display: flex;
111
- align-items: center;
112
- gap: 8rpx;
113
- padding: 8rpx 16rpx;
114
- background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
115
- border-radius: 20rpx;
116
- color: #fff;
117
- font-size: 20rpx;
118
- font-weight: 600;
119
- box-shadow:
120
- 0 4rpx 12rpx rgba(239, 68, 68, 0.35),
121
- inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
122
- animation: pulseBadge 2s ease-in-out infinite;
123
- }
124
-
125
- .badge-text {
126
- font-size: 20rpx;
127
- }
128
-
129
- // 图片区域
130
- .banner-image-wrapper {
131
- position: relative;
132
- height: 200rpx;
133
- overflow: hidden;
134
- }
135
-
136
- .banner-image {
137
- width: 100%;
138
- height: 100%;
139
- object-fit: cover;
140
- transition: transform 0.5s ease;
141
- }
142
-
143
- .banner-wrapper:active .banner-image {
144
- transform: scale(1.02);
145
- }
146
-
147
- .banner-gradient-overlay {
148
- position: absolute;
149
- top: 0;
150
- left: 0;
151
- right: 0;
152
- bottom: 0;
153
- background: linear-gradient(
154
- 180deg,
155
- rgba(0, 0, 0, 0.1) 0%,
156
- rgba(0, 0, 0, 0) 40%,
157
- rgba(0, 0, 0, 0.02) 100%
158
- );
159
- pointer-events: none;
160
- }
161
-
162
- // 内容区域
163
- .banner-content {
164
- padding: 24rpx;
165
- }
166
-
167
- .content-header {
168
- display: flex;
169
- align-items: center;
170
- justify-content: space-between;
171
- margin-bottom: 12rpx;
172
- }
173
-
174
- .banner-title {
175
- font-size: 32rpx;
176
- font-weight: 700;
177
- color: #1f2937;
178
- letter-spacing: 0.02em;
179
- }
180
-
181
- .banner-tags {
182
- display: flex;
183
- gap: 8rpx;
184
- }
185
-
186
- .tag {
187
- padding: 4rpx 12rpx;
188
- background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);
189
- color: #3b82f6;
190
- font-size: 18rpx;
191
- font-weight: 600;
192
- border-radius: 12rpx;
193
- border: 1rpx solid rgba(59, 130, 246, 0.2);
194
- }
195
-
196
- .banner-describe {
197
- font-size: 24rpx;
198
- color: #6b7280;
199
- line-height: 1.5;
200
- margin-bottom: 20rpx;
201
- display: block;
202
- }
203
-
204
- // 快捷入口
205
- .banner-actions {
206
- display: flex;
207
- gap: 16rpx;
208
- }
209
-
210
- .action-btn {
211
- display: flex;
212
- align-items: center;
213
- gap: 8rpx;
214
- padding: 12rpx 20rpx;
215
- border-radius: 24rpx;
216
- font-size: 24rpx;
217
- font-weight: 500;
218
- transition: all 0.2s ease;
219
-
220
- &.primary {
221
- background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
222
- color: #fff;
223
- box-shadow:
224
- 0 4rpx 16rpx rgba(59, 130, 246, 0.35),
225
- inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
226
-
227
- &:active {
228
- transform: scale(0.96);
229
- box-shadow:
230
- 0 2rpx 8rpx rgba(59, 130, 246, 0.25);
231
- }
232
- }
233
-
234
- &.secondary {
235
- background: linear-gradient(135deg, #f3f4f6 0%, #e5e7eb 100%);
236
- color: #4b5563;
237
- border: 1rpx solid rgba(0, 0, 0, 0.06);
238
-
239
- &:active {
240
- transform: scale(0.96);
241
- background: linear-gradient(135deg, #e5e7eb 0%, #d1d5db 100%);
242
- }
243
- }
244
- }
245
-
246
- .btn-text {
247
- font-size: 24rpx;
248
- }
249
-
250
- // 装饰元素
251
- .banner-decoration {
252
- position: absolute;
253
- top: 20rpx;
254
- right: 20rpx;
255
- width: 80rpx;
256
- height: 80rpx;
257
- pointer-events: none;
258
- }
259
-
260
- .deco-circle {
261
- position: absolute;
262
- border-radius: 50%;
263
- border: 2rpx solid rgba(59, 130, 246, 0.2);
264
-
265
- &.c1 {
266
- width: 60rpx;
267
- height: 60rpx;
268
- top: 0;
269
- right: 0;
270
- animation: rotate 10s linear infinite;
271
- }
272
-
273
- &.c2 {
274
- width: 36rpx;
275
- height: 36rpx;
276
- top: 20rpx;
277
- right: 20rpx;
278
- animation: rotate 8s linear infinite reverse;
279
- }
280
- }
281
-
282
- .deco-line {
283
- position: absolute;
284
- width: 2rpx;
285
- height: 40rpx;
286
- background: linear-gradient(180deg, rgba(59, 130, 246, 0.3), transparent);
287
- top: 30rpx;
288
- right: 30rpx;
289
- transform: rotate(45deg);
290
- }
291
-
292
- // 指示器
293
- .banner-indicators {
294
- display: flex;
295
- justify-content: center;
296
- gap: 12rpx;
297
- margin-top: 20rpx;
298
- }
299
-
300
- .indicator {
301
- width: 8rpx;
302
- height: 8rpx;
303
- border-radius: 50%;
304
- background: rgba(0, 0, 0, 0.15);
305
- transition: all 0.3s ease;
306
-
307
- &.active {
308
- width: 24rpx;
309
- border-radius: 4rpx;
310
- background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
311
- box-shadow: 0 2rpx 8rpx rgba(59, 130, 246, 0.4);
312
- }
313
- }
314
-
315
- // 动画
316
- @keyframes fadeInUp {
317
- from {
318
- opacity: 0;
319
- transform: translateY(24rpx);
320
- }
321
- to {
322
- opacity: 1;
323
- transform: translateY(0);
324
- }
325
- }
326
-
327
- @keyframes pulseBadge {
328
- 0%, 100% {
329
- box-shadow:
330
- 0 4rpx 12rpx rgba(239, 68, 68, 0.35),
331
- inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
332
- }
333
- 50% {
334
- box-shadow:
335
- 0 6rpx 20rpx rgba(239, 68, 68, 0.5),
336
- inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
337
- }
338
- }
339
-
340
- @keyframes rotate {
341
- from {
342
- transform: rotate(0deg);
343
- }
344
- to {
345
- transform: rotate(360deg);
346
- }
347
- }
348
-
349
- // 暗黑模式适配
350
- :global(.wot-theme-dark) {
351
- .banner-wrapper {
352
- background: linear-gradient(145deg, #1f2937 0%, #111827 100%);
353
- border-color: rgba(255, 255, 255, 0.06);
354
- box-shadow:
355
- 0 12rpx 40rpx rgba(0, 0, 0, 0.3),
356
- 0 4rpx 12rpx rgba(0, 0, 0, 0.2),
357
- inset 0 1rpx 0 rgba(255, 255, 255, 0.05);
358
- }
359
-
360
- .banner-title {
361
- color: #f9fafb;
362
- }
363
-
364
- .banner-describe {
365
- color: #9ca3af;
366
- }
367
-
368
- .tag {
369
- background: linear-gradient(135deg, rgba(59, 130, 246, 0.2) 0%, rgba(37, 99, 235, 0.15) 100%);
370
- border-color: rgba(59, 130, 246, 0.3);
371
- color: #60a5fa;
372
- }
373
-
374
- .action-btn {
375
- &.secondary {
376
- background: linear-gradient(135deg, #374151 0%, #1f2937 100%);
377
- color: #d1d5db;
378
- border-color: rgba(255, 255, 255, 0.08);
379
-
380
- &:active {
381
- background: linear-gradient(135deg, #4b5563 0%, #374151 100%);
382
- }
383
- }
384
- }
385
-
386
- .indicator {
387
- background: rgba(255, 255, 255, 0.15);
388
- }
389
-
390
- .deco-circle {
391
- border-color: rgba(96, 165, 250, 0.3);
392
- }
393
-
394
- .deco-line {
395
- background: linear-gradient(180deg, rgba(96, 165, 250, 0.4), transparent);
396
- }
397
- }
398
- </style>
1
+ <template>
2
+ <view class="banner-container">
3
+ <view class="banner-wrapper">
4
+ <!-- 热门标签 -->
5
+ <view class="banner-badge">
6
+ <text class="i-carbon:fire text-xs" />
7
+ <text class="badge-text">
8
+ 热门
9
+ </text>
10
+ </view>
11
+
12
+ <!-- 图片区域 -->
13
+ <view class="banner-image-wrapper">
14
+ <image
15
+ src="../../imgs/homeLog.png"
16
+ class="banner-image"
17
+ mode="aspectFill"
18
+ />
19
+ <view class="banner-gradient-overlay" />
20
+ </view>
21
+
22
+ <!-- 内容区域 -->
23
+ <view class="banner-content">
24
+ <view class="content-header">
25
+ <text class="banner-title">
26
+ 数字化办公平台
27
+ </text>
28
+ <view class="banner-tags">
29
+ <text class="tag">
30
+ 高效
31
+ </text>
32
+ <text class="tag">
33
+ 智能
34
+ </text>
35
+ <text class="tag">
36
+ 协同
37
+ </text>
38
+ </view>
39
+ </view>
40
+ <text class="banner-describe">
41
+ 一站式企业数字化解决方案,助力团队高效协作
42
+ </text>
43
+
44
+ <!-- 快捷入口 -->
45
+ <view class="banner-actions">
46
+ <view class="primary action-btn">
47
+ <text class="i-carbon:arrow-right text-sm" />
48
+ <text class="btn-text">
49
+ 立即体验
50
+ </text>
51
+ </view>
52
+ <view class="action-btn secondary">
53
+ <text class="i-carbon:information text-sm" />
54
+ <text class="btn-text">
55
+ 了解更多
56
+ </text>
57
+ </view>
58
+ </view>
59
+ </view>
60
+
61
+ <!-- 装饰元素 -->
62
+ <view class="banner-decoration">
63
+ <view class="deco-circle c1" />
64
+ <view class="deco-circle c2" />
65
+ <view class="deco-line" />
66
+ </view>
67
+ </view>
68
+
69
+ <!-- 指示器 -->
70
+ <view class="banner-indicators">
71
+ <view class="indicator active" />
72
+ <view class="indicator" />
73
+ <view class="indicator" />
74
+ </view>
75
+ </view>
76
+ </template>
77
+
78
+ <style lang="scss" scoped>
79
+ .banner-container {
80
+ padding: 24rpx 0 24rpx 0;
81
+ animation: fadeInUp 0.7s ease-out;
82
+ }
83
+
84
+ .banner-wrapper {
85
+ position: relative;
86
+ border-radius: 28rpx;
87
+ overflow: hidden;
88
+ background: linear-gradient(145deg, #ffffff 0%, #f8fafc 100%);
89
+ box-shadow:
90
+ 0 12rpx 40rpx rgba(0, 0, 0, 0.08),
91
+ 0 4rpx 12rpx rgba(0, 0, 0, 0.04),
92
+ inset 0 1rpx 0 rgba(255, 255, 255, 1);
93
+ border: 1rpx solid rgba(0, 0, 0, 0.04);
94
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
95
+ }
96
+
97
+ .banner-wrapper:active {
98
+ transform: translateY(-2rpx) scale(0.995);
99
+ box-shadow:
100
+ 0 16rpx 48rpx rgba(0, 0, 0, 0.1),
101
+ 0 6rpx 16rpx rgba(0, 0, 0, 0.06);
102
+ }
103
+
104
+ // 热门标签
105
+ .banner-badge {
106
+ position: absolute;
107
+ top: 20rpx;
108
+ left: 20rpx;
109
+ z-index: 10;
110
+ display: flex;
111
+ align-items: center;
112
+ gap: 8rpx;
113
+ padding: 8rpx 16rpx;
114
+ background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
115
+ border-radius: 20rpx;
116
+ color: #fff;
117
+ font-size: 20rpx;
118
+ font-weight: 600;
119
+ box-shadow:
120
+ 0 4rpx 12rpx rgba(239, 68, 68, 0.35),
121
+ inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
122
+ animation: pulseBadge 2s ease-in-out infinite;
123
+ }
124
+
125
+ .badge-text {
126
+ font-size: 20rpx;
127
+ }
128
+
129
+ // 图片区域
130
+ .banner-image-wrapper {
131
+ position: relative;
132
+ height: 200rpx;
133
+ overflow: hidden;
134
+ }
135
+
136
+ .banner-image {
137
+ width: 100%;
138
+ height: 100%;
139
+ object-fit: cover;
140
+ transition: transform 0.5s ease;
141
+ }
142
+
143
+ .banner-wrapper:active .banner-image {
144
+ transform: scale(1.02);
145
+ }
146
+
147
+ .banner-gradient-overlay {
148
+ position: absolute;
149
+ top: 0;
150
+ left: 0;
151
+ right: 0;
152
+ bottom: 0;
153
+ background: linear-gradient(
154
+ 180deg,
155
+ rgba(0, 0, 0, 0.1) 0%,
156
+ rgba(0, 0, 0, 0) 40%,
157
+ rgba(0, 0, 0, 0.02) 100%
158
+ );
159
+ pointer-events: none;
160
+ }
161
+
162
+ // 内容区域
163
+ .banner-content {
164
+ padding: 24rpx;
165
+ }
166
+
167
+ .content-header {
168
+ display: flex;
169
+ align-items: center;
170
+ justify-content: space-between;
171
+ margin-bottom: 12rpx;
172
+ }
173
+
174
+ .banner-title {
175
+ font-size: 32rpx;
176
+ font-weight: 700;
177
+ color: #1f2937;
178
+ letter-spacing: 0.02em;
179
+ }
180
+
181
+ .banner-tags {
182
+ display: flex;
183
+ gap: 8rpx;
184
+ }
185
+
186
+ .tag {
187
+ padding: 4rpx 12rpx;
188
+ background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);
189
+ color: #3b82f6;
190
+ font-size: 18rpx;
191
+ font-weight: 600;
192
+ border-radius: 12rpx;
193
+ border: 1rpx solid rgba(59, 130, 246, 0.2);
194
+ }
195
+
196
+ .banner-describe {
197
+ font-size: 24rpx;
198
+ color: #6b7280;
199
+ line-height: 1.5;
200
+ margin-bottom: 20rpx;
201
+ display: block;
202
+ }
203
+
204
+ // 快捷入口
205
+ .banner-actions {
206
+ display: flex;
207
+ gap: 16rpx;
208
+ }
209
+
210
+ .action-btn {
211
+ display: flex;
212
+ align-items: center;
213
+ gap: 8rpx;
214
+ padding: 12rpx 20rpx;
215
+ border-radius: 24rpx;
216
+ font-size: 24rpx;
217
+ font-weight: 500;
218
+ transition: all 0.2s ease;
219
+
220
+ &.primary {
221
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
222
+ color: #fff;
223
+ box-shadow:
224
+ 0 4rpx 16rpx rgba(59, 130, 246, 0.35),
225
+ inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
226
+
227
+ &:active {
228
+ transform: scale(0.96);
229
+ box-shadow:
230
+ 0 2rpx 8rpx rgba(59, 130, 246, 0.25);
231
+ }
232
+ }
233
+
234
+ &.secondary {
235
+ background: linear-gradient(135deg, #f3f4f6 0%, #e5e7eb 100%);
236
+ color: #4b5563;
237
+ border: 1rpx solid rgba(0, 0, 0, 0.06);
238
+
239
+ &:active {
240
+ transform: scale(0.96);
241
+ background: linear-gradient(135deg, #e5e7eb 0%, #d1d5db 100%);
242
+ }
243
+ }
244
+ }
245
+
246
+ .btn-text {
247
+ font-size: 24rpx;
248
+ }
249
+
250
+ // 装饰元素
251
+ .banner-decoration {
252
+ position: absolute;
253
+ top: 20rpx;
254
+ right: 20rpx;
255
+ width: 80rpx;
256
+ height: 80rpx;
257
+ pointer-events: none;
258
+ }
259
+
260
+ .deco-circle {
261
+ position: absolute;
262
+ border-radius: 50%;
263
+ border: 2rpx solid rgba(59, 130, 246, 0.2);
264
+
265
+ &.c1 {
266
+ width: 60rpx;
267
+ height: 60rpx;
268
+ top: 0;
269
+ right: 0;
270
+ animation: rotate 10s linear infinite;
271
+ }
272
+
273
+ &.c2 {
274
+ width: 36rpx;
275
+ height: 36rpx;
276
+ top: 20rpx;
277
+ right: 20rpx;
278
+ animation: rotate 8s linear infinite reverse;
279
+ }
280
+ }
281
+
282
+ .deco-line {
283
+ position: absolute;
284
+ width: 2rpx;
285
+ height: 40rpx;
286
+ background: linear-gradient(180deg, rgba(59, 130, 246, 0.3), transparent);
287
+ top: 30rpx;
288
+ right: 30rpx;
289
+ transform: rotate(45deg);
290
+ }
291
+
292
+ // 指示器
293
+ .banner-indicators {
294
+ display: flex;
295
+ justify-content: center;
296
+ gap: 12rpx;
297
+ margin-top: 20rpx;
298
+ }
299
+
300
+ .indicator {
301
+ width: 8rpx;
302
+ height: 8rpx;
303
+ border-radius: 50%;
304
+ background: rgba(0, 0, 0, 0.15);
305
+ transition: all 0.3s ease;
306
+
307
+ &.active {
308
+ width: 24rpx;
309
+ border-radius: 4rpx;
310
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
311
+ box-shadow: 0 2rpx 8rpx rgba(59, 130, 246, 0.4);
312
+ }
313
+ }
314
+
315
+ // 动画
316
+ @keyframes fadeInUp {
317
+ from {
318
+ opacity: 0;
319
+ transform: translateY(24rpx);
320
+ }
321
+ to {
322
+ opacity: 1;
323
+ transform: translateY(0);
324
+ }
325
+ }
326
+
327
+ @keyframes pulseBadge {
328
+ 0%, 100% {
329
+ box-shadow:
330
+ 0 4rpx 12rpx rgba(239, 68, 68, 0.35),
331
+ inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
332
+ }
333
+ 50% {
334
+ box-shadow:
335
+ 0 6rpx 20rpx rgba(239, 68, 68, 0.5),
336
+ inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
337
+ }
338
+ }
339
+
340
+ @keyframes rotate {
341
+ from {
342
+ transform: rotate(0deg);
343
+ }
344
+ to {
345
+ transform: rotate(360deg);
346
+ }
347
+ }
348
+
349
+ // 暗黑模式适配
350
+ :global(.wot-theme-dark) {
351
+ .banner-wrapper {
352
+ background: linear-gradient(145deg, #1f2937 0%, #111827 100%);
353
+ border-color: rgba(255, 255, 255, 0.06);
354
+ box-shadow:
355
+ 0 12rpx 40rpx rgba(0, 0, 0, 0.3),
356
+ 0 4rpx 12rpx rgba(0, 0, 0, 0.2),
357
+ inset 0 1rpx 0 rgba(255, 255, 255, 0.05);
358
+ }
359
+
360
+ .banner-title {
361
+ color: #f9fafb;
362
+ }
363
+
364
+ .banner-describe {
365
+ color: #9ca3af;
366
+ }
367
+
368
+ .tag {
369
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.2) 0%, rgba(37, 99, 235, 0.15) 100%);
370
+ border-color: rgba(59, 130, 246, 0.3);
371
+ color: #60a5fa;
372
+ }
373
+
374
+ .action-btn {
375
+ &.secondary {
376
+ background: linear-gradient(135deg, #374151 0%, #1f2937 100%);
377
+ color: #d1d5db;
378
+ border-color: rgba(255, 255, 255, 0.08);
379
+
380
+ &:active {
381
+ background: linear-gradient(135deg, #4b5563 0%, #374151 100%);
382
+ }
383
+ }
384
+ }
385
+
386
+ .indicator {
387
+ background: rgba(255, 255, 255, 0.15);
388
+ }
389
+
390
+ .deco-circle {
391
+ border-color: rgba(96, 165, 250, 0.3);
392
+ }
393
+
394
+ .deco-line {
395
+ background: linear-gradient(180deg, rgba(96, 165, 250, 0.4), transparent);
396
+ }
397
+ }
398
+ </style>