mall-components 1.0.0

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 (122) hide show
  1. package/README.md +128 -0
  2. package/build/_components-raw.css +791 -0
  3. package/build/_shims/antd.js +1 -0
  4. package/build/_shims/icons.js +1 -0
  5. package/build/_shims/moment.js +1 -0
  6. package/build/_shims/react-dom.js +1 -0
  7. package/build/_shims/react.js +1 -0
  8. package/build/adapters/DataSourceAdapter.d.ts +46 -0
  9. package/build/components/AdminLayout/AdminLayout.d.ts +5 -0
  10. package/build/components/AdminLayout/Breadcrumb.d.ts +8 -0
  11. package/build/components/AdminLayout/MainContent.d.ts +17 -0
  12. package/build/components/AdminLayout/Navbar.d.ts +10 -0
  13. package/build/components/AdminLayout/Sidebar.d.ts +14 -0
  14. package/build/components/AdminLayout/TabBar.d.ts +13 -0
  15. package/build/components/AdminLayout/TabPane.d.ts +4 -0
  16. package/build/components/AdminLayout/index.d.ts +3 -0
  17. package/build/components/AdminLayout/types.d.ts +42 -0
  18. package/build/components/CouponCard/CouponCard.d.ts +20 -0
  19. package/build/components/CouponCard/index.d.ts +1 -0
  20. package/build/components/OrderForm/OrderForm.d.ts +18 -0
  21. package/build/components/OrderForm/index.d.ts +1 -0
  22. package/build/components/OrderList/OrderList.d.ts +29 -0
  23. package/build/components/OrderList/index.d.ts +1 -0
  24. package/build/components/ProductForm/ProductForm.d.ts +18 -0
  25. package/build/components/ProductForm/index.d.ts +3 -0
  26. package/build/components/ProductList/ProductList.d.ts +47 -0
  27. package/build/components/ProductList/index.d.ts +3 -0
  28. package/build/components/PromotionCard/PromotionCard.d.ts +22 -0
  29. package/build/components/PromotionCard/index.d.ts +1 -0
  30. package/build/components/RoleCard/RoleCard.d.ts +18 -0
  31. package/build/components/RoleCard/index.d.ts +1 -0
  32. package/build/components/UserCard/UserCard.d.ts +17 -0
  33. package/build/components/UserCard/index.d.ts +1 -0
  34. package/build/entry-meta.d.ts +603 -0
  35. package/build/index.css +1 -0
  36. package/build/index.js +1 -0
  37. package/build/mall-components-meta.js +2563 -0
  38. package/build/mall-components.cdn.umd.css +1 -0
  39. package/build/mall-components.cdn.umd.js +8 -0
  40. package/build/mall-components.codesandbox.combined.js +1094 -0
  41. package/build/mall-components.codesandbox.css +401 -0
  42. package/build/mall-components.codesandbox.js +1080 -0
  43. package/build/mall-components.umd.css +1 -0
  44. package/build/mall-components.umd.js +8 -0
  45. package/build/meta/adminLayoutMeta.d.ts +3 -0
  46. package/build/meta/couponCardMeta.d.ts +128 -0
  47. package/build/meta/icons.d.ts +10 -0
  48. package/build/meta/orderFormMeta.d.ts +111 -0
  49. package/build/meta/orderListMeta.d.ts +170 -0
  50. package/build/meta/productFormMeta.d.ts +3 -0
  51. package/build/meta/productListMeta.d.ts +200 -0
  52. package/build/meta/promotionCardMeta.d.ts +129 -0
  53. package/build/meta/roleCardMeta.d.ts +3 -0
  54. package/build/meta/tabPaneMeta.d.ts +3 -0
  55. package/build/meta/userCardMeta.d.ts +3 -0
  56. package/build/meta.d.ts +605 -0
  57. package/build/setters/RestApiTester.d.ts +11 -0
  58. package/build/types/common.d.ts +17 -0
  59. package/build/types/marketing.d.ts +128 -0
  60. package/build/types/order.d.ts +174 -0
  61. package/build/types/permission.d.ts +101 -0
  62. package/build/types/product.d.ts +47 -0
  63. package/package.json +1 -0
  64. package/src/adapters/DataSourceAdapter.ts +445 -0
  65. package/src/components/AdminLayout/AdminLayout.scss +447 -0
  66. package/src/components/AdminLayout/AdminLayout.tsx +681 -0
  67. package/src/components/AdminLayout/Breadcrumb.tsx +60 -0
  68. package/src/components/AdminLayout/MainContent.tsx +54 -0
  69. package/src/components/AdminLayout/Navbar.tsx +76 -0
  70. package/src/components/AdminLayout/Sidebar.tsx +256 -0
  71. package/src/components/AdminLayout/TabBar.tsx +177 -0
  72. package/src/components/AdminLayout/TabPane.tsx +29 -0
  73. package/src/components/AdminLayout/index.ts +3 -0
  74. package/src/components/AdminLayout/types.ts +46 -0
  75. package/src/components/CouponCard/CouponCard.scss +55 -0
  76. package/src/components/CouponCard/CouponCard.tsx +687 -0
  77. package/src/components/CouponCard/index.ts +1 -0
  78. package/src/components/OrderForm/OrderForm.scss +148 -0
  79. package/src/components/OrderForm/OrderForm.tsx +503 -0
  80. package/src/components/OrderForm/index.ts +1 -0
  81. package/src/components/OrderList/OrderList.scss +160 -0
  82. package/src/components/OrderList/OrderList.tsx +885 -0
  83. package/src/components/OrderList/index.ts +1 -0
  84. package/src/components/ProductForm/ProductForm.scss +23 -0
  85. package/src/components/ProductForm/ProductForm.tsx +442 -0
  86. package/src/components/ProductForm/index.ts +3 -0
  87. package/src/components/ProductList/ProductList.scss +293 -0
  88. package/src/components/ProductList/ProductList.tsx +454 -0
  89. package/src/components/ProductList/index.ts +3 -0
  90. package/src/components/PromotionCard/PromotionCard.scss +71 -0
  91. package/src/components/PromotionCard/PromotionCard.tsx +579 -0
  92. package/src/components/PromotionCard/index.ts +1 -0
  93. package/src/components/RoleCard/RoleCard.scss +77 -0
  94. package/src/components/RoleCard/RoleCard.tsx +463 -0
  95. package/src/components/RoleCard/index.ts +1 -0
  96. package/src/components/UserCard/UserCard.scss +51 -0
  97. package/src/components/UserCard/UserCard.tsx +432 -0
  98. package/src/components/UserCard/index.ts +1 -0
  99. package/src/entry-components.ts +39 -0
  100. package/src/entry-meta.ts +23 -0
  101. package/src/index.scss +4 -0
  102. package/src/index.ts +36 -0
  103. package/src/index.tsx +17 -0
  104. package/src/meta/adminLayoutMeta.ts +154 -0
  105. package/src/meta/couponCardMeta.ts +287 -0
  106. package/src/meta/icons.ts +41 -0
  107. package/src/meta/orderFormMeta.ts +279 -0
  108. package/src/meta/orderListMeta.ts +443 -0
  109. package/src/meta/productFormMeta.ts +253 -0
  110. package/src/meta/productListMeta.ts +434 -0
  111. package/src/meta/promotionCardMeta.ts +276 -0
  112. package/src/meta/roleCardMeta.ts +142 -0
  113. package/src/meta/tabPaneMeta.ts +69 -0
  114. package/src/meta/userCardMeta.ts +128 -0
  115. package/src/meta.ts +25 -0
  116. package/src/setters/RestApiTester.tsx +219 -0
  117. package/src/shims/require.js +8 -0
  118. package/src/types/common.ts +19 -0
  119. package/src/types/marketing.ts +124 -0
  120. package/src/types/order.ts +169 -0
  121. package/src/types/permission.ts +102 -0
  122. package/src/types/product.ts +49 -0
@@ -0,0 +1,603 @@
1
+ declare const _default: (import("@alilc/lowcode-types/lib").IPublicTypeComponentMetadata | {
2
+ componentName: string;
3
+ title: string;
4
+ docUrl: string;
5
+ screenshot: string;
6
+ npm: {
7
+ package: string;
8
+ version: string;
9
+ exportName: string;
10
+ destructuring: boolean;
11
+ };
12
+ props: ({
13
+ name: string;
14
+ propType: string;
15
+ description: string;
16
+ defaultValue: string;
17
+ } | {
18
+ name: string;
19
+ propType: string;
20
+ description: string;
21
+ defaultValue?: undefined;
22
+ } | {
23
+ name: string;
24
+ propType: string;
25
+ description: string;
26
+ defaultValue: boolean;
27
+ } | {
28
+ name: string;
29
+ propType: string;
30
+ description: string;
31
+ defaultValue: number;
32
+ })[];
33
+ configure: {
34
+ supports: {
35
+ style: boolean;
36
+ events: {
37
+ name: string;
38
+ description: string;
39
+ }[];
40
+ };
41
+ props: ({
42
+ type: string;
43
+ title: string;
44
+ display: string;
45
+ items: ({
46
+ name: string;
47
+ title: string;
48
+ setter: {
49
+ componentName: string;
50
+ props: {
51
+ options: {
52
+ label: string;
53
+ value: string;
54
+ }[];
55
+ rows?: undefined;
56
+ placeholder?: undefined;
57
+ setters?: undefined;
58
+ };
59
+ };
60
+ extraProps: {
61
+ display: string;
62
+ };
63
+ condition?: undefined;
64
+ } | {
65
+ name: string;
66
+ title: string;
67
+ setter: {
68
+ componentName: string;
69
+ props: {
70
+ rows: number;
71
+ placeholder: string;
72
+ options?: undefined;
73
+ setters?: undefined;
74
+ };
75
+ };
76
+ extraProps: {
77
+ display: string;
78
+ };
79
+ condition: (target: any) => boolean;
80
+ } | {
81
+ name: string;
82
+ title: string;
83
+ setter: {
84
+ componentName: string;
85
+ props: {
86
+ setters: string[];
87
+ options?: undefined;
88
+ rows?: undefined;
89
+ placeholder?: undefined;
90
+ };
91
+ };
92
+ extraProps: {
93
+ display: string;
94
+ };
95
+ condition: (target: any) => boolean;
96
+ })[];
97
+ } | {
98
+ type: string;
99
+ title: string;
100
+ display: string;
101
+ items: {
102
+ name: string;
103
+ title: string;
104
+ setter: string;
105
+ extraProps: {
106
+ display: string;
107
+ };
108
+ }[];
109
+ } | {
110
+ type: string;
111
+ title: string;
112
+ display: string;
113
+ items: {
114
+ name: string;
115
+ title: string;
116
+ setter: {
117
+ componentName: string;
118
+ props: {
119
+ min: number;
120
+ max: number;
121
+ };
122
+ };
123
+ extraProps: {
124
+ display: string;
125
+ };
126
+ }[];
127
+ })[];
128
+ };
129
+ icon: import("@types/react").CElement<{}, import("@types/react").Component<{}, any, any>> | null;
130
+ category: string;
131
+ group: string;
132
+ snippets: ({
133
+ title: string;
134
+ schema: {
135
+ componentName: string;
136
+ props: {
137
+ dataSourceType: string;
138
+ mockData: string;
139
+ showFilter: boolean;
140
+ showStatusFilter: boolean;
141
+ showSearch: boolean;
142
+ showDatePicker: boolean;
143
+ showActions: boolean;
144
+ showBatchOperations: boolean;
145
+ showExport: boolean;
146
+ showPagination: boolean;
147
+ defaultPageSize: number;
148
+ };
149
+ };
150
+ } | {
151
+ title: string;
152
+ schema: {
153
+ componentName: string;
154
+ props: {
155
+ dataSourceType: string;
156
+ mockData: string;
157
+ showFilter: boolean;
158
+ showActions: boolean;
159
+ showBatchOperations: boolean;
160
+ showExport: boolean;
161
+ showPagination: boolean;
162
+ defaultPageSize: number;
163
+ showStatusFilter?: undefined;
164
+ showSearch?: undefined;
165
+ showDatePicker?: undefined;
166
+ };
167
+ };
168
+ })[];
169
+ } | {
170
+ componentName: string;
171
+ title: string;
172
+ docUrl: string;
173
+ screenshot: string;
174
+ npm: {
175
+ package: string;
176
+ version: string;
177
+ exportName: string;
178
+ destructuring: boolean;
179
+ };
180
+ props: ({
181
+ name: string;
182
+ propType: string;
183
+ description: string;
184
+ defaultValue: string;
185
+ setter?: undefined;
186
+ } | {
187
+ name: string;
188
+ propType: string;
189
+ description: string;
190
+ defaultValue: string;
191
+ setter: {
192
+ componentName: string;
193
+ props: {
194
+ options: {
195
+ label: string;
196
+ value: string;
197
+ }[];
198
+ };
199
+ };
200
+ } | {
201
+ name: string;
202
+ propType: string;
203
+ description: string;
204
+ defaultValue: boolean;
205
+ setter: string;
206
+ })[];
207
+ configure: {
208
+ supports: {
209
+ style: boolean;
210
+ events: {
211
+ name: string;
212
+ description: string;
213
+ }[];
214
+ };
215
+ props: ({
216
+ type: string;
217
+ title: string;
218
+ display: string;
219
+ items: ({
220
+ name: string;
221
+ title: string;
222
+ setter: {
223
+ componentName: string;
224
+ props: {
225
+ options: {
226
+ label: string;
227
+ value: string;
228
+ }[];
229
+ rows?: undefined;
230
+ placeholder?: undefined;
231
+ };
232
+ };
233
+ extraProps?: undefined;
234
+ } | {
235
+ name: string;
236
+ title: string;
237
+ setter: {
238
+ componentName: string;
239
+ props: {
240
+ rows: number;
241
+ placeholder: string;
242
+ options?: undefined;
243
+ };
244
+ };
245
+ extraProps: {
246
+ display: string;
247
+ };
248
+ })[];
249
+ } | {
250
+ type: string;
251
+ title: string;
252
+ display: string;
253
+ items: {
254
+ name: string;
255
+ title: string;
256
+ setter: string;
257
+ }[];
258
+ })[];
259
+ };
260
+ icon: import("@types/react").CElement<{}, import("@types/react").Component<{}, any, any>> | null;
261
+ category: string;
262
+ group: string;
263
+ snippets: {
264
+ title: string;
265
+ schema: {
266
+ componentName: string;
267
+ props: {
268
+ mode: string;
269
+ initialValues: string;
270
+ showBasicInfo: boolean;
271
+ showReceiverInfo: boolean;
272
+ showMoneyInfo: boolean;
273
+ showOrderItems: boolean;
274
+ showStatusInfo: boolean;
275
+ };
276
+ };
277
+ }[];
278
+ } | {
279
+ componentName: string;
280
+ title: string;
281
+ docUrl: string;
282
+ screenshot: string;
283
+ devMode: string;
284
+ npm: {
285
+ package: string;
286
+ version: string;
287
+ exportName: string;
288
+ main: string;
289
+ destructuring: boolean;
290
+ subName: string;
291
+ };
292
+ category: string;
293
+ group: string;
294
+ icon: import("@types/react").CElement<{}, import("@types/react").Component<{}, any, any>> | null;
295
+ props: ({
296
+ name: string;
297
+ propType: string;
298
+ description: string;
299
+ defaultValue: string;
300
+ } | {
301
+ name: string;
302
+ propType: string;
303
+ description: string;
304
+ defaultValue?: undefined;
305
+ } | {
306
+ name: string;
307
+ propType: string;
308
+ description: string;
309
+ defaultValue: boolean;
310
+ })[];
311
+ configure: {
312
+ supports: {
313
+ style: boolean;
314
+ className: boolean;
315
+ events: {
316
+ name: string;
317
+ description: string;
318
+ }[];
319
+ };
320
+ props: ({
321
+ type: string;
322
+ title: string;
323
+ display: string;
324
+ items: ({
325
+ name: string;
326
+ title: string;
327
+ setter: {
328
+ componentName: string;
329
+ props: {
330
+ options: {
331
+ label: string;
332
+ value: string;
333
+ }[];
334
+ rows?: undefined;
335
+ placeholder?: undefined;
336
+ setters?: undefined;
337
+ };
338
+ };
339
+ extraProps: {
340
+ display: string;
341
+ };
342
+ condition?: undefined;
343
+ } | {
344
+ name: string;
345
+ title: string;
346
+ setter: {
347
+ componentName: string;
348
+ props: {
349
+ rows: number;
350
+ placeholder: string;
351
+ options?: undefined;
352
+ setters?: undefined;
353
+ };
354
+ };
355
+ extraProps: {
356
+ display: string;
357
+ };
358
+ condition: (target: any) => boolean;
359
+ } | {
360
+ name: string;
361
+ title: string;
362
+ setter: {
363
+ componentName: string;
364
+ props: {
365
+ setters: string[];
366
+ options?: undefined;
367
+ rows?: undefined;
368
+ placeholder?: undefined;
369
+ };
370
+ };
371
+ extraProps: {
372
+ display: string;
373
+ };
374
+ condition: (target: any) => boolean;
375
+ })[];
376
+ } | {
377
+ type: string;
378
+ title: string;
379
+ display: string;
380
+ items: {
381
+ name: string;
382
+ title: string;
383
+ setter: string;
384
+ extraProps: {
385
+ display: string;
386
+ };
387
+ }[];
388
+ })[];
389
+ };
390
+ snippets: {
391
+ title: string;
392
+ screenshot: string;
393
+ schema: {
394
+ componentName: string;
395
+ props: {
396
+ dataSourceType: string;
397
+ mockData: string;
398
+ showCreateButton: boolean;
399
+ showFilter: boolean;
400
+ showStatistics: boolean;
401
+ };
402
+ };
403
+ }[];
404
+ } | {
405
+ componentName: string;
406
+ title: string;
407
+ docUrl: string;
408
+ screenshot: string;
409
+ npm: {
410
+ package: string;
411
+ version: string;
412
+ exportName: string;
413
+ destructuring: boolean;
414
+ };
415
+ props: ({
416
+ name: string;
417
+ propType: string;
418
+ description: string;
419
+ defaultValue: string;
420
+ } | {
421
+ name: string;
422
+ propType: string;
423
+ description: string;
424
+ defaultValue?: undefined;
425
+ } | {
426
+ name: string;
427
+ propType: string;
428
+ description: string;
429
+ defaultValue: boolean;
430
+ })[];
431
+ configure: {
432
+ supports: {
433
+ style: boolean;
434
+ events: {
435
+ name: string;
436
+ description: string;
437
+ }[];
438
+ };
439
+ props: ({
440
+ type: string;
441
+ title: string;
442
+ display: string;
443
+ items: ({
444
+ name: string;
445
+ title: string;
446
+ setter: {
447
+ componentName: string;
448
+ props: {
449
+ options: {
450
+ label: string;
451
+ value: string;
452
+ }[];
453
+ rows?: undefined;
454
+ placeholder?: undefined;
455
+ setters?: undefined;
456
+ };
457
+ };
458
+ extraProps: {
459
+ display: string;
460
+ };
461
+ condition?: undefined;
462
+ } | {
463
+ name: string;
464
+ title: string;
465
+ setter: {
466
+ componentName: string;
467
+ props: {
468
+ rows: number;
469
+ placeholder: string;
470
+ options?: undefined;
471
+ setters?: undefined;
472
+ };
473
+ };
474
+ extraProps: {
475
+ display: string;
476
+ };
477
+ condition: (target: any) => boolean;
478
+ } | {
479
+ name: string;
480
+ title: string;
481
+ setter: {
482
+ componentName: string;
483
+ props: {
484
+ setters: string[];
485
+ options?: undefined;
486
+ rows?: undefined;
487
+ placeholder?: undefined;
488
+ };
489
+ };
490
+ extraProps: {
491
+ display: string;
492
+ };
493
+ condition: (target: any) => boolean;
494
+ })[];
495
+ } | {
496
+ type: string;
497
+ title: string;
498
+ display: string;
499
+ items: {
500
+ name: string;
501
+ title: string;
502
+ setter: string;
503
+ extraProps: {
504
+ display: string;
505
+ };
506
+ }[];
507
+ } | {
508
+ type: string;
509
+ title: string;
510
+ display: string;
511
+ items: {
512
+ name: string;
513
+ title: string;
514
+ setter: {
515
+ componentName: string;
516
+ props: {
517
+ item: {
518
+ setters: {
519
+ componentName: string;
520
+ props: {
521
+ config: {
522
+ items: ({
523
+ name: string;
524
+ description: string;
525
+ setter: string;
526
+ } | {
527
+ name: string;
528
+ description: string;
529
+ setter: {
530
+ componentName: string;
531
+ props: {
532
+ options: {
533
+ label: string;
534
+ value: string;
535
+ }[];
536
+ };
537
+ };
538
+ })[];
539
+ };
540
+ };
541
+ }[];
542
+ };
543
+ };
544
+ };
545
+ extraProps: {
546
+ display: string;
547
+ };
548
+ }[];
549
+ })[];
550
+ };
551
+ icon: import("@types/react").CElement<{}, import("@types/react").Component<{}, any, any>> | null;
552
+ category: string;
553
+ group: string;
554
+ snippets: ({
555
+ title: string;
556
+ schema: {
557
+ componentName: string;
558
+ props: {
559
+ dataSourceType: string;
560
+ mockData: string;
561
+ showFilter: boolean;
562
+ showAction: boolean;
563
+ showSelection: boolean;
564
+ showOperation: boolean;
565
+ showStatus: boolean;
566
+ showPagination: boolean;
567
+ actionButtons: ({
568
+ text: string;
569
+ icon: string;
570
+ type: string;
571
+ onClick: string;
572
+ } | {
573
+ text: string;
574
+ icon: string;
575
+ type: string;
576
+ onClick?: undefined;
577
+ })[];
578
+ batchOperations: {
579
+ text: string;
580
+ value: string;
581
+ }[];
582
+ };
583
+ };
584
+ } | {
585
+ title: string;
586
+ schema: {
587
+ componentName: string;
588
+ props: {
589
+ dataSourceType: string;
590
+ mockData: string;
591
+ showFilter: boolean;
592
+ showAction: boolean;
593
+ showSelection: boolean;
594
+ showOperation: boolean;
595
+ showStatus: boolean;
596
+ showPagination: boolean;
597
+ actionButtons?: undefined;
598
+ batchOperations?: undefined;
599
+ };
600
+ };
601
+ })[];
602
+ })[];
603
+ export default _default;
@@ -0,0 +1 @@
1
+ .mall-product-list{background:#f5f7fa;padding:16px;border-radius:8px;min-height:100%;.mall-product-list-filter{margin-bottom:16px;border-radius:8px;box-shadow:0 2px 8px #0000000f;transition:all .3s ease;&:hover{box-shadow:0 4px 12px #0000001a}.ant-card-body{padding:20px}.ant-input-affix-wrapper{border-radius:6px;transition:all .3s ease;&:hover,&:focus{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff1a}}.ant-btn{border-radius:6px;font-weight:500;transition:all .3s ease;&:hover{transform:translateY(-1px);box-shadow:0 2px 8px #00000026}&:active{transform:translateY(0)}}}.mall-product-list-action{margin-bottom:16px;border-radius:8px;box-shadow:0 2px 8px #0000000f;transition:all .3s ease;&:hover{box-shadow:0 4px 12px #0000001a}.ant-card-body{padding:16px 20px}.ant-btn{border-radius:6px;font-weight:500;transition:all .3s ease;&:hover{transform:translateY(-1px);box-shadow:0 2px 8px #00000026}}.ant-select{.ant-select-selector{border-radius:6px;transition:all .3s ease;&:hover{border-color:#40a9ff}}}}.mall-product-list-table{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000000f;.ant-table-thead>tr>th{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;font-weight:600;font-size:14px;padding:16px;border-bottom:none;&:before{background-color:#fff3}}.ant-table-tbody>tr{transition:all .3s ease;&:hover{background:#f0f5ff;cursor:pointer;transform:scale(1.01);box-shadow:0 2px 8px #00000014}>td{padding:16px;border-bottom:1px solid #f0f0f0}}img{border-radius:8px;box-shadow:0 2px 8px #0000001a;transition:all .3s ease;&:hover{transform:scale(1.1);box-shadow:0 4px 12px #00000026}}.price-cell{color:#f56c6c;font-weight:600;font-size:16px}.stock-cell{font-weight:500;&.low-stock{color:#f56c6c}&.normal-stock{color:#67c23a}}.ant-space{.ant-btn-link{padding:4px 8px;height:auto;font-weight:500;transition:all .3s ease;&:hover{background:#f0f5ff;border-radius:4px}&.ant-btn-dangerous{color:#f56c6c;&:hover{background:#fff1f0}}}}}.pagination-wrapper{background:#fff;padding:16px 20px;border-radius:8px;margin-top:16px;display:flex;justify-content:flex-end;.ant-pagination{.ant-pagination-item{border-radius:6px;transition:all .3s ease;&:hover{border-color:#40a9ff;transform:translateY(-1px)}}.ant-pagination-item-active{background:linear-gradient(135deg,#667eea,#764ba2);border-color:#667eea;a{color:#fff}}.ant-pagination-prev,.ant-pagination-next{border-radius:6px;transition:all .3s ease;&:hover{border-color:#40a9ff;transform:translateY(-1px)}}}}.ant-switch{&.ant-switch-checked{background:linear-gradient(135deg,#667eea,#764ba2)}}@media (max-width: 1200px){padding:12px;.mall-product-list-filter,.mall-product-list-action{.ant-card-body{padding:16px}}.ant-table-wrapper{.ant-table-thead>tr>th,.ant-table-tbody>tr>td{padding:12px}}}@media (max-width: 768px){padding:8px;.mall-product-list-filter{.ant-input-affix-wrapper{width:100%!important;margin-bottom:8px}.ant-btn{width:100%;margin-bottom:8px}}.mall-product-list-action{.ant-btn{width:100%;margin-bottom:8px}.ant-select{width:100%!important;margin-bottom:8px}}.pagination-wrapper{padding:12px;justify-content:center;.ant-pagination{flex-wrap:wrap;justify-content:center}}}.ant-spin-nested-loading{.ant-spin{.ant-spin-dot{font-size:32px}}}.ant-empty{padding:48px 0;.ant-empty-image{height:100px}.ant-empty-description{color:#999;font-size:14px}}}.mall-product-form{.ant-card-body{padding:24px}.ant-form-item{margin-bottom:16px}.ant-form-item-label{label{font-weight:500}}.ant-input-number,.ant-select{width:100%}}.mall-order-list{.filter-section{margin-bottom:16px;padding:16px;background:linear-gradient(135deg,#f5f7fa,#f0f2f5);border-radius:8px;box-shadow:0 2px 8px #0000000d}.batch-operation-section{margin-bottom:16px;padding:12px 16px;background:#fafafa;border-radius:4px;display:flex;align-items:center;justify-content:space-between;.selected-info{color:#1890ff;font-size:14px}}.action-section{margin-bottom:16px;padding:12px 0;border-bottom:1px solid #f0f0f0}.ant-table{.ant-table-thead>tr>th{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;font-weight:600;border-bottom:none;&:before{background-color:#ffffff4d}}.ant-table-tbody>tr{&:hover{background:#f5f5f5;cursor:pointer}>td{padding:12px 8px;border-bottom:1px solid #f0f0f0}}}.order-sn{font-family:Courier New,monospace;font-weight:500;color:#1890ff}.order-amount{font-weight:600;color:#595959}.pay-amount{font-weight:700;color:#f5222d;font-size:14px}.ant-tag{border-radius:12px;padding:2px 8px;font-size:12px;font-weight:500}.ant-btn-link{padding:0 4px;height:auto}.ant-modal{.ant-descriptions{.ant-descriptions-item-label{font-weight:600;background:#fafafa}.ant-descriptions-item-content{background:#fff}}}@media (max-width: 768px){.filter-section{.ant-col{margin-bottom:8px}}.batch-operation-section{flex-direction:column;align-items:flex-start;.selected-info{margin-top:8px}}.ant-table{overflow-x:auto;.ant-table-thead>tr>th,.ant-table-tbody>tr>td{white-space:nowrap;font-size:12px;padding:8px 4px}}}.ant-pagination{margin-top:16px;text-align:right;.ant-pagination-item-active{border-color:#1890ff;a{color:#1890ff}}}.ant-spin-nested-loading{.ant-spin{max-height:400px}}.empty-data{padding:40px 0;text-align:center;color:#8c8c8c;.ant-empty-image{height:100px}}.loading-skeleton{.ant-skeleton{padding:16px 0}}}.mall-order-form{.ant-card{border-radius:8px;box-shadow:0 2px 8px #0000001a}.ant-tabs{.ant-tabs-nav{margin-bottom:24px;&:before{border-bottom:2px solid #f0f0f0}.ant-tabs-tab{padding:12px 16px;font-weight:500;transition:all .3s ease;&:hover{color:#1890ff}&.ant-tabs-tab-active{.ant-tabs-tab-btn{color:#1890ff;font-weight:600}}}.ant-tabs-ink-bar{height:3px;background:linear-gradient(90deg,#1890ff,#40a9ff)}}}.ant-form{.ant-form-item{margin-bottom:20px;.ant-form-item-label{label{font-weight:500;color:#262626}}.ant-input,.ant-input-number,.ant-select{border-radius:4px;&:hover{border-color:#40a9ff}&:focus,&.ant-input-focused,&.ant-select-focused{border-color:#1890ff;box-shadow:0 0 0 2px #1890ff33}}.ant-input-textarea-show-count:after{float:right;color:#8c8c8c;font-size:12px}}}.ant-table{.ant-table-thead>tr>th{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;font-weight:600}.ant-table-tbody>tr{&:hover{background:#f5f5f5}>td{padding:12px 8px}}}.ant-divider{margin:24px 0;border-color:#f0f0f0}.ant-space{.ant-btn{min-width:80px;border-radius:4px;font-weight:500;transition:all .3s ease;&:hover{transform:translateY(-1px);box-shadow:0 2px 8px #00000026}&.ant-btn-primary{background:linear-gradient(135deg,#1890ff,#40a9ff);border:none;&:hover{background:linear-gradient(135deg,#40a9ff,#69c0ff)}}}}@media (max-width: 768px){.ant-form{.ant-col{margin-bottom:0}}.ant-tabs{.ant-tabs-nav{.ant-tabs-tab{padding:8px 12px;font-size:14px}}}.ant-table{overflow-x:auto;.ant-table-thead>tr>th,.ant-table-tbody>tr>td{white-space:nowrap;font-size:12px;padding:8px 4px}}}}.mall-coupon-card{.statistics-section{padding:16px;background:#f5f5f5;border-radius:4px;margin-bottom:16px;.stat-item{text-align:center;.stat-value{font-size:24px;font-weight:600;color:#1890ff}.stat-label{font-size:12px;color:#8c8c8c;margin-top:4px}}}.filter-section{margin-bottom:16px;padding:16px;background:#fafafa;border-radius:4px}.action-section{margin-bottom:16px}.coupon-name{font-weight:500;color:#262626}.ant-table{.ant-tag{margin:0}}.ant-badge{.ant-badge-count{font-size:12px;min-width:40px;height:20px;line-height:20px}}}.mall-promotion-card{.statistics-section{padding:16px;background:linear-gradient(135deg,#fff7e6,#fffbe6);border-radius:4px;margin-bottom:16px;.ant-statistic-title{font-size:13px;color:#8c8c8c}.ant-statistic-content{font-size:28px}}.content-section{display:flex;gap:16px;.table-section{flex:1}.timeline-section{width:300px;.ant-card{height:100%}.ant-timeline{padding-top:8px}.ant-timeline-item-content{font-size:13px}}}.filter-section,.action-section{margin-bottom:16px}.promotion-title{font-weight:500;color:#262626}.ant-table{.ant-tag{margin:0}}@media (max-width: 1200px){.content-section{flex-direction:column;.timeline-section{width:100%}}}}.mall-user-card{.statistics-section{padding:16px;background:linear-gradient(135deg,#e6f7ff,#f0f5ff);border-radius:4px;margin-bottom:16px;.stat-item{text-align:center;.stat-value{font-size:24px;font-weight:600;color:#1890ff}.stat-label{font-size:12px;color:#8c8c8c;margin-top:4px}}}.filter-section{margin-bottom:16px;padding:16px;background:#fafafa;border-radius:4px}.action-section{margin-bottom:16px}.user-name{font-weight:500;color:#262626}.user-username{font-size:12px;color:#8c8c8c}.ant-table{.ant-tag{margin:0}}}.mall-role-card{.statistics-section{padding:16px;background:linear-gradient(135deg,#f0f5ff,#f5f0ff);border-radius:4px;margin-bottom:16px;.stat-item{text-align:center;.stat-value{font-size:24px;font-weight:600;color:#722ed1}.stat-label{font-size:12px;color:#8c8c8c;margin-top:4px}}}.content-section{display:flex;gap:16px;.table-section{flex:1}.permission-section{width:280px;.ant-card{height:100%}.ant-tree{font-size:13px}}}.filter-section{margin-bottom:16px;padding:16px;background:#fafafa;border-radius:4px}.action-section{margin-bottom:16px}.role-name{font-weight:500;color:#262626}.ant-table{.ant-tag{margin:0}}@media (max-width: 1200px){.content-section{flex-direction:column;.permission-section{width:100%}}}}.admin-layout{display:flex;height:100vh;width:100%;overflow:hidden;background-color:#f0f2f5;.sidebar-container{width:256px;height:100vh;background:linear-gradient(180deg,#001529,#002140);transition:all .3s cubic-bezier(.4,0,.2,1);overflow-y:auto;overflow-x:hidden;flex-shrink:0;z-index:10;box-shadow:2px 0 8px #00000026;&::-webkit-scrollbar{width:6px}&::-webkit-scrollbar-thumb{background:#fff3;border-radius:3px;&:hover{background:#ffffff4d}}.sidebar-logo{height:64px;display:flex;align-items:center;justify-content:center;padding:16px;border-bottom:1px solid rgba(255,255,255,.1);background:#ffffff05;.logo-text{color:#fff;font-size:20px;font-weight:600;white-space:nowrap;letter-spacing:1px}.logo-icon{color:#fff;font-size:24px;font-weight:700}}.ant-menu{border-right:none!important;background:transparent!important;.ant-menu-item{border-radius:0;height:48px;line-height:48px;padding-left:24px!important;margin:0 0 4px;&:first-child{margin-top:8px}&:hover{background:#ffffff14!important;color:#fff!important}&.ant-menu-item-selected{background:linear-gradient(90deg,#1890ff,#096dd9)!important;color:#fff!important;box-shadow:0 2px 8px #1890ff4d;&:after{display:none}}}.ant-menu-submenu{.ant-menu-submenu-title{height:48px;line-height:48px;padding-left:24px!important;margin:0 0 4px;&:hover{background:#ffffff14!important;color:#fff!important}}&.ant-menu-submenu-selected>.ant-menu-submenu-title{color:#1890ff!important}.ant-menu-sub{background:#0003!important;.ant-menu-item{height:44px;line-height:44px;padding-left:48px!important;&:hover{background:#ffffff0d!important}&.ant-menu-item-selected{background:#1890ff26!important;color:#1890ff!important;box-shadow:none}}}}}&.collapsed{width:80px;.ant-menu-inline-collapsed{width:80px}.sidebar-logo{padding:12px}.ant-menu-item{padding-left:0!important;text-align:center}}}.layout-right{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0;.navbar-container{height:64px;background:#fff;box-shadow:0 2px 8px #0000000f;display:flex;align-items:center;justify-content:space-between;padding:0 24px;z-index:9;flex-shrink:0;.navbar-left{display:flex;align-items:center;gap:16px;.hamburger-btn{width:40px;height:40px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;font-size:18px;color:#000000a6;transition:all .3s;&:hover{background:#1890ff14;color:#1890ff}}}.navbar-right{.user-info{cursor:pointer;display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:8px;transition:all .3s;&:hover{background:#0000000a}.user-avatar{background:linear-gradient(135deg,#1890ff,#096dd9)}.username{color:#000000d9;font-size:14px;font-weight:500}}}}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden;background:#f0f2f5;.tab-bar-container{background:#fff;display:flex;align-items:center;border-bottom:1px solid #e8e8e8;padding:0 16px;height:44px;flex-shrink:0;box-shadow:0 1px 4px #0000000a;.tab-bar-scroll{flex:1;overflow-x:auto;overflow-y:hidden;white-space:nowrap;display:flex;align-items:center;gap:8px;scrollbar-width:thin;&::-webkit-scrollbar{height:4px}&::-webkit-scrollbar-thumb{background:#00000026;border-radius:2px}.tab-item{display:inline-flex;align-items:center;gap:8px;padding:8px 16px;cursor:pointer;border-radius:4px 4px 0 0;position:relative;transition:all .25s cubic-bezier(.4,0,.2,1);user-select:none;height:36px;font-size:13px;color:#000000a6;background:transparent;border:1px solid transparent;border-bottom:none;margin-bottom:-1px;.tab-icon{display:flex;align-items:center;font-size:14px}.tab-label{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tab-close-btn{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;opacity:0;transition:all .2s;margin-left:4px;&.visible{opacity:1}&:hover{background:#00000026;color:#fff}}&:hover{color:#1890ff;background:#1890ff0f;.tab-close-btn{opacity:1}}&.active{color:#1890ff;background:#fff;border-color:#e8e8e8;font-weight:500;.tab-close-btn{opacity:1}&:after{content:"";position:absolute;bottom:-1px;left:0;right:0;height:2px;background:linear-gradient(90deg,#1890ff,#096dd9)}}}}.tab-actions{margin-left:8px;padding-left:12px;border-left:1px solid #e8e8e8;.close-all-btn{width:32px;height:32px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;color:#00000073;transition:all .2s;&:hover{background:#ff4d4f14;color:#ff4d4f}}}}.content-wrapper{flex:1;overflow:auto;background:#f0f2f5;padding:24px;.page-container{min-height:100%;background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000000f;animation:fadeIn .3s ease-in-out}}}}.mobile-overlay{display:none}&.is-collapse{.sidebar-container{width:80px}}}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.admin-layout{.sidebar-container{position:fixed;left:0;top:0;z-index:1000;transform:translate(-100%);transition:transform .3s;&.collapsed{transform:translate(-100%);width:256px}}.mobile-overlay{display:block;position:fixed;inset:0;background:#00000073;z-index:999;opacity:0;visibility:hidden;transition:all .3s;&.visible{opacity:1;visibility:visible}}&:not(.is-collapse){.sidebar-container{transform:translate(0)}.mobile-overlay.visible{opacity:1;visibility:visible}}}}