7fa943eb
梁灏
init
|
1
2
3
|
<template>
<div :style="circleSize" :class="wrapClasses">
<svg viewBox="0 0 100 100">
|
b40e2e96
梁灏
Circle add prop d...
|
4
5
|
<path :d="pathString" :stroke="trailColor" :stroke-width="trailWidth" :fill-opacity="0" :style="trailStyle" />
<path :d="pathString" :stroke-linecap="strokeLinecap" :stroke="strokeColor" :stroke-width="computedStrokeWidth" fill-opacity="0" :style="pathStyle" />
|
7fa943eb
梁灏
init
|
6
7
8
9
10
11
12
13
14
15
16
17
|
</svg>
<div :class="innerClasses">
<slot></slot>
</div>
</div>
</template>
<script>
import { oneOf } from '../../utils/assist';
const prefixCls = 'ivu-chart-circle';
export default {
|
e6508e27
梁灏
update Circle & S...
|
18
|
name: 'iCircle',
|
7fa943eb
梁灏
init
|
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
props: {
percent: {
type: Number,
default: 0
},
size: {
type: Number,
default: 120
},
strokeWidth: {
type: Number,
default: 6
},
strokeColor: {
type: String,
|
0baa35a0
梁灏
update Circle col...
|
34
|
default: '#2d8cf0'
|
7fa943eb
梁灏
init
|
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
},
strokeLinecap: {
validator (value) {
return oneOf(value, ['square', 'round']);
},
default: 'round'
},
trailWidth: {
type: Number,
default: 5
},
trailColor: {
type: String,
default: '#eaeef2'
|
b40e2e96
梁灏
Circle add prop d...
|
49
50
51
52
|
},
dashboard: {
type: Boolean,
default: false
|
7fa943eb
梁灏
init
|
53
54
55
56
57
58
59
60
61
|
}
},
computed: {
circleSize () {
return {
width: `${this.size}px`,
height: `${this.size}px`
};
},
|
b40e2e96
梁灏
Circle add prop d...
|
62
63
64
|
computedStrokeWidth () {
return this.percent === 0 && this.dashboard ? 0 : this.strokeWidth;
},
|
7fa943eb
梁灏
init
|
65
66
67
68
|
radius () {
return 50 - this.strokeWidth / 2;
},
pathString () {
|
b40e2e96
梁灏
Circle add prop d...
|
69
70
71
72
73
74
75
76
77
|
if (this.dashboard) {
return `M 50,50 m 0,${this.radius}
a ${this.radius},${this.radius} 0 1 1 0,-${2 * this.radius}
a ${this.radius},${this.radius} 0 1 1 0,${2 * this.radius}`;
} else {
return `M 50,50 m 0,-${this.radius}
a ${this.radius},${this.radius} 0 1 1 0,${2 * this.radius}
a ${this.radius},${this.radius} 0 1 1 0,-${2 * this.radius}`;
}
|
7fa943eb
梁灏
init
|
78
79
80
81
|
},
len () {
return Math.PI * 2 * this.radius;
},
|
b40e2e96
梁灏
Circle add prop d...
|
82
83
84
85
86
87
88
|
trailStyle () {
let style = {};
if (this.dashboard) {
style = {
'stroke-dasharray': `${this.len - 75}px ${this.len}px`,
'stroke-dashoffset': `-${75 / 2}px`,
'transition': 'stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s'
|
5f12f09b
梁灏
update code format
|
89
|
};
|
b40e2e96
梁灏
Circle add prop d...
|
90
91
92
|
}
return style;
},
|
7fa943eb
梁灏
init
|
93
|
pathStyle () {
|
b40e2e96
梁灏
Circle add prop d...
|
94
95
96
97
98
|
let style = {};
if (this.dashboard) {
style = {
'stroke-dasharray': `${(this.percent / 100) * (this.len - 75)}px ${this.len}px`,
'stroke-dashoffset': `-${75 / 2}px`,
|
9d6b35e4
梁灏
Progress add prop...
|
99
|
'transition': 'stroke-dashoffset .3s ease 0s, stroke-dasharray .6s ease 0s, stroke .6s, stroke-width .06s ease .6s'
|
b40e2e96
梁灏
Circle add prop d...
|
100
101
102
103
104
|
};
} else {
style = {
'stroke-dasharray': `${this.len}px ${this.len}px`,
'stroke-dashoffset': `${((100 - this.percent) / 100 * this.len)}px`,
|
9d6b35e4
梁灏
Progress add prop...
|
105
|
'transition': 'stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease'
|
b40e2e96
梁灏
Circle add prop d...
|
106
107
108
|
};
}
return style;
|
7fa943eb
梁灏
init
|
109
110
111
112
113
114
115
116
|
},
wrapClasses () {
return `${prefixCls}`;
},
innerClasses () {
return `${prefixCls}-inner`;
}
}
|
b0893113
jingsam
add eslint
|
117
118
|
};
</script>
|