n20-common-lib 3.1.4 → 3.1.5

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.
@@ -0,0 +1,1330 @@
1
+ .n20-pivot-dialog {
2
+ .el-dialog {
3
+ box-sizing: border-box;
4
+ margin-top: 3vh !important;
5
+ max-height: 95vh;
6
+ height: 95vh;
7
+ display: flex;
8
+ margin: 0 auto;
9
+ flex-direction: column;
10
+ .el-dialog__body {
11
+ padding: 0;
12
+ flex: 1;
13
+ min-height: 0;
14
+ overflow: hidden;
15
+ display: flex;
16
+ flex-direction: column;
17
+ }
18
+ }
19
+ }
20
+
21
+ .n20-pivot-container {
22
+ display: flex;
23
+ background: #fff;
24
+ height: 100%;
25
+ border-radius: 8px;
26
+ overflow: hidden;
27
+ font-family: 'PingFang SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
28
+ position: relative;
29
+ flex: 1;
30
+ min-height: 0;
31
+ }
32
+
33
+ /* 左侧边栏 */
34
+ .pivot-sidebar-left {
35
+ width: 280px;
36
+ background: #f2f3f5;
37
+ border-right: 1px solid #e5e6eb;
38
+ display: flex;
39
+ flex-direction: column;
40
+ position: relative;
41
+ transition: width 0.3s ease;
42
+
43
+ &.collapsed {
44
+ width: 8px;
45
+
46
+ .sidebar-header,
47
+ .report-list {
48
+ opacity: 0;
49
+ pointer-events: none;
50
+ }
51
+ }
52
+
53
+ .sidebar-header {
54
+ height: 48px;
55
+ padding: 0 16px;
56
+ display: flex;
57
+ align-items: center;
58
+ justify-content: space-between;
59
+ border-bottom: 1px solid #e5e6eb;
60
+ background: #f2f3f5;
61
+ }
62
+
63
+ .sidebar-title {
64
+ color: var(--text-2, #4e5969);
65
+ font-family: 'PingFang SC';
66
+ font-size: 13px;
67
+ font-style: normal;
68
+ font-weight: 400;
69
+ line-height: 22px;
70
+ }
71
+ }
72
+
73
+ .add-report-btn {
74
+ padding: 9px;
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+ border-radius: 4px;
79
+ border: 1px solid var(--border-2, #e5e6eb);
80
+ background: var(--bg-white, #fff);
81
+ cursor: pointer;
82
+ color: var(--text-primary, #4e5969);
83
+ transition: all 0.2s;
84
+
85
+ i {
86
+ font-size: 14px;
87
+ line-height: 14px;
88
+ }
89
+
90
+ &:hover {
91
+ background: #fff;
92
+ color: #007aff;
93
+ }
94
+ }
95
+
96
+ .report-list {
97
+ flex: 1;
98
+ overflow-y: auto;
99
+ padding: 8px;
100
+ display: flex;
101
+ flex-direction: column;
102
+ gap: 4px;
103
+ }
104
+
105
+ .report-item {
106
+ display: flex;
107
+ align-items: center;
108
+ padding: 7px 8px;
109
+ border-radius: 4px;
110
+ cursor: pointer;
111
+ transition: all 0.2s;
112
+
113
+ &:hover {
114
+ background: rgba(0, 0, 0, 0.04);
115
+ }
116
+
117
+ &.active {
118
+ border-radius: 4px;
119
+ background: var(--bg-white, #fff);
120
+
121
+ &:hover {
122
+ background: var(--bg-white, #fff);
123
+ }
124
+
125
+ .report-icon {
126
+ color: #007aff;
127
+ }
128
+
129
+ .report-name {
130
+ color: #007aff;
131
+ font-weight: 500;
132
+ }
133
+ }
134
+
135
+ &.editing {
136
+ background: var(--bg-white, #fff);
137
+ }
138
+ }
139
+
140
+ .report-name-input {
141
+ flex: 1;
142
+ height: 24px;
143
+ padding: 0 8px;
144
+ border: 1px solid #007aff;
145
+ border-radius: 2px;
146
+ font-size: 14px;
147
+ color: #1d2129;
148
+ outline: none;
149
+ }
150
+
151
+ .report-more {
152
+ display: none;
153
+ align-items: center;
154
+ justify-content: center;
155
+ width: 24px;
156
+ height: 24px;
157
+ margin-left: 4px;
158
+ border-radius: 4px;
159
+ cursor: pointer;
160
+ color: #86909c;
161
+ position: relative;
162
+
163
+ &.visible {
164
+ display: flex;
165
+ }
166
+
167
+ &:hover {
168
+ background: rgba(0, 0, 0, 0.04);
169
+ color: #4e5969;
170
+ }
171
+ }
172
+
173
+ .report-menu {
174
+ position: absolute;
175
+ top: 100%;
176
+ right: 0;
177
+ margin-top: 4px;
178
+ background: #fff;
179
+ border: 1px solid #e5e6eb;
180
+ border-radius: 4px;
181
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
182
+ z-index: 100;
183
+ min-width: 100px;
184
+ padding: 4px 0;
185
+ }
186
+
187
+ .report-menu-item {
188
+ display: flex;
189
+ align-items: center;
190
+ gap: 8px;
191
+ padding: 8px 12px;
192
+ font-size: 14px;
193
+ color: #1d2129;
194
+ cursor: pointer;
195
+ transition: background 0.2s;
196
+ white-space: nowrap;
197
+
198
+ &:hover {
199
+ background: #f7f8fa;
200
+ }
201
+
202
+ &.delete {
203
+ color: #f53f3f;
204
+
205
+ &:hover {
206
+ background: #fff2f0;
207
+ }
208
+ }
209
+ }
210
+
211
+ .report-icon {
212
+ width: 16px;
213
+ height: 16px;
214
+ margin-right: 8px;
215
+ color: #4e5969;
216
+ }
217
+
218
+ .report-name {
219
+ font-size: 14px;
220
+ color: #1d2129;
221
+ flex: 1;
222
+ overflow: hidden;
223
+ text-overflow: ellipsis;
224
+ white-space: nowrap;
225
+ }
226
+
227
+ .scroll-bar-indicator {
228
+ position: absolute;
229
+ right: -8px;
230
+ top: 50%;
231
+ transform: translateY(-50%);
232
+ width: 16px;
233
+ height: 80px;
234
+ display: flex;
235
+ align-items: center;
236
+ justify-content: center;
237
+ border-radius: 8px;
238
+ border: 1px solid var(--border-2, #e5e6eb);
239
+ background: var(--bg-white, #fff);
240
+ color: #4e5969;
241
+ cursor: pointer;
242
+
243
+ &:hover {
244
+ color: #007aff;
245
+ }
246
+
247
+ &.right-indicator {
248
+ right: auto;
249
+ left: -8px;
250
+
251
+ &.collapsed {
252
+ left: -8px;
253
+ }
254
+ }
255
+ }
256
+
257
+ /* 主内容区域 */
258
+ .pivot-main {
259
+ flex: 1;
260
+ display: flex;
261
+ flex-direction: column;
262
+ position: relative;
263
+ padding: 16px;
264
+ gap: 16px;
265
+ transition: margin-left 0.3s ease, margin-right 0.3s ease;
266
+
267
+ &.left-collapsed {
268
+ margin-left: 8px;
269
+ }
270
+
271
+ &.right-collapsed {
272
+ margin-right: 8px;
273
+ }
274
+ }
275
+
276
+ .main-toolbar {
277
+ display: flex;
278
+ align-items: center;
279
+ justify-content: space-between;
280
+ padding: 0 0;
281
+ height: 56px;
282
+ box-sizing: border-box;
283
+ }
284
+
285
+ .toolbar-left {
286
+ display: flex;
287
+ flex-direction: column;
288
+ gap: 4px;
289
+ flex: 1;
290
+ }
291
+
292
+ .toolbar-left-top {
293
+ display: flex;
294
+ align-items: center;
295
+ gap: 8px;
296
+ }
297
+
298
+ .report-title {
299
+ color: var(--text-1, #1d2129);
300
+ font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;
301
+ font-size: 18px;
302
+ font-style: normal;
303
+ font-weight: 500;
304
+ line-height: 26px;
305
+ margin: 0;
306
+ }
307
+
308
+ .add-to-home-btn {
309
+ display: inline-flex;
310
+ align-items: center;
311
+ gap: 4px;
312
+ padding: 4px 8px;
313
+ border-radius: 2px;
314
+ cursor: pointer;
315
+ color: var(--primary-6, #007aff);
316
+ font-size: 14px;
317
+ font-weight: 400;
318
+ line-height: 22px;
319
+ transition: all 0.2s;
320
+ border: 1px solid transparent;
321
+
322
+ svg {
323
+ width: 14px;
324
+ height: 14px;
325
+ flex-shrink: 0;
326
+ }
327
+
328
+ &:hover {
329
+ background: rgba(0, 122, 255, 0.08);
330
+ }
331
+ }
332
+
333
+ .report-stats {
334
+ display: flex;
335
+ align-items: center;
336
+ gap: 8px;
337
+ }
338
+
339
+ .stat-item {
340
+ font-size: 12px;
341
+ color: var(--text-2, #4e5969);
342
+ font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;
343
+ line-height: 20px;
344
+ }
345
+
346
+ .stat-divider {
347
+ width: 1px;
348
+ height: 12px;
349
+ background: var(--border-2, #e5e6eb);
350
+ }
351
+
352
+ .toolbar-right {
353
+ display: flex;
354
+ align-items: center;
355
+ gap: 8px;
356
+ height: 100%;
357
+ padding-right: 0;
358
+ }
359
+
360
+ .toolbar-divider {
361
+ width: 0;
362
+ height: 12px;
363
+ border-left: 1px solid #e5e6eb;
364
+ }
365
+
366
+ .action-buttons {
367
+ display: flex;
368
+ gap: 8px;
369
+ height: 100%;
370
+ align-items: center;
371
+ }
372
+
373
+ .action-btn {
374
+ width: 32px;
375
+ height: 32px;
376
+ display: flex;
377
+ align-items: center;
378
+ justify-content: center;
379
+ background: var(--bg-white, #fff);
380
+ border: 1px solid var(--border-2, #e5e6eb);
381
+ border-radius: 4px;
382
+ cursor: pointer;
383
+ color: var(--text-2, #4e5969);
384
+ transition: all 0.2s;
385
+ padding: 9px;
386
+ box-sizing: border-box;
387
+
388
+ &:hover {
389
+ color: var(--primary-6, #007aff);
390
+ border-color: var(--primary-6, #007aff);
391
+ }
392
+
393
+ i {
394
+ font-size: 14px;
395
+ line-height: 1;
396
+ }
397
+ }
398
+
399
+ /* 更多按钮下拉菜单 */
400
+ .more-btn {
401
+ position: relative;
402
+
403
+ &.active {
404
+ background: var(--fill-1, #f7f8fa);
405
+ border-color: var(--primary-6, #007aff);
406
+ }
407
+ }
408
+
409
+ .more-dropdown-menu {
410
+ position: absolute;
411
+ top: 100%;
412
+ right: 0;
413
+ margin-top: 4px;
414
+ background: var(--bg-white, #fff);
415
+ border: 1px solid var(--border-2, #e5e6eb);
416
+ border-radius: 4px;
417
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
418
+ z-index: 1000;
419
+ min-width: 160px;
420
+ padding: 8px;
421
+ display: flex;
422
+ flex-direction: column;
423
+ gap: 4px;
424
+ }
425
+
426
+ .dropdown-menu-item {
427
+ display: flex;
428
+ align-items: center;
429
+ gap: 8px;
430
+ padding: 7px 8px;
431
+ border-radius: 2px;
432
+ cursor: pointer;
433
+ transition: background 0.2s;
434
+ font-size: 14px;
435
+ color: var(--text-1, #1d2129);
436
+ line-height: 22px;
437
+
438
+ &:hover {
439
+ background: var(--fill-1, #f7f8fa);
440
+ }
441
+
442
+ i {
443
+ font-size: 16px;
444
+ width: 16px;
445
+ height: 16px;
446
+ display: flex;
447
+ align-items: center;
448
+ justify-content: center;
449
+ color: var(--text-2, #4e5969);
450
+ }
451
+
452
+ &:hover i {
453
+ color: var(--text-1, #1d2129);
454
+ }
455
+
456
+ &.danger {
457
+ color: var(--danger-6, #ff3b30);
458
+
459
+ i {
460
+ color: var(--danger-6, #ff3b30);
461
+ }
462
+ }
463
+ }
464
+
465
+ .dropdown-divider {
466
+ height: 1px;
467
+ background: var(--border-2, #e5e6eb);
468
+ margin: 4px 0;
469
+ }
470
+
471
+ /* 主内容 */
472
+ .main-content {
473
+ flex: 1;
474
+ overflow: hidden;
475
+ border: 1px solid #e5e6eb;
476
+ border-radius: 4px;
477
+ display: flex;
478
+ flex-direction: column;
479
+ overflow-y: auto;
480
+ }
481
+
482
+ .chart-view,
483
+ .table-view {
484
+ width: 100%;
485
+ height: 100%;
486
+ position: relative;
487
+ }
488
+
489
+ .chart-wrapper {
490
+ width: 100%;
491
+ height: 100%;
492
+ position: relative;
493
+ display: flex;
494
+ flex-direction: column;
495
+ padding: 16px;
496
+ }
497
+
498
+ .chart-header {
499
+ margin-bottom: 16px;
500
+ }
501
+
502
+ .chart-title {
503
+ font-size: 16px;
504
+ font-weight: 500;
505
+ color: #1d2129;
506
+ font-family: 'PingFang SC', sans-serif;
507
+ margin-bottom: 4px;
508
+ }
509
+
510
+ .chart-desc {
511
+ font-size: 12px;
512
+ color: #86909c;
513
+ font-family: 'PingFang SC', sans-serif;
514
+ }
515
+
516
+ .chart-unit-label {
517
+ font-size: 12px;
518
+ color: #86909c;
519
+ font-family: 'PingFang SC', sans-serif;
520
+ line-height: 20px;
521
+ padding-bottom: 8px;
522
+ flex-shrink: 0;
523
+ }
524
+
525
+ .chart-container {
526
+ width: 100%;
527
+ flex: 1;
528
+ min-height: 0;
529
+ }
530
+
531
+ .table-container {
532
+ width: 100%;
533
+ height: 100%;
534
+ overflow: auto;
535
+ }
536
+
537
+ .pivot-table {
538
+ width: 100%;
539
+ min-width: 769px;
540
+ border-collapse: collapse;
541
+ table-layout: fixed;
542
+ font-size: 14px;
543
+
544
+ th,
545
+ td {
546
+ padding: 10px 16px;
547
+ border-right: 1px solid #e5e6eb;
548
+ border-bottom: 1px solid #e5e6eb;
549
+ height: 57px;
550
+ box-sizing: border-box;
551
+ }
552
+
553
+ th {
554
+ background: #f2f3f5;
555
+ font-weight: 500;
556
+ color: #1d2129;
557
+ position: sticky;
558
+ top: 0;
559
+ z-index: 1;
560
+ text-align: left;
561
+ height: 40px;
562
+ }
563
+
564
+ th.metric-header {
565
+ text-align: right;
566
+ }
567
+
568
+ td.dimension-cell {
569
+ text-align: left;
570
+ color: #1d2129;
571
+ vertical-align: middle;
572
+ }
573
+
574
+ td.metric-cell {
575
+ text-align: right;
576
+ vertical-align: middle;
577
+
578
+ .cell-content {
579
+ display: flex;
580
+ flex-direction: column;
581
+ align-items: flex-end;
582
+ justify-content: center;
583
+ height: 100%;
584
+ }
585
+
586
+ .cell-value {
587
+ font-family: 'Open Sans', sans-serif;
588
+ font-size: 14px;
589
+ line-height: 22px;
590
+ color: #1d2129;
591
+ }
592
+
593
+ .cell-count {
594
+ font-family: 'PingFang SC', sans-serif;
595
+ font-size: 12px;
596
+ line-height: 20px;
597
+ color: #86909c;
598
+ }
599
+ }
600
+
601
+ tbody tr:hover {
602
+ background: #f7f8fa;
603
+ }
604
+ }
605
+
606
+ .empty-state {
607
+ width: 100%;
608
+ height: 100%;
609
+ display: flex;
610
+ flex-direction: column;
611
+ align-items: center;
612
+ justify-content: center;
613
+ }
614
+
615
+ /* 右侧边栏 */
616
+ .pivot-sidebar-right {
617
+ width: 280px;
618
+ background: #fff;
619
+ border-left: 1px solid #e5e6eb;
620
+ display: flex;
621
+ flex-direction: column;
622
+ transition: width 0.3s ease;
623
+
624
+ &.collapsed {
625
+ width: 8px;
626
+
627
+ .sidebar-header,
628
+ .config-form {
629
+ opacity: 0;
630
+ pointer-events: none;
631
+ }
632
+
633
+ .scroll-bar-indicator {
634
+ opacity: 1;
635
+ pointer-events: auto;
636
+ }
637
+ }
638
+
639
+ .sidebar-header {
640
+ height: 48px;
641
+ padding: 0 16px;
642
+ display: flex;
643
+ align-items: center;
644
+ gap: 8px;
645
+ border-bottom: 1px solid #e5e6eb;
646
+ white-space: nowrap;
647
+ }
648
+
649
+ .sidebar-title {
650
+ color: var(--text-1, #1d2129);
651
+ font-family: 'PingFang SC';
652
+ font-size: 14px;
653
+ font-style: normal;
654
+ font-weight: 500;
655
+ line-height: 22px;
656
+ }
657
+
658
+ .sidebar-header-collapse {
659
+ font-size: 14px;
660
+ color: #86909c;
661
+ cursor: pointer;
662
+ transition: color 0.2s;
663
+
664
+ &:hover {
665
+ color: #1d2129;
666
+ }
667
+ }
668
+ }
669
+
670
+ .config-form {
671
+ flex: 1;
672
+ padding: 0 16px;
673
+ overflow-y: auto;
674
+
675
+ .form-item:first-child {
676
+ margin-top: 16px;
677
+ }
678
+ }
679
+
680
+ .form-item {
681
+ margin-bottom: 16px;
682
+ position: relative;
683
+ }
684
+
685
+ .form-divider {
686
+ height: 1px;
687
+ background-color: #e5e6eb;
688
+ margin: 16px 0;
689
+ }
690
+
691
+ .form-label {
692
+ display: flex;
693
+ align-items: center;
694
+ gap: 4px;
695
+ font-size: 14px;
696
+ color: #4e5969;
697
+ margin-bottom: 8px;
698
+ line-height: 22px;
699
+
700
+ .v3-icon-help {
701
+ font-size: 14px;
702
+ color: #86909c;
703
+ cursor: pointer;
704
+ transition: color 0.2s;
705
+
706
+ &:hover {
707
+ color: #4e5969;
708
+ }
709
+ }
710
+ }
711
+
712
+ .label-tip {
713
+ color: #86909c;
714
+ }
715
+
716
+ .form-label-row {
717
+ display: flex;
718
+ align-items: center;
719
+ justify-content: space-between;
720
+ margin-bottom: 8px;
721
+
722
+ .form-label {
723
+ margin-bottom: 0;
724
+ }
725
+ }
726
+
727
+ .form-label-group {
728
+ display: flex;
729
+ align-items: center;
730
+ gap: 4px;
731
+
732
+ .v3-icon-question-circle {
733
+ width: 14px;
734
+ height: 14px;
735
+ color: #86909c;
736
+ cursor: pointer;
737
+
738
+ &:hover {
739
+ color: #4e5969;
740
+ }
741
+ }
742
+ }
743
+
744
+ /* 单选组 */
745
+ .radio-group {
746
+ display: flex;
747
+ background: #f2f3f5;
748
+ border-radius: 4px;
749
+ padding: 3px;
750
+ gap: 0;
751
+ }
752
+
753
+ /* 选择框 */
754
+ .select-wrapper {
755
+ position: relative;
756
+ display: flex;
757
+ align-items: center;
758
+ gap: 4px;
759
+ padding: 4px 12px;
760
+ background: #fff;
761
+ border: 1px solid #e5e6eb;
762
+ border-radius: 4px;
763
+ cursor: pointer;
764
+ transition: border-color 0.2s;
765
+
766
+ &:hover,
767
+ &.active {
768
+ border-color: #007aff;
769
+ }
770
+ }
771
+
772
+ .select-value {
773
+ flex: 1;
774
+ display: flex;
775
+ align-items: center;
776
+ gap: 8px;
777
+ font-size: 14px;
778
+ color: #1d2129;
779
+
780
+ .report-icon {
781
+ width: 16px;
782
+ height: 16px;
783
+ font-size: 16px;
784
+ line-height: 16px;
785
+ display: inline-flex;
786
+ align-items: center;
787
+ justify-content: center;
788
+ margin-right: 0;
789
+ color: #007aff;
790
+ }
791
+
792
+ .placeholder {
793
+ color: #86909c;
794
+ }
795
+ }
796
+
797
+ .select-arrow {
798
+ color: #4e5969;
799
+ transition: transform 0.2s;
800
+
801
+ .select-wrapper.active & {
802
+ transform: rotate(180deg);
803
+ }
804
+ }
805
+
806
+ /* 指标行列表 */
807
+ .metric-rows {
808
+ display: flex;
809
+ flex-direction: column;
810
+ gap: 8px;
811
+ margin-bottom: 8px;
812
+ }
813
+
814
+ .metric-row {
815
+ display: flex;
816
+ align-items: center;
817
+ gap: 8px;
818
+ position: relative;
819
+
820
+ &.active .metric-select-box {
821
+ border-color: #007aff;
822
+ }
823
+ }
824
+
825
+ .metric-select-box {
826
+ flex: 1;
827
+ display: flex;
828
+ align-items: center;
829
+ gap: 4px;
830
+ padding: 4px 12px;
831
+ background: #fff;
832
+ border: 1px solid #e5e6eb;
833
+ border-radius: 4px;
834
+ cursor: default;
835
+ transition: border-color 0.2s;
836
+
837
+ &:hover {
838
+ border-color: #007aff;
839
+ }
840
+ }
841
+
842
+ .metric-select-value {
843
+ flex: 1;
844
+ font-size: 14px;
845
+ color: #1d2129;
846
+ overflow: hidden;
847
+ text-overflow: ellipsis;
848
+ white-space: nowrap;
849
+ }
850
+
851
+ .metric-select-tag {
852
+ padding: 2px 8px;
853
+ background: rgba(78, 89, 105, 0.08);
854
+ border-radius: 2px;
855
+ font-size: 12px;
856
+ color: #4e5969;
857
+ cursor: pointer;
858
+ white-space: nowrap;
859
+ transition: background 0.2s;
860
+
861
+ &:hover {
862
+ background: rgba(78, 89, 105, 0.15);
863
+ }
864
+ }
865
+
866
+ .metric-delete-btn {
867
+ width: 14px;
868
+ height: 14px;
869
+ display: flex;
870
+ align-items: center;
871
+ justify-content: center;
872
+ color: #86909c;
873
+ cursor: pointer;
874
+ transition: color 0.2s;
875
+ flex-shrink: 0;
876
+
877
+ &:hover {
878
+ color: #f53f3f;
879
+ }
880
+ }
881
+
882
+ /* 下拉菜单 */
883
+ .dropdown-menu {
884
+ position: absolute;
885
+ top: 100%;
886
+ left: 0;
887
+ right: 0;
888
+ margin-top: 4px;
889
+ background: #fff;
890
+ border: 1px solid #e5e6eb;
891
+ border-radius: 4px;
892
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
893
+ z-index: 100;
894
+ max-height: 200px;
895
+ overflow-y: auto;
896
+ }
897
+
898
+ .dropdown-item {
899
+ padding: 8px 12px;
900
+ font-size: 14px;
901
+ color: #1d2129;
902
+ cursor: pointer;
903
+ transition: background 0.2s;
904
+
905
+ &:hover {
906
+ background: #f7f8fa;
907
+ }
908
+
909
+ &.active {
910
+ color: #007aff;
911
+ }
912
+
913
+ &.disabled {
914
+ color: #86909c;
915
+ cursor: not-allowed;
916
+ }
917
+ }
918
+
919
+ .chart-type-dropdown {
920
+ left: auto;
921
+ right: 0;
922
+ min-width: 248px;
923
+ padding: 8px;
924
+ }
925
+
926
+ .chart-type-item {
927
+ display: flex;
928
+ align-items: center;
929
+ gap: 8px;
930
+ padding: 8px;
931
+ border-radius: 2px;
932
+
933
+ .report-icon {
934
+ width: 16px;
935
+ height: 16px;
936
+ font-size: 16px;
937
+ line-height: 16px;
938
+ display: inline-flex;
939
+ align-items: center;
940
+ justify-content: center;
941
+ margin-right: 0;
942
+ color: #4e5969;
943
+ }
944
+
945
+ &.active .report-icon {
946
+ color: #007aff;
947
+ }
948
+ }
949
+
950
+ .checkbox-item {
951
+ display: flex;
952
+ align-items: center;
953
+ gap: 8px;
954
+ }
955
+
956
+ .checkbox {
957
+ width: 16px;
958
+ height: 16px;
959
+ border: 1px solid #e5e6eb;
960
+ border-radius: 2px;
961
+ display: flex;
962
+ align-items: center;
963
+ justify-content: center;
964
+ transition: all 0.2s;
965
+
966
+ &.checked {
967
+ background: #007aff;
968
+ border-color: #007aff;
969
+ color: #fff;
970
+ }
971
+ }
972
+
973
+ /* 聚合类型下拉 */
974
+ .aggregate-dropdown {
975
+ position: relative;
976
+ display: flex;
977
+ align-items: center;
978
+ gap: 4px;
979
+ padding: 4px 8px;
980
+ border-radius: 2px;
981
+ cursor: pointer;
982
+ color: #007aff;
983
+ font-size: 12px;
984
+ transition: background 0.2s;
985
+
986
+ &:hover {
987
+ background: rgba(0, 122, 255, 0.08);
988
+ }
989
+ }
990
+
991
+ .aggregate-dropdown-menu {
992
+ right: 0;
993
+ left: auto;
994
+ min-width: 80px;
995
+ }
996
+
997
+ /* 单个指标聚合类型下拉 */
998
+ .metric-aggregate-dropdown {
999
+ right: 34px;
1000
+ left: auto;
1001
+ top: 100%;
1002
+ width: 96px;
1003
+ padding: 8px;
1004
+ }
1005
+
1006
+ /* 添加字段按钮 */
1007
+ .add-field-btn {
1008
+ position: relative;
1009
+ display: inline-flex;
1010
+ align-items: center;
1011
+ gap: 4px;
1012
+ margin-top: 8px;
1013
+ padding: 4px 8px;
1014
+ font-size: 14px;
1015
+ color: #5db6ff;
1016
+ cursor: pointer;
1017
+ border-radius: 2px;
1018
+ transition: background 0.2s;
1019
+
1020
+ svg {
1021
+ width: 14px;
1022
+ height: 14px;
1023
+ }
1024
+
1025
+ &:hover {
1026
+ background: rgba(0, 122, 255, 0.08);
1027
+ }
1028
+ }
1029
+
1030
+ /* 添加字段下拉 - 相对于按钮定位 */
1031
+ .metric-add-dropdown {
1032
+ position: absolute;
1033
+ top: 100%;
1034
+ left: 0;
1035
+ margin-top: 4px;
1036
+ z-index: 101;
1037
+ min-width: 120px;
1038
+ }
1039
+
1040
+ /* 滚动条样式 */
1041
+ .n20-pivot-container,
1042
+ .pivot-sidebar-left,
1043
+ .pivot-sidebar-right,
1044
+ .config-form,
1045
+ .dropdown-menu {
1046
+ &::-webkit-scrollbar {
1047
+ width: 6px;
1048
+ height: 6px;
1049
+ }
1050
+
1051
+ &::-webkit-scrollbar-thumb {
1052
+ background: #c9cdd4;
1053
+ border-radius: 3px;
1054
+ }
1055
+
1056
+ &::-webkit-scrollbar-track {
1057
+ background: transparent;
1058
+ }
1059
+
1060
+ &::-webkit-scrollbar-thumb:hover {
1061
+ background: #a1a7b3;
1062
+ }
1063
+ }
1064
+
1065
+ /* 表格容器 */
1066
+ .table-wrapper {
1067
+ display: flex;
1068
+ flex-direction: column;
1069
+ height: 100%;
1070
+ }
1071
+
1072
+ .table-header {
1073
+ padding: 16px;
1074
+ border-bottom: 1px solid #e5e6eb;
1075
+ }
1076
+
1077
+ .table-title {
1078
+ font-size: 16px;
1079
+ font-weight: 500;
1080
+ color: #1d2129;
1081
+ font-family: 'PingFang SC', sans-serif;
1082
+ margin-bottom: 4px;
1083
+ }
1084
+
1085
+ .table-desc {
1086
+ font-size: 12px;
1087
+ color: #86909c;
1088
+ font-family: 'PingFang SC', sans-serif;
1089
+ }
1090
+
1091
+ /* 交叉统计表格样式 */
1092
+ .cross-table-container {
1093
+ flex: 1;
1094
+ overflow: auto;
1095
+ }
1096
+
1097
+ .cross-pivot-table {
1098
+ width: 100%;
1099
+ min-width: 100%;
1100
+ border-collapse: collapse;
1101
+ table-layout: fixed;
1102
+ }
1103
+
1104
+ .cross-header-row th {
1105
+ background: #f2f3f5;
1106
+ border-right: 1px solid #e5e6eb;
1107
+ border-bottom: 1px solid #e5e6eb;
1108
+ padding: 9px 16px;
1109
+ font-size: 14px;
1110
+ font-weight: 500;
1111
+ color: #1d2129;
1112
+ text-align: center;
1113
+ height: 40px;
1114
+ box-sizing: border-box;
1115
+ }
1116
+
1117
+ .cross-dimension-header {
1118
+ width: 177px;
1119
+ min-width: 177px;
1120
+ text-align: left !important;
1121
+ }
1122
+
1123
+ .cross-metric-header {
1124
+ width: 148px;
1125
+ min-width: 148px;
1126
+ text-align: right !important;
1127
+ }
1128
+
1129
+ .cross-data-row td {
1130
+ padding: 10px 16px;
1131
+ border-right: 1px solid #e5e6eb;
1132
+ border-bottom: 1px solid #e5e6eb;
1133
+ font-size: 14px;
1134
+ color: #1d2129;
1135
+ vertical-align: middle;
1136
+ height: 57px;
1137
+ box-sizing: border-box;
1138
+ }
1139
+
1140
+ .cross-dimension-cell {
1141
+ background: #fff;
1142
+ text-align: left !important;
1143
+ width: 177px;
1144
+ min-width: 177px;
1145
+ }
1146
+
1147
+ .cross-metric-cell {
1148
+ background: #fff;
1149
+ text-align: right !important;
1150
+ width: 148px;
1151
+ min-width: 148px;
1152
+ }
1153
+
1154
+ .cross-metric-value {
1155
+ display: block;
1156
+ font-family: 'Open Sans', sans-serif;
1157
+ font-size: 14px;
1158
+ font-weight: 400;
1159
+ color: #1d2129;
1160
+ line-height: 22px;
1161
+ }
1162
+
1163
+ .cross-metric-count {
1164
+ display: block;
1165
+ font-family: 'PingFang SC', sans-serif;
1166
+ font-size: 12px;
1167
+ color: #86909c;
1168
+ line-height: 20px;
1169
+ }
1170
+
1171
+ .cross-data-row:hover td {
1172
+ background: #f7f8fa;
1173
+ }
1174
+
1175
+ /* 分页组件 */
1176
+ .cross-pagination {
1177
+ display: flex;
1178
+ align-items: center;
1179
+ justify-content: flex-end;
1180
+ gap: 12px;
1181
+ padding: 8px 16px;
1182
+ border: 1px solid #e5e6eb;
1183
+ background: #fff;
1184
+ height: 46px;
1185
+ flex-shrink: 0;
1186
+ }
1187
+
1188
+ .pagination-info {
1189
+ font-size: 14px;
1190
+ color: #1d2129;
1191
+ margin-right: 8px;
1192
+ }
1193
+
1194
+ .pagination-controls {
1195
+ display: flex;
1196
+ align-items: center;
1197
+ gap: 4px;
1198
+ }
1199
+
1200
+ .pagination-btn {
1201
+ width: 28px;
1202
+ height: 28px;
1203
+ display: flex;
1204
+ align-items: center;
1205
+ justify-content: center;
1206
+ border-radius: 2px;
1207
+ cursor: pointer;
1208
+ color: #4e5969;
1209
+ transition: all 0.2s;
1210
+
1211
+ i {
1212
+ font-size: 12px;
1213
+ }
1214
+
1215
+ &:hover:not(.disabled) {
1216
+ background: #f7f8fa;
1217
+ color: #007aff;
1218
+ }
1219
+
1220
+ &.disabled {
1221
+ color: #86909c;
1222
+ cursor: not-allowed;
1223
+ }
1224
+ }
1225
+
1226
+ .pagination-current {
1227
+ min-width: 24px;
1228
+ height: 24px;
1229
+ display: flex;
1230
+ align-items: center;
1231
+ justify-content: center;
1232
+ background: #e8f7ff;
1233
+ border-radius: 2px;
1234
+ font-size: 14px;
1235
+ font-weight: 600;
1236
+ color: #007aff;
1237
+ }
1238
+
1239
+ .pagination-separator,
1240
+ .pagination-total {
1241
+ font-size: 14px;
1242
+ color: #1d2129;
1243
+ }
1244
+
1245
+ .pagination-size-select {
1246
+ position: relative;
1247
+ display: flex;
1248
+ align-items: center;
1249
+ gap: 4px;
1250
+ padding: 4px 12px;
1251
+ background: #fff;
1252
+ border: 1px solid #e5e6eb;
1253
+ border-radius: 4px;
1254
+ font-size: 14px;
1255
+ color: #1d2129;
1256
+ cursor: pointer;
1257
+ transition: border-color 0.2s;
1258
+
1259
+ i {
1260
+ font-size: 12px;
1261
+ color: #4e5969;
1262
+ }
1263
+
1264
+ &:hover {
1265
+ border-color: #007aff;
1266
+ }
1267
+ }
1268
+
1269
+ .pagination-size-dropdown {
1270
+ position: absolute;
1271
+ top: 100%;
1272
+ right: 0;
1273
+ margin-top: 4px;
1274
+ background: #fff;
1275
+ border: 1px solid #e5e6eb;
1276
+ border-radius: 4px;
1277
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
1278
+ z-index: 100;
1279
+ min-width: 100%;
1280
+ }
1281
+
1282
+ .pagination-size-option {
1283
+ padding: 8px 12px;
1284
+ font-size: 14px;
1285
+ color: #1d2129;
1286
+ white-space: nowrap;
1287
+ transition: background 0.2s;
1288
+
1289
+ &:hover {
1290
+ background: #f7f8fa;
1291
+ }
1292
+
1293
+ &.active {
1294
+ color: #007aff;
1295
+ }
1296
+ }
1297
+
1298
+ .pagination-jump {
1299
+ display: flex;
1300
+ align-items: center;
1301
+ gap: 8px;
1302
+ }
1303
+
1304
+ .pagination-jump-label {
1305
+ font-size: 14px;
1306
+ color: #86909c;
1307
+ }
1308
+
1309
+ .pagination-jump-input {
1310
+ width: 40px;
1311
+ height: 28px;
1312
+ padding: 0 8px;
1313
+ border: 1px solid #e5e6eb;
1314
+ border-radius: 4px;
1315
+ font-size: 14px;
1316
+ color: #1d2129;
1317
+ text-align: center;
1318
+ outline: none;
1319
+ transition: border-color 0.2s;
1320
+
1321
+ &:focus {
1322
+ border-color: #007aff;
1323
+ }
1324
+
1325
+ &::-webkit-inner-spin-button,
1326
+ &::-webkit-outer-spin-button {
1327
+ -webkit-appearance: none;
1328
+ margin: 0;
1329
+ }
1330
+ }