@easyv/config 1.1.6 → 1.1.7

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.
package/src/pie.js CHANGED
@@ -1,1035 +1,1035 @@
1
- import {
2
- font,
3
- show as showConfig,
4
- showRule,
5
- translate as translateConfig,
6
- axisLine,
7
- sc,
8
- } from './';
9
-
10
- const defaultBasePie = {
11
- chart: {
12
- innerRadius: 0,
13
- outerRadius: 1,
14
- cornerRadius: 0,
15
- padAngle: 2,
16
- },
17
- };
18
- const basePie = ({
19
- chart: {
20
- innerRadius = defaultBasePie.chart.innerRadius,
21
- outerRadius = defaultBasePie.chart.outerRadius,
22
- cornerRadius = defaultBasePie.chart.cornerRadius,
23
- padAngle = defaultBasePie.chart.padAngle,
24
- } = defaultBasePie.chart,
25
- } = defaultBasePie) => ({
26
- name: 'chart',
27
- displayName: '图形',
28
- value: [
29
- {
30
- name: 'innerRadius',
31
- displayName: '半径',
32
- value: innerRadius,
33
- type: 'range',
34
- config: {
35
- min: 0,
36
- max: 1,
37
- step: 0.01,
38
- },
39
- },
40
- {
41
- name: 'outerRadius',
42
- displayName: '外半径',
43
- value: outerRadius,
44
- type: 'range',
45
- config: {
46
- min: 0,
47
- max: 1,
48
- step: 0.01,
49
- },
50
- },
51
- {
52
- name: 'cornerRadius',
53
- displayName: '圆角',
54
- value: cornerRadius,
55
- type: 'number',
56
- config: {
57
- suffix: 'px',
58
- },
59
- },
60
- {
61
- name: 'padAngle',
62
- displayName: '间距',
63
- value: padAngle,
64
- type: 'range',
65
- config: {
66
- min: 0,
67
- max: 20,
68
- step: 1,
69
- suffix: '°',
70
- },
71
- },
72
- ],
73
- config: {
74
- defaultOpen: true,
75
- },
76
- });
77
-
78
- const defaultBaseRose = {
79
- chart: {
80
- innerRadius: 0,
81
- outerRadius: 1,
82
- padAngle: 2,
83
- },
84
- };
85
- const baseRose = ({
86
- chart: {
87
- innerRadius = defaultBaseRose.chart.innerRadius,
88
- outerRadius = defaultBaseRose.chart.outerRadius,
89
- padAngle = defaultBaseRose.chart.padAngle,
90
- } = defaultBaseRose.chart,
91
- } = defaultBaseRose) => ({
92
- name: 'chart',
93
- displayName: '饼图',
94
- value: [
95
- {
96
- name: 'innerRadius',
97
- displayName: '半径',
98
- value: innerRadius,
99
- type: 'range',
100
- config: {
101
- min: 0,
102
- max: 1,
103
- step: 0.01,
104
- },
105
- },
106
- {
107
- name: 'outerRadius',
108
- displayName: '外半径',
109
- value: outerRadius,
110
- type: 'range',
111
- config: {
112
- min: 0,
113
- max: 1,
114
- step: 0.01,
115
- },
116
- },
117
- {
118
- name: 'padAngle',
119
- displayName: '间距',
120
- value: padAngle,
121
- type: 'range',
122
- config: {
123
- min: 0,
124
- max: 30,
125
- step: 1,
126
- suffix: '°',
127
- },
128
- },
129
- ],
130
- config: {
131
- defaultOpen: true,
132
- },
133
- });
134
-
135
- const defaultGridLine = {
136
- show: true,
137
- color: '#BAE7FF',
138
- lineWidth: 1,
139
- };
140
- const gridLine = ({
141
- show = defaultGridLine.show,
142
- color = defaultGridLine.color,
143
- lineWidth = defaultGridLine.lineWidth,
144
- } = defaultGridLine) => ({
145
- name: 'gridLine',
146
- displayName: '网格线',
147
- value: [
148
- {
149
- name: 'show',
150
- displayName: '显示',
151
- value: show,
152
- type: 'boolean',
153
- },
154
- {
155
- rule: [['show', '$eq', true]],
156
- name: 'color',
157
- displayName: '颜色',
158
- value: color,
159
- type: 'color',
160
- },
161
- {
162
- rule: [['show', '$eq', true]],
163
- name: 'lineWidth',
164
- displayName: '粗细',
165
- value: lineWidth,
166
- type: 'number',
167
- config: {
168
- suffix: 'px',
169
- },
170
- },
171
- ],
172
- });
173
-
174
- const defaultRoseAxis = {
175
- axis: {
176
- count: 6,
177
- textStyle: font(),
178
- gap: 10,
179
- axisline: {
180
- show: true,
181
- color: '#BAE7FF',
182
- lineWidth: 1,
183
- },
184
- gridLine: {
185
- show: true,
186
- color: '#BAE7FF',
187
- lineWidth: 1,
188
- },
189
- },
190
- };
191
-
192
- const roseCategoryAxis = ({
193
- axis: {
194
- textStyle = defaultRoseAxis.axis.textStyle,
195
- gap = defaultRoseAxis.axis.gap,
196
- axisLine: axisLine_ = defaultRoseAxis.axis.axisline,
197
- gridLine: gridLine_ = defaultRoseAxis.axis.gridLine,
198
- } = defaultRoseAxis.axis,
199
- } = defaultRoseAxis) => ({
200
- name: 'categoryAxis',
201
- displayName: '类目轴',
202
- value: [
203
- {
204
- name: 'textStyle',
205
- displayName: '标签文本',
206
- value: font(textStyle),
207
- type: 'textStyle',
208
- markColorType: 'textColor'
209
- },
210
- {
211
- name: 'gap',
212
- displayName: '边距',
213
- value: gap,
214
- type: 'number',
215
- config: {
216
- suffix: 'px',
217
- },
218
- },
219
- axisLine(axisLine_),
220
- gridLine(gridLine_),
221
- ],
222
- config: {
223
- defaultOpen: true,
224
- },
225
- });
226
-
227
- const roseValueAxis = ({
228
- axis: {
229
- count = defaultRoseAxis.axis.count,
230
- textStyle = defaultRoseAxis.axis.textStyle,
231
- gap = defaultRoseAxis.axis.gap,
232
- axisLine: axisLine_ = defaultRoseAxis.axis.axisline,
233
- gridLine: gridLine_ = defaultRoseAxis.axis.gridLine,
234
- } = defaultRoseAxis.axis,
235
- } = defaultRoseAxis) => ({
236
- name: 'valueAxis',
237
- displayName: '数值轴',
238
- value: [
239
- {
240
- name: 'count',
241
- displayName: '数量',
242
- value: count,
243
- type: 'number',
244
- },
245
- {
246
- name: 'textStyle',
247
- displayName: '标签文本',
248
- value: font(textStyle),
249
- type: 'textStyle',
250
- markColorType: 'textColor'
251
- },
252
- {
253
- name: 'gap',
254
- displayName: '边距',
255
- value: gap,
256
- type: 'number',
257
- config: {
258
- suffix: 'px',
259
- },
260
- },
261
- axisLine(axisLine_),
262
- gridLine(gridLine_),
263
- ],
264
- config: {
265
- defaultOpen: true,
266
- },
267
- });
268
-
269
- const defaultCategoryText = {
270
- categoryText: {
271
- show: true,
272
- font: font(),
273
- gap: 10,
274
- },
275
- };
276
- const categoryText = ({
277
- categoryText: {
278
- show = defaultCategoryText.categoryText.show,
279
- font = defaultCategoryText.categoryText.font,
280
- gap = defaultCategoryText.categoryText.gap,
281
- } = defaultCategoryText,
282
- }) => ({
283
- name: 'categoryText',
284
- displayName: '类目文本',
285
- value: [
286
- {
287
- name: 'show',
288
- displayName: '显示',
289
- value: show,
290
- type: 'boolean',
291
- },
292
- {
293
- ...showRule(),
294
- name: 'textStyle',
295
- displayName: '文本样式',
296
- value: font,
297
- type: 'textStyle',
298
- markColorType: 'textColor'
299
- },
300
- {
301
- ...showRule(),
302
- name: 'gap',
303
- displayName: '间距',
304
- value: gap,
305
- type: 'number',
306
- config: {
307
- suffix: 'px',
308
- },
309
- },
310
- ],
311
- });
312
-
313
- const defaultDecorate = {
314
- decorate: {
315
- show: true,
316
- innerRadius: 0.3,
317
- outerRadius: 0.6,
318
- opacity: 80,
319
- speed: 5,
320
- direction: 'clockwise',
321
- },
322
- };
323
- const decorate = ({
324
- decorate: {
325
- show = defaultDecorate.decorate.show,
326
- innerRadius = defaultDecorate.decorate.innerRadius,
327
- outerRadius = defaultDecorate.decorate.outerRadius,
328
- opacity = defaultDecorate.decorate.opacity,
329
- speed = defaultDecorate.decorate.speed,
330
- direction = defaultDecorate.decorate.direction,
331
- } = defaultDecorate,
332
- }) => ({
333
- name: 'decorate',
334
- displayName: '装饰物',
335
- value: [
336
- {
337
- name: 'show',
338
- displayName: '显示',
339
- value: show,
340
- type: 'boolean',
341
- },
342
- {
343
- rule: [['show', '$eq', true]],
344
- name: 'innerRadius',
345
- displayName: '内半径',
346
- value: innerRadius,
347
- type: 'range',
348
- config: {
349
- min: 0,
350
- max: 1,
351
- step: 0.01,
352
- },
353
- },
354
- {
355
- rule: [['show', '$eq', true]],
356
- name: 'outerRadius',
357
- displayName: '外半径',
358
- value: outerRadius,
359
- type: 'range',
360
- config: {
361
- min: 0,
362
- max: 1,
363
- step: 0.01,
364
- },
365
- },
366
- {
367
- rule: [['show', '$eq', true]],
368
- name: 'opacity',
369
- displayName: '透明度',
370
- value: opacity,
371
- type: 'range',
372
- config: {
373
- min: 0,
374
- max: 100,
375
- step: 1,
376
- },
377
- },
378
- {
379
- rule: [['show', '$eq', true]],
380
- name: 'speed',
381
- displayName: '旋转速度',
382
- value: speed,
383
- type: 'number',
384
- config: {
385
- min: 0,
386
- max: 10,
387
- },
388
- },
389
- {
390
- rule: [['show', '$eq', true]],
391
- name: 'direction',
392
- displayName: '旋转方向',
393
- value: direction,
394
- type: 'radio',
395
- config: {
396
- options: [
397
- {
398
- name: '顺时针',
399
- value: 'clockwise',
400
- },
401
- {
402
- name: '逆时针',
403
- value: 'counterClockwise',
404
- },
405
- ],
406
- },
407
- },
408
- ],
409
- config: {
410
- defaultOpen: true,
411
- },
412
- });
413
-
414
- const defaultDecorate2 = {
415
- show: true,
416
- radiusWidth: 0.3,
417
- opacity: 80,
418
- };
419
- const decorate2 = ({
420
- show = defaultDecorate2.show,
421
- radiusWidth = defaultDecorate2.radiusWidth,
422
- opacity = defaultDecorate2.opacity,
423
- }) => ({
424
- name: 'decorate2',
425
- displayName: '装饰物',
426
- value: [
427
- {
428
- name: 'show',
429
- displayName: '显示',
430
- value: show,
431
- type: 'boolean',
432
- },
433
- {
434
- rule: [['show', '$eq', true]],
435
- name: 'radiusWidth',
436
- displayName: '弧宽',
437
- value: radiusWidth,
438
- type: 'range',
439
- config: {
440
- min: 0,
441
- max: 100,
442
- },
443
- },
444
- {
445
- rule: [['show', '$eq', true]],
446
- name: 'opacity',
447
- displayName: '透明度',
448
- value: opacity,
449
- type: 'range',
450
- config: {
451
- min: 0,
452
- max: 100,
453
- suffix: '%',
454
- },
455
- },
456
- ],
457
- });
458
-
459
- const defaultCurrent = {
460
- current: {
461
- show: true,
462
- gap: 45,
463
- name: { show: true, sameColor: false, font: font() },
464
- percent: {
465
- show: true,
466
- sameColor: false,
467
- precision: 0,
468
- font: font(),
469
- translate: { x: 0, y: 0 },
470
- },
471
- value: {
472
- show: true,
473
- sameColor: false,
474
- font: font(),
475
- translate: { x: 0, y: 0 },
476
- suffix: {
477
- show: false,
478
- text: '',
479
- fontSize: 12,
480
- translate: { x: 0, y: 0 },
481
- },
482
- },
483
- },
484
- };
485
- export const current = ({
486
- current: {
487
- show = defaultCurrent.current.show,
488
- gap = defaultCurrent.current.gap,
489
- name: {
490
- show: showName = defaultCurrent.current.name.show,
491
- sameColor: nameColor = defaultCurrent.current.name.sameColor,
492
- font: nameFont = defaultCurrent.current.name.font,
493
- translate: nameTranslate,
494
- textBreak,
495
- } = defaultCurrent.current.name,
496
- percent: {
497
- show: showPercent = defaultCurrent.current.percent.show,
498
- sameColor: percentColor = defaultCurrent.current.percent.sameColor,
499
- precision = defaultCurrent.current.percent.precision,
500
- font: percentFont = defaultCurrent.current.percent.font,
501
- translate: { x: percentTranslateX, y: percentTranslateY } = defaultCurrent
502
- .current.percent.translate,
503
- } = defaultCurrent.current.percent,
504
- value: {
505
- show: showValue = defaultCurrent.current.value.show,
506
- sameColor: valueColor = defaultCurrent.current.value.sameColor,
507
- font: valueFont = defaultCurrent.current.value.font,
508
- translate: { x: valueTranslateX, y: valueTranslateY } = defaultCurrent
509
- .current.value.translate,
510
- suffix: {
511
- show: showSuffix = defaultCurrent.current.value.suffix.show,
512
- text = defaultCurrent.current.value.suffix.text,
513
- fontSize = defaultCurrent.current.value.suffix.fontSize,
514
- translate: { x: suffixTranslateX, y: suffixTranslateY } = defaultCurrent
515
- .current.value.suffix.translate,
516
- } = defaultCurrent.current.value.suffix,
517
- } = defaultCurrent.current.value,
518
- } = defaultCurrent.current,
519
- } = defaultCurrent) => ({
520
- name: 'current',
521
- displayName: '当前值',
522
- value: [
523
- showConfig(show),
524
- {
525
- rule: [['show', '$eq', true]],
526
- name: 'gap',
527
- displayName: '间距',
528
- value: gap,
529
- type: 'number',
530
- config: {
531
- suffix: 'px',
532
- },
533
- },
534
- {
535
- rule: [['show', '$eq', true]],
536
- name: 'name',
537
- displayName: '类目',
538
- value: [
539
- showConfig(showName),
540
- {
541
- rule: [['show', '$eq', true]],
542
- name: 'sameColor',
543
- displayName: '颜色跟随',
544
- value: nameColor,
545
- type: 'boolean'
546
- },
547
- {
548
- rule: [['show', '$eq', true]],
549
- name: 'font',
550
- displayName: '文本样式',
551
- value: nameFont,
552
- type: 'textStyle',
553
- markColorType: 'textColor',
554
- },
555
- nameTranslate != undefined && {
556
- ...showRule(),
557
- ...translateConfig(nameTranslate.x, nameTranslate.y),
558
- },
559
- textBreak != undefined && {
560
- ...showRule(),
561
- ...sc('textBreak', '首行字数', 'number', textBreak, {
562
- min: 0,
563
- suffix: '个',
564
- }),
565
- },
566
- ].filter((item) => !!item),
567
- },
568
- {
569
- rule: [['show', '$eq', true]],
570
- name: 'percent',
571
- displayName: '占比值',
572
- value: [
573
- showConfig(showPercent),
574
- {
575
- rule: [['show', '$eq', true]],
576
- name: 'precision',
577
- displayName: '小数位数',
578
- value: precision,
579
- type: 'number',
580
- config: {
581
- min: 0,
582
- },
583
- },
584
- {
585
- rule: [['show', '$eq', true]],
586
- name: 'sameColor',
587
- displayName: '颜色跟随',
588
- value: percentColor,
589
- type: 'boolean'
590
- },
591
- {
592
- rule: [['show', '$eq', true]],
593
- name: 'font',
594
- displayName: '文本样式',
595
- value: percentFont,
596
- type: 'textStyle',
597
- markColorType: 'textColor',
598
- },
599
- {
600
- rule: [['show', '$eq', true]],
601
- ...translateConfig(percentTranslateX, percentTranslateY),
602
- },
603
- ],
604
- },
605
- {
606
- rule: [['show', '$eq', true]],
607
- name: 'value',
608
- displayName: '真实值',
609
- value: [
610
- showConfig(showValue),
611
- {
612
- rule: [['show', '$eq', true]],
613
- name: 'sameColor',
614
- displayName: '颜色跟随',
615
- value: valueColor,
616
- type: 'boolean'
617
- },
618
- {
619
- rule: [['show', '$eq', true]],
620
- name: 'font',
621
- displayName: '文本样式',
622
- value: valueFont,
623
- type: 'textStyle',
624
- markColorType: 'textColor',
625
- },
626
- {
627
- rule: [['show', '$eq', true]],
628
- ...translateConfig(valueTranslateX, valueTranslateY),
629
- },
630
- {
631
- rule: [['show', '$eq', true]],
632
- name: 'suffix',
633
- displayName: '后缀',
634
- value: [
635
- {
636
- name: 'show',
637
- displayName: '显示',
638
- value: showSuffix,
639
- type: 'boolean',
640
- },
641
- {
642
- rule: [['show', '$eq', true]],
643
- name: 'text',
644
- displayName: '内容',
645
- value: text,
646
- type: 'input',
647
- },
648
- {
649
- rule: [['show', '$eq', true]],
650
- name: 'fontSize',
651
- displayName: '字号',
652
- value: fontSize,
653
- type: 'number',
654
- },
655
- {
656
- rule: [['show', '$eq', true]],
657
- ...translateConfig(suffixTranslateX, suffixTranslateY),
658
- },
659
- ],
660
- config: {
661
- defaultOpen: true,
662
- },
663
- },
664
- ],
665
- },
666
- ],
667
- config: {
668
- defaultOpen: true,
669
- },
670
- });
671
-
672
- const defaultBaseOuter = {
673
- chart: {
674
- innerRadius: 0,
675
- outerRadius: 1,
676
- padAngle: 2,
677
- },
678
- };
679
- const baseOuter = ({
680
- chart: {
681
- innerRadius = defaultBasePie.chart.innerRadius,
682
- outerRadius = defaultBasePie.chart.outerRadius,
683
- padAngle = defaultBasePie.chart.padAngle,
684
- } = defaultBasePie.chart,
685
- } = defaultBaseOuter) => ({
686
- name: 'chart',
687
- displayName: '图形',
688
- value: [
689
- {
690
- name: 'innerRadius',
691
- displayName: '半径',
692
- value: innerRadius,
693
- type: 'range',
694
- config: {
695
- min: 0,
696
- max: 1,
697
- step: 0.01,
698
- },
699
- },
700
- {
701
- name: 'outerRadius',
702
- displayName: '外半径',
703
- value: outerRadius,
704
- type: 'range',
705
- config: {
706
- min: 0,
707
- max: 1,
708
- step: 0.01,
709
- },
710
- },
711
- {
712
- name: 'padAngle',
713
- displayName: '间距',
714
- value: padAngle,
715
- type: 'range',
716
- config: {
717
- min: 0,
718
- max: 20,
719
- step: 1,
720
- suffix: '°',
721
- },
722
- },
723
- ],
724
- config: {
725
- defaultOpen: true,
726
- },
727
- });
728
-
729
- const defaultOuterDecorate = {
730
- outerDecorate: {
731
- color: '#CF00FF',
732
- width: 10,
733
- tick: {
734
- show: true,
735
- count: 12,
736
- color: '#CF00FF',
737
- width: 3,
738
- length: 8,
739
- },
740
- },
741
- };
742
- const outerDecorate = ({
743
- outerDecorate: {
744
- color = defaultOuterDecorate.outerDecorate.color,
745
- width = defaultOuterDecorate.outerDecorate.width,
746
- tick: {
747
- show = defaultOuterDecorate.outerDecorate.tick.show,
748
- count = defaultOuterDecorate.outerDecorate.tick.count,
749
- color: tickColor = defaultOuterDecorate.outerDecorate.tick.color,
750
- width: tickWidth = defaultOuterDecorate.outerDecorate.tick.width,
751
- length = defaultOuterDecorate.outerDecorate.tick.length,
752
- } = defaultOuterDecorate.outerDecorate.tick,
753
- } = defaultOuterDecorate.outerDecorate,
754
- } = defaultOuterDecorate) => ({
755
- name: 'outerDecorate',
756
- displayName: '外环装饰',
757
- value: [
758
- {
759
- name: 'color',
760
- displayName: '颜色',
761
- value: color,
762
- type: 'color',
763
- },
764
- {
765
- name: 'width',
766
- displayName: '粗细',
767
- value: width,
768
- type: 'number',
769
- config: {
770
- min: 0,
771
- max: 100,
772
- suffix: 'px',
773
- },
774
- },
775
- {
776
- name: 'tick',
777
- displayName: '刻度',
778
- value: [
779
- showConfig(show),
780
- {
781
- ...showRule(),
782
- name: 'count',
783
- displayName: '个数',
784
- value: count,
785
- type: 'number',
786
- config: {
787
- min: 0,
788
- },
789
- },
790
- {
791
- ...showRule(),
792
- name: 'color',
793
- displayName: '颜色',
794
- value: tickColor,
795
- type: 'color',
796
- },
797
- {
798
- ...showRule(),
799
- name: 'width',
800
- displayName: '粗细',
801
- value: tickWidth,
802
- type: 'number',
803
- config: {
804
- suffix: 'px',
805
- },
806
- },
807
- {
808
- ...showRule(),
809
- name: 'length',
810
- displayName: '长度',
811
- value: length,
812
- type: 'number',
813
- config: {
814
- suffix: 'px',
815
- },
816
- },
817
- ],
818
- },
819
- ],
820
- });
821
-
822
- export const rosePie = (_basePie = defaultBasePie) => ({
823
- name: 'fan',
824
- displayName: '环图属性',
825
- value: [basePie(_basePie)],
826
- });
827
-
828
- export const rosePieDecorate = (
829
- _baseOuter = defaultBaseOuter,
830
- _outerDecorate = defaultOuterDecorate
831
- ) => ({
832
- name: 'fan',
833
- displayName: '环图属性',
834
- value: [baseOuter(_baseOuter), outerDecorate(_outerDecorate)],
835
- });
836
-
837
- export const donut = (
838
- {
839
- basePie: _basePie = defaultBasePie,
840
- decorate: _decorate = defaultDecorate,
841
- } = {
842
- basePie: defaultBasePie,
843
- decorate: defaultDecorate,
844
- }
845
- ) => ({
846
- name: 'fan',
847
- displayName: '环图属性',
848
- value: [basePie(_basePie), decorate(_decorate)],
849
- });
850
-
851
- export const carouselDonut = (
852
- { basePie: _basePie = defaultBasePie, current: _current = defaultCurrent } = {
853
- basePie: defaultBasePie,
854
- current: defaultCurrent,
855
- }
856
- ) => ({
857
- name: 'fan',
858
- displayName: '环图属性',
859
- value: [basePie(_basePie), current(_current)],
860
- });
861
-
862
- export const nestRosePie = (
863
- _baseRose = defaultBaseRose,
864
- _categoryAxis = defaultRoseAxis,
865
- _valueAxis = defaultRoseAxis
866
- ) => ({
867
- name: 'fan',
868
- displayName: '环图属性',
869
- value: [
870
- baseRose(_baseRose),
871
- roseCategoryAxis(_categoryAxis),
872
- roseValueAxis(_valueAxis),
873
- ],
874
- });
875
-
876
- export const carouselDonut2 = (
877
- {
878
- basePie: _basePie = defaultBasePie,
879
- categoryText: _categoryText = defaultCategoryText,
880
- decorate2: _decorate2 = defaultDecorate2,
881
- current: _current = defaultCurrent,
882
- } = {
883
- basePie: defaultBasePie,
884
- categoryText: defaultCategoryText,
885
- decorate2: defaultDecorate2,
886
- current: defaultCurrent,
887
- }
888
- ) => ({
889
- name: 'fan',
890
- displayName: '环图属性',
891
- value: [
892
- basePie(_basePie),
893
- categoryText(_categoryText),
894
- decorate2(_decorate2),
895
- current(_current),
896
- ],
897
- });
898
-
899
- const defaultPie = {
900
- fan: {
901
- chart: { rose: false, baseRadius: 0.5, outerRadius: 1, innerRadius: 0 },
902
- angle: { startAngle: 0, endAngle: 360, antiClockwise: false },
903
- stroke: { show: false, strokeWidth: 1, color: '#FFFFFF' },
904
- },
905
- };
906
-
907
- export default ({
908
- fan: {
909
- chart: {
910
- outerRadius = defaultPie.fan.chart.outerRadius,
911
- rose = defaultPie.fan.chart.rose,
912
- baseRadius = defaultPie.fan.chart.baseRadius,
913
- } = defaultPie.fan.chart,
914
- angle: {
915
- startAngle = defaultPie.fan.angle.startAngle,
916
- endAngle = defaultPie.fan.angle.endAngle,
917
- antiClockwise = defaultPie.fan.angle.antiClockwise,
918
- } = defaultPie.fan.angle,
919
- stroke: {
920
- show = defaultPie.fan.stroke.show,
921
- strokeWidth = defaultPie.fan.stroke.strokeWidth,
922
- color = defaultPie.fan.stroke.color,
923
- } = defaultPie.fan.stroke,
924
- } = defaultPie.fan,
925
- } = defaultPie) => ({
926
- name: 'fan',
927
- displayName: '饼图属性',
928
- value: [
929
- {
930
- name: 'chart',
931
- displayName: '图形',
932
- value: [
933
- {
934
- name: 'outerRadius',
935
- displayName: '半径',
936
- value: outerRadius,
937
- type: 'range',
938
- config: {
939
- min: 0,
940
- max: 1,
941
- step: 0.01,
942
- },
943
- },
944
- {
945
- name: 'rose',
946
- displayName: '类玫瑰图',
947
- value: rose,
948
- type: 'boolean',
949
- },
950
- {
951
- rule: [['rose', '$eq', true]],
952
- name: 'baseRadius',
953
- displayName: '最小半径',
954
- value: baseRadius,
955
- type: 'range',
956
- config: {
957
- min: 0,
958
- max: 1,
959
- step: 0.01,
960
- },
961
- },
962
- ],
963
- config: {
964
- defaultOpen: true,
965
- },
966
- },
967
- {
968
- name: 'angle',
969
- displayName: '角度',
970
- value: [
971
- {
972
- name: 'startAngle',
973
- displayName: '起始',
974
- value: startAngle,
975
- type: 'range',
976
- config: {
977
- step: 1,
978
- min: 0,
979
- max: 360,
980
- },
981
- },
982
- {
983
- name: 'endAngle',
984
- displayName: '结束',
985
- value: endAngle,
986
- type: 'range',
987
- config: {
988
- step: 1,
989
- min: 0,
990
- max: 360,
991
- },
992
- },
993
- {
994
- name: 'antiClockwise',
995
- displayName: '反向',
996
- value: antiClockwise,
997
- type: 'boolean',
998
- tip: '启用使用另一时针顺序绘制饼图',
999
- },
1000
- ],
1001
- config: {
1002
- defaultOpen: true,
1003
- },
1004
- },
1005
- {
1006
- name: 'stroke',
1007
- displayName: '描边',
1008
- value: [
1009
- {
1010
- name: 'show',
1011
- displayName: '开启',
1012
- value: show,
1013
- type: 'boolean',
1014
- },
1015
- {
1016
- rule: [['show', '$eq', true]],
1017
- name: 'strokeWidth',
1018
- displayName: '宽度',
1019
- value: strokeWidth,
1020
- type: 'number',
1021
- },
1022
- {
1023
- rule: [['show', '$eq', true]],
1024
- name: 'color',
1025
- displayName: '颜色',
1026
- value: color,
1027
- type: 'color',
1028
- },
1029
- ],
1030
- config: {
1031
- defaultOpen: true,
1032
- },
1033
- },
1034
- ],
1035
- });
1
+ import {
2
+ font,
3
+ show as showConfig,
4
+ showRule,
5
+ translate as translateConfig,
6
+ axisLine,
7
+ sc,
8
+ } from './';
9
+
10
+ const defaultBasePie = {
11
+ chart: {
12
+ innerRadius: 0,
13
+ outerRadius: 1,
14
+ cornerRadius: 0,
15
+ padAngle: 2,
16
+ },
17
+ };
18
+ const basePie = ({
19
+ chart: {
20
+ innerRadius = defaultBasePie.chart.innerRadius,
21
+ outerRadius = defaultBasePie.chart.outerRadius,
22
+ cornerRadius = defaultBasePie.chart.cornerRadius,
23
+ padAngle = defaultBasePie.chart.padAngle,
24
+ } = defaultBasePie.chart,
25
+ } = defaultBasePie) => ({
26
+ name: 'chart',
27
+ displayName: '图形',
28
+ value: [
29
+ {
30
+ name: 'innerRadius',
31
+ displayName: '半径',
32
+ value: innerRadius,
33
+ type: 'range',
34
+ config: {
35
+ min: 0,
36
+ max: 1,
37
+ step: 0.01,
38
+ },
39
+ },
40
+ {
41
+ name: 'outerRadius',
42
+ displayName: '外半径',
43
+ value: outerRadius,
44
+ type: 'range',
45
+ config: {
46
+ min: 0,
47
+ max: 1,
48
+ step: 0.01,
49
+ },
50
+ },
51
+ {
52
+ name: 'cornerRadius',
53
+ displayName: '圆角',
54
+ value: cornerRadius,
55
+ type: 'number',
56
+ config: {
57
+ suffix: 'px',
58
+ },
59
+ },
60
+ {
61
+ name: 'padAngle',
62
+ displayName: '间距',
63
+ value: padAngle,
64
+ type: 'range',
65
+ config: {
66
+ min: 0,
67
+ max: 20,
68
+ step: 1,
69
+ suffix: '°',
70
+ },
71
+ },
72
+ ],
73
+ config: {
74
+ defaultOpen: true,
75
+ },
76
+ });
77
+
78
+ const defaultBaseRose = {
79
+ chart: {
80
+ innerRadius: 0,
81
+ outerRadius: 1,
82
+ padAngle: 2,
83
+ },
84
+ };
85
+ const baseRose = ({
86
+ chart: {
87
+ innerRadius = defaultBaseRose.chart.innerRadius,
88
+ outerRadius = defaultBaseRose.chart.outerRadius,
89
+ padAngle = defaultBaseRose.chart.padAngle,
90
+ } = defaultBaseRose.chart,
91
+ } = defaultBaseRose) => ({
92
+ name: 'chart',
93
+ displayName: '饼图',
94
+ value: [
95
+ {
96
+ name: 'innerRadius',
97
+ displayName: '半径',
98
+ value: innerRadius,
99
+ type: 'range',
100
+ config: {
101
+ min: 0,
102
+ max: 1,
103
+ step: 0.01,
104
+ },
105
+ },
106
+ {
107
+ name: 'outerRadius',
108
+ displayName: '外半径',
109
+ value: outerRadius,
110
+ type: 'range',
111
+ config: {
112
+ min: 0,
113
+ max: 1,
114
+ step: 0.01,
115
+ },
116
+ },
117
+ {
118
+ name: 'padAngle',
119
+ displayName: '间距',
120
+ value: padAngle,
121
+ type: 'range',
122
+ config: {
123
+ min: 0,
124
+ max: 30,
125
+ step: 1,
126
+ suffix: '°',
127
+ },
128
+ },
129
+ ],
130
+ config: {
131
+ defaultOpen: true,
132
+ },
133
+ });
134
+
135
+ const defaultGridLine = {
136
+ show: true,
137
+ color: '#BAE7FF',
138
+ lineWidth: 1,
139
+ };
140
+ const gridLine = ({
141
+ show = defaultGridLine.show,
142
+ color = defaultGridLine.color,
143
+ lineWidth = defaultGridLine.lineWidth,
144
+ } = defaultGridLine) => ({
145
+ name: 'gridLine',
146
+ displayName: '网格线',
147
+ value: [
148
+ {
149
+ name: 'show',
150
+ displayName: '显示',
151
+ value: show,
152
+ type: 'boolean',
153
+ },
154
+ {
155
+ rule: [['show', '$eq', true]],
156
+ name: 'color',
157
+ displayName: '颜色',
158
+ value: color,
159
+ type: 'color',
160
+ },
161
+ {
162
+ rule: [['show', '$eq', true]],
163
+ name: 'lineWidth',
164
+ displayName: '粗细',
165
+ value: lineWidth,
166
+ type: 'number',
167
+ config: {
168
+ suffix: 'px',
169
+ },
170
+ },
171
+ ],
172
+ });
173
+
174
+ const defaultRoseAxis = {
175
+ axis: {
176
+ count: 6,
177
+ textStyle: font(),
178
+ gap: 10,
179
+ axisline: {
180
+ show: true,
181
+ color: '#BAE7FF',
182
+ lineWidth: 1,
183
+ },
184
+ gridLine: {
185
+ show: true,
186
+ color: '#BAE7FF',
187
+ lineWidth: 1,
188
+ },
189
+ },
190
+ };
191
+
192
+ const roseCategoryAxis = ({
193
+ axis: {
194
+ textStyle = defaultRoseAxis.axis.textStyle,
195
+ gap = defaultRoseAxis.axis.gap,
196
+ axisLine: axisLine_ = defaultRoseAxis.axis.axisline,
197
+ gridLine: gridLine_ = defaultRoseAxis.axis.gridLine,
198
+ } = defaultRoseAxis.axis,
199
+ } = defaultRoseAxis) => ({
200
+ name: 'categoryAxis',
201
+ displayName: '类目轴',
202
+ value: [
203
+ {
204
+ name: 'textStyle',
205
+ displayName: '标签文本',
206
+ value: font(textStyle),
207
+ type: 'textStyle',
208
+ markColorType: 'textColor'
209
+ },
210
+ {
211
+ name: 'gap',
212
+ displayName: '边距',
213
+ value: gap,
214
+ type: 'number',
215
+ config: {
216
+ suffix: 'px',
217
+ },
218
+ },
219
+ axisLine(axisLine_),
220
+ gridLine(gridLine_),
221
+ ],
222
+ config: {
223
+ defaultOpen: true,
224
+ },
225
+ });
226
+
227
+ const roseValueAxis = ({
228
+ axis: {
229
+ count = defaultRoseAxis.axis.count,
230
+ textStyle = defaultRoseAxis.axis.textStyle,
231
+ gap = defaultRoseAxis.axis.gap,
232
+ axisLine: axisLine_ = defaultRoseAxis.axis.axisline,
233
+ gridLine: gridLine_ = defaultRoseAxis.axis.gridLine,
234
+ } = defaultRoseAxis.axis,
235
+ } = defaultRoseAxis) => ({
236
+ name: 'valueAxis',
237
+ displayName: '数值轴',
238
+ value: [
239
+ {
240
+ name: 'count',
241
+ displayName: '数量',
242
+ value: count,
243
+ type: 'number',
244
+ },
245
+ {
246
+ name: 'textStyle',
247
+ displayName: '标签文本',
248
+ value: font(textStyle),
249
+ type: 'textStyle',
250
+ markColorType: 'textColor'
251
+ },
252
+ {
253
+ name: 'gap',
254
+ displayName: '边距',
255
+ value: gap,
256
+ type: 'number',
257
+ config: {
258
+ suffix: 'px',
259
+ },
260
+ },
261
+ axisLine(axisLine_),
262
+ gridLine(gridLine_),
263
+ ],
264
+ config: {
265
+ defaultOpen: true,
266
+ },
267
+ });
268
+
269
+ const defaultCategoryText = {
270
+ categoryText: {
271
+ show: true,
272
+ font: font(),
273
+ gap: 10,
274
+ },
275
+ };
276
+ const categoryText = ({
277
+ categoryText: {
278
+ show = defaultCategoryText.categoryText.show,
279
+ font = defaultCategoryText.categoryText.font,
280
+ gap = defaultCategoryText.categoryText.gap,
281
+ } = defaultCategoryText,
282
+ }) => ({
283
+ name: 'categoryText',
284
+ displayName: '类目文本',
285
+ value: [
286
+ {
287
+ name: 'show',
288
+ displayName: '显示',
289
+ value: show,
290
+ type: 'boolean',
291
+ },
292
+ {
293
+ ...showRule(),
294
+ name: 'textStyle',
295
+ displayName: '文本样式',
296
+ value: font,
297
+ type: 'textStyle',
298
+ markColorType: 'textColor'
299
+ },
300
+ {
301
+ ...showRule(),
302
+ name: 'gap',
303
+ displayName: '间距',
304
+ value: gap,
305
+ type: 'number',
306
+ config: {
307
+ suffix: 'px',
308
+ },
309
+ },
310
+ ],
311
+ });
312
+
313
+ const defaultDecorate = {
314
+ decorate: {
315
+ show: true,
316
+ innerRadius: 0.3,
317
+ outerRadius: 0.6,
318
+ opacity: 80,
319
+ speed: 5,
320
+ direction: 'clockwise',
321
+ },
322
+ };
323
+ const decorate = ({
324
+ decorate: {
325
+ show = defaultDecorate.decorate.show,
326
+ innerRadius = defaultDecorate.decorate.innerRadius,
327
+ outerRadius = defaultDecorate.decorate.outerRadius,
328
+ opacity = defaultDecorate.decorate.opacity,
329
+ speed = defaultDecorate.decorate.speed,
330
+ direction = defaultDecorate.decorate.direction,
331
+ } = defaultDecorate,
332
+ }) => ({
333
+ name: 'decorate',
334
+ displayName: '装饰物',
335
+ value: [
336
+ {
337
+ name: 'show',
338
+ displayName: '显示',
339
+ value: show,
340
+ type: 'boolean',
341
+ },
342
+ {
343
+ rule: [['show', '$eq', true]],
344
+ name: 'innerRadius',
345
+ displayName: '内半径',
346
+ value: innerRadius,
347
+ type: 'range',
348
+ config: {
349
+ min: 0,
350
+ max: 1,
351
+ step: 0.01,
352
+ },
353
+ },
354
+ {
355
+ rule: [['show', '$eq', true]],
356
+ name: 'outerRadius',
357
+ displayName: '外半径',
358
+ value: outerRadius,
359
+ type: 'range',
360
+ config: {
361
+ min: 0,
362
+ max: 1,
363
+ step: 0.01,
364
+ },
365
+ },
366
+ {
367
+ rule: [['show', '$eq', true]],
368
+ name: 'opacity',
369
+ displayName: '透明度',
370
+ value: opacity,
371
+ type: 'range',
372
+ config: {
373
+ min: 0,
374
+ max: 100,
375
+ step: 1,
376
+ },
377
+ },
378
+ {
379
+ rule: [['show', '$eq', true]],
380
+ name: 'speed',
381
+ displayName: '旋转速度',
382
+ value: speed,
383
+ type: 'number',
384
+ config: {
385
+ min: 0,
386
+ max: 10,
387
+ },
388
+ },
389
+ {
390
+ rule: [['show', '$eq', true]],
391
+ name: 'direction',
392
+ displayName: '旋转方向',
393
+ value: direction,
394
+ type: 'radio',
395
+ config: {
396
+ options: [
397
+ {
398
+ name: '顺时针',
399
+ value: 'clockwise',
400
+ },
401
+ {
402
+ name: '逆时针',
403
+ value: 'counterClockwise',
404
+ },
405
+ ],
406
+ },
407
+ },
408
+ ],
409
+ config: {
410
+ defaultOpen: true,
411
+ },
412
+ });
413
+
414
+ const defaultDecorate2 = {
415
+ show: true,
416
+ radiusWidth: 0.3,
417
+ opacity: 80,
418
+ };
419
+ const decorate2 = ({
420
+ show = defaultDecorate2.show,
421
+ radiusWidth = defaultDecorate2.radiusWidth,
422
+ opacity = defaultDecorate2.opacity,
423
+ }) => ({
424
+ name: 'decorate2',
425
+ displayName: '装饰物',
426
+ value: [
427
+ {
428
+ name: 'show',
429
+ displayName: '显示',
430
+ value: show,
431
+ type: 'boolean',
432
+ },
433
+ {
434
+ rule: [['show', '$eq', true]],
435
+ name: 'radiusWidth',
436
+ displayName: '弧宽',
437
+ value: radiusWidth,
438
+ type: 'range',
439
+ config: {
440
+ min: 0,
441
+ max: 100,
442
+ },
443
+ },
444
+ {
445
+ rule: [['show', '$eq', true]],
446
+ name: 'opacity',
447
+ displayName: '透明度',
448
+ value: opacity,
449
+ type: 'range',
450
+ config: {
451
+ min: 0,
452
+ max: 100,
453
+ suffix: '%',
454
+ },
455
+ },
456
+ ],
457
+ });
458
+
459
+ const defaultCurrent = {
460
+ current: {
461
+ show: true,
462
+ gap: 45,
463
+ name: { show: true, sameColor: false, font: font() },
464
+ percent: {
465
+ show: true,
466
+ sameColor: false,
467
+ precision: 0,
468
+ font: font(),
469
+ translate: { x: 0, y: 0 },
470
+ },
471
+ value: {
472
+ show: true,
473
+ sameColor: false,
474
+ font: font(),
475
+ translate: { x: 0, y: 0 },
476
+ suffix: {
477
+ show: false,
478
+ text: '',
479
+ fontSize: 12,
480
+ translate: { x: 0, y: 0 },
481
+ },
482
+ },
483
+ },
484
+ };
485
+ export const current = ({
486
+ current: {
487
+ show = defaultCurrent.current.show,
488
+ gap = defaultCurrent.current.gap,
489
+ name: {
490
+ show: showName = defaultCurrent.current.name.show,
491
+ sameColor: nameColor = defaultCurrent.current.name.sameColor,
492
+ font: nameFont = defaultCurrent.current.name.font,
493
+ translate: nameTranslate,
494
+ textBreak,
495
+ } = defaultCurrent.current.name,
496
+ percent: {
497
+ show: showPercent = defaultCurrent.current.percent.show,
498
+ sameColor: percentColor = defaultCurrent.current.percent.sameColor,
499
+ precision = defaultCurrent.current.percent.precision,
500
+ font: percentFont = defaultCurrent.current.percent.font,
501
+ translate: { x: percentTranslateX, y: percentTranslateY } = defaultCurrent
502
+ .current.percent.translate,
503
+ } = defaultCurrent.current.percent,
504
+ value: {
505
+ show: showValue = defaultCurrent.current.value.show,
506
+ sameColor: valueColor = defaultCurrent.current.value.sameColor,
507
+ font: valueFont = defaultCurrent.current.value.font,
508
+ translate: { x: valueTranslateX, y: valueTranslateY } = defaultCurrent
509
+ .current.value.translate,
510
+ suffix: {
511
+ show: showSuffix = defaultCurrent.current.value.suffix.show,
512
+ text = defaultCurrent.current.value.suffix.text,
513
+ fontSize = defaultCurrent.current.value.suffix.fontSize,
514
+ translate: { x: suffixTranslateX, y: suffixTranslateY } = defaultCurrent
515
+ .current.value.suffix.translate,
516
+ } = defaultCurrent.current.value.suffix,
517
+ } = defaultCurrent.current.value,
518
+ } = defaultCurrent.current,
519
+ } = defaultCurrent) => ({
520
+ name: 'current',
521
+ displayName: '当前值',
522
+ value: [
523
+ showConfig(show),
524
+ {
525
+ rule: [['show', '$eq', true]],
526
+ name: 'gap',
527
+ displayName: '间距',
528
+ value: gap,
529
+ type: 'number',
530
+ config: {
531
+ suffix: 'px',
532
+ },
533
+ },
534
+ {
535
+ rule: [['show', '$eq', true]],
536
+ name: 'name',
537
+ displayName: '类目',
538
+ value: [
539
+ showConfig(showName),
540
+ {
541
+ rule: [['show', '$eq', true]],
542
+ name: 'sameColor',
543
+ displayName: '颜色跟随',
544
+ value: nameColor,
545
+ type: 'boolean'
546
+ },
547
+ {
548
+ rule: [['show', '$eq', true]],
549
+ name: 'font',
550
+ displayName: '文本样式',
551
+ value: nameFont,
552
+ type: 'textStyle',
553
+ markColorType: 'textColor',
554
+ },
555
+ nameTranslate != undefined && {
556
+ ...showRule(),
557
+ ...translateConfig(nameTranslate.x, nameTranslate.y),
558
+ },
559
+ textBreak != undefined && {
560
+ ...showRule(),
561
+ ...sc('textBreak', '首行字数', 'number', textBreak, {
562
+ min: 0,
563
+ suffix: '个',
564
+ }),
565
+ },
566
+ ].filter((item) => !!item),
567
+ },
568
+ {
569
+ rule: [['show', '$eq', true]],
570
+ name: 'percent',
571
+ displayName: '占比值',
572
+ value: [
573
+ showConfig(showPercent),
574
+ {
575
+ rule: [['show', '$eq', true]],
576
+ name: 'precision',
577
+ displayName: '小数位数',
578
+ value: precision,
579
+ type: 'number',
580
+ config: {
581
+ min: 0,
582
+ },
583
+ },
584
+ {
585
+ rule: [['show', '$eq', true]],
586
+ name: 'sameColor',
587
+ displayName: '颜色跟随',
588
+ value: percentColor,
589
+ type: 'boolean'
590
+ },
591
+ {
592
+ rule: [['show', '$eq', true]],
593
+ name: 'font',
594
+ displayName: '文本样式',
595
+ value: percentFont,
596
+ type: 'textStyle',
597
+ markColorType: 'textColor',
598
+ },
599
+ {
600
+ rule: [['show', '$eq', true]],
601
+ ...translateConfig(percentTranslateX, percentTranslateY),
602
+ },
603
+ ],
604
+ },
605
+ {
606
+ rule: [['show', '$eq', true]],
607
+ name: 'value',
608
+ displayName: '真实值',
609
+ value: [
610
+ showConfig(showValue),
611
+ {
612
+ rule: [['show', '$eq', true]],
613
+ name: 'sameColor',
614
+ displayName: '颜色跟随',
615
+ value: valueColor,
616
+ type: 'boolean'
617
+ },
618
+ {
619
+ rule: [['show', '$eq', true]],
620
+ name: 'font',
621
+ displayName: '文本样式',
622
+ value: valueFont,
623
+ type: 'textStyle',
624
+ markColorType: 'textColor',
625
+ },
626
+ {
627
+ rule: [['show', '$eq', true]],
628
+ ...translateConfig(valueTranslateX, valueTranslateY),
629
+ },
630
+ {
631
+ rule: [['show', '$eq', true]],
632
+ name: 'suffix',
633
+ displayName: '后缀',
634
+ value: [
635
+ {
636
+ name: 'show',
637
+ displayName: '显示',
638
+ value: showSuffix,
639
+ type: 'boolean',
640
+ },
641
+ {
642
+ rule: [['show', '$eq', true]],
643
+ name: 'text',
644
+ displayName: '内容',
645
+ value: text,
646
+ type: 'input',
647
+ },
648
+ {
649
+ rule: [['show', '$eq', true]],
650
+ name: 'fontSize',
651
+ displayName: '字号',
652
+ value: fontSize,
653
+ type: 'number',
654
+ },
655
+ {
656
+ rule: [['show', '$eq', true]],
657
+ ...translateConfig(suffixTranslateX, suffixTranslateY),
658
+ },
659
+ ],
660
+ config: {
661
+ defaultOpen: true,
662
+ },
663
+ },
664
+ ],
665
+ },
666
+ ],
667
+ config: {
668
+ defaultOpen: true,
669
+ },
670
+ });
671
+
672
+ const defaultBaseOuter = {
673
+ chart: {
674
+ innerRadius: 0,
675
+ outerRadius: 1,
676
+ padAngle: 2,
677
+ },
678
+ };
679
+ const baseOuter = ({
680
+ chart: {
681
+ innerRadius = defaultBasePie.chart.innerRadius,
682
+ outerRadius = defaultBasePie.chart.outerRadius,
683
+ padAngle = defaultBasePie.chart.padAngle,
684
+ } = defaultBasePie.chart,
685
+ } = defaultBaseOuter) => ({
686
+ name: 'chart',
687
+ displayName: '图形',
688
+ value: [
689
+ {
690
+ name: 'innerRadius',
691
+ displayName: '半径',
692
+ value: innerRadius,
693
+ type: 'range',
694
+ config: {
695
+ min: 0,
696
+ max: 1,
697
+ step: 0.01,
698
+ },
699
+ },
700
+ {
701
+ name: 'outerRadius',
702
+ displayName: '外半径',
703
+ value: outerRadius,
704
+ type: 'range',
705
+ config: {
706
+ min: 0,
707
+ max: 1,
708
+ step: 0.01,
709
+ },
710
+ },
711
+ {
712
+ name: 'padAngle',
713
+ displayName: '间距',
714
+ value: padAngle,
715
+ type: 'range',
716
+ config: {
717
+ min: 0,
718
+ max: 20,
719
+ step: 1,
720
+ suffix: '°',
721
+ },
722
+ },
723
+ ],
724
+ config: {
725
+ defaultOpen: true,
726
+ },
727
+ });
728
+
729
+ const defaultOuterDecorate = {
730
+ outerDecorate: {
731
+ color: '#CF00FF',
732
+ width: 10,
733
+ tick: {
734
+ show: true,
735
+ count: 12,
736
+ color: '#CF00FF',
737
+ width: 3,
738
+ length: 8,
739
+ },
740
+ },
741
+ };
742
+ const outerDecorate = ({
743
+ outerDecorate: {
744
+ color = defaultOuterDecorate.outerDecorate.color,
745
+ width = defaultOuterDecorate.outerDecorate.width,
746
+ tick: {
747
+ show = defaultOuterDecorate.outerDecorate.tick.show,
748
+ count = defaultOuterDecorate.outerDecorate.tick.count,
749
+ color: tickColor = defaultOuterDecorate.outerDecorate.tick.color,
750
+ width: tickWidth = defaultOuterDecorate.outerDecorate.tick.width,
751
+ length = defaultOuterDecorate.outerDecorate.tick.length,
752
+ } = defaultOuterDecorate.outerDecorate.tick,
753
+ } = defaultOuterDecorate.outerDecorate,
754
+ } = defaultOuterDecorate) => ({
755
+ name: 'outerDecorate',
756
+ displayName: '外环装饰',
757
+ value: [
758
+ {
759
+ name: 'color',
760
+ displayName: '颜色',
761
+ value: color,
762
+ type: 'color',
763
+ },
764
+ {
765
+ name: 'width',
766
+ displayName: '粗细',
767
+ value: width,
768
+ type: 'number',
769
+ config: {
770
+ min: 0,
771
+ max: 100,
772
+ suffix: 'px',
773
+ },
774
+ },
775
+ {
776
+ name: 'tick',
777
+ displayName: '刻度',
778
+ value: [
779
+ showConfig(show),
780
+ {
781
+ ...showRule(),
782
+ name: 'count',
783
+ displayName: '个数',
784
+ value: count,
785
+ type: 'number',
786
+ config: {
787
+ min: 0,
788
+ },
789
+ },
790
+ {
791
+ ...showRule(),
792
+ name: 'color',
793
+ displayName: '颜色',
794
+ value: tickColor,
795
+ type: 'color',
796
+ },
797
+ {
798
+ ...showRule(),
799
+ name: 'width',
800
+ displayName: '粗细',
801
+ value: tickWidth,
802
+ type: 'number',
803
+ config: {
804
+ suffix: 'px',
805
+ },
806
+ },
807
+ {
808
+ ...showRule(),
809
+ name: 'length',
810
+ displayName: '长度',
811
+ value: length,
812
+ type: 'number',
813
+ config: {
814
+ suffix: 'px',
815
+ },
816
+ },
817
+ ],
818
+ },
819
+ ],
820
+ });
821
+
822
+ export const rosePie = (_basePie = defaultBasePie) => ({
823
+ name: 'fan',
824
+ displayName: '环图属性',
825
+ value: [basePie(_basePie)],
826
+ });
827
+
828
+ export const rosePieDecorate = (
829
+ _baseOuter = defaultBaseOuter,
830
+ _outerDecorate = defaultOuterDecorate
831
+ ) => ({
832
+ name: 'fan',
833
+ displayName: '环图属性',
834
+ value: [baseOuter(_baseOuter), outerDecorate(_outerDecorate)],
835
+ });
836
+
837
+ export const donut = (
838
+ {
839
+ basePie: _basePie = defaultBasePie,
840
+ decorate: _decorate = defaultDecorate,
841
+ } = {
842
+ basePie: defaultBasePie,
843
+ decorate: defaultDecorate,
844
+ }
845
+ ) => ({
846
+ name: 'fan',
847
+ displayName: '环图属性',
848
+ value: [basePie(_basePie), decorate(_decorate)],
849
+ });
850
+
851
+ export const carouselDonut = (
852
+ { basePie: _basePie = defaultBasePie, current: _current = defaultCurrent } = {
853
+ basePie: defaultBasePie,
854
+ current: defaultCurrent,
855
+ }
856
+ ) => ({
857
+ name: 'fan',
858
+ displayName: '环图属性',
859
+ value: [basePie(_basePie), current(_current)],
860
+ });
861
+
862
+ export const nestRosePie = (
863
+ _baseRose = defaultBaseRose,
864
+ _categoryAxis = defaultRoseAxis,
865
+ _valueAxis = defaultRoseAxis
866
+ ) => ({
867
+ name: 'fan',
868
+ displayName: '环图属性',
869
+ value: [
870
+ baseRose(_baseRose),
871
+ roseCategoryAxis(_categoryAxis),
872
+ roseValueAxis(_valueAxis),
873
+ ],
874
+ });
875
+
876
+ export const carouselDonut2 = (
877
+ {
878
+ basePie: _basePie = defaultBasePie,
879
+ categoryText: _categoryText = defaultCategoryText,
880
+ decorate2: _decorate2 = defaultDecorate2,
881
+ current: _current = defaultCurrent,
882
+ } = {
883
+ basePie: defaultBasePie,
884
+ categoryText: defaultCategoryText,
885
+ decorate2: defaultDecorate2,
886
+ current: defaultCurrent,
887
+ }
888
+ ) => ({
889
+ name: 'fan',
890
+ displayName: '环图属性',
891
+ value: [
892
+ basePie(_basePie),
893
+ categoryText(_categoryText),
894
+ decorate2(_decorate2),
895
+ current(_current),
896
+ ],
897
+ });
898
+
899
+ const defaultPie = {
900
+ fan: {
901
+ chart: { rose: false, baseRadius: 0.5, outerRadius: 1, innerRadius: 0 },
902
+ angle: { startAngle: 0, endAngle: 360, antiClockwise: false },
903
+ stroke: { show: false, strokeWidth: 1, color: '#FFFFFF' },
904
+ },
905
+ };
906
+
907
+ export default ({
908
+ fan: {
909
+ chart: {
910
+ outerRadius = defaultPie.fan.chart.outerRadius,
911
+ rose = defaultPie.fan.chart.rose,
912
+ baseRadius = defaultPie.fan.chart.baseRadius,
913
+ } = defaultPie.fan.chart,
914
+ angle: {
915
+ startAngle = defaultPie.fan.angle.startAngle,
916
+ endAngle = defaultPie.fan.angle.endAngle,
917
+ antiClockwise = defaultPie.fan.angle.antiClockwise,
918
+ } = defaultPie.fan.angle,
919
+ stroke: {
920
+ show = defaultPie.fan.stroke.show,
921
+ strokeWidth = defaultPie.fan.stroke.strokeWidth,
922
+ color = defaultPie.fan.stroke.color,
923
+ } = defaultPie.fan.stroke,
924
+ } = defaultPie.fan,
925
+ } = defaultPie) => ({
926
+ name: 'fan',
927
+ displayName: '饼图属性',
928
+ value: [
929
+ {
930
+ name: 'chart',
931
+ displayName: '图形',
932
+ value: [
933
+ {
934
+ name: 'outerRadius',
935
+ displayName: '半径',
936
+ value: outerRadius,
937
+ type: 'range',
938
+ config: {
939
+ min: 0,
940
+ max: 1,
941
+ step: 0.01,
942
+ },
943
+ },
944
+ {
945
+ name: 'rose',
946
+ displayName: '类玫瑰图',
947
+ value: rose,
948
+ type: 'boolean',
949
+ },
950
+ {
951
+ rule: [['rose', '$eq', true]],
952
+ name: 'baseRadius',
953
+ displayName: '最小半径',
954
+ value: baseRadius,
955
+ type: 'range',
956
+ config: {
957
+ min: 0,
958
+ max: 1,
959
+ step: 0.01,
960
+ },
961
+ },
962
+ ],
963
+ config: {
964
+ defaultOpen: true,
965
+ },
966
+ },
967
+ {
968
+ name: 'angle',
969
+ displayName: '角度',
970
+ value: [
971
+ {
972
+ name: 'startAngle',
973
+ displayName: '起始',
974
+ value: startAngle,
975
+ type: 'range',
976
+ config: {
977
+ step: 1,
978
+ min: 0,
979
+ max: 360,
980
+ },
981
+ },
982
+ {
983
+ name: 'endAngle',
984
+ displayName: '结束',
985
+ value: endAngle,
986
+ type: 'range',
987
+ config: {
988
+ step: 1,
989
+ min: 0,
990
+ max: 360,
991
+ },
992
+ },
993
+ {
994
+ name: 'antiClockwise',
995
+ displayName: '反向',
996
+ value: antiClockwise,
997
+ type: 'boolean',
998
+ tip: '启用使用另一时针顺序绘制饼图',
999
+ },
1000
+ ],
1001
+ config: {
1002
+ defaultOpen: true,
1003
+ },
1004
+ },
1005
+ {
1006
+ name: 'stroke',
1007
+ displayName: '描边',
1008
+ value: [
1009
+ {
1010
+ name: 'show',
1011
+ displayName: '开启',
1012
+ value: show,
1013
+ type: 'boolean',
1014
+ },
1015
+ {
1016
+ rule: [['show', '$eq', true]],
1017
+ name: 'strokeWidth',
1018
+ displayName: '宽度',
1019
+ value: strokeWidth,
1020
+ type: 'number',
1021
+ },
1022
+ {
1023
+ rule: [['show', '$eq', true]],
1024
+ name: 'color',
1025
+ displayName: '颜色',
1026
+ value: color,
1027
+ type: 'color',
1028
+ },
1029
+ ],
1030
+ config: {
1031
+ defaultOpen: true,
1032
+ },
1033
+ },
1034
+ ],
1035
+ });