Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
SuperMan
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
罗超
SuperMan
Commits
ecdf09a2
Commit
ecdf09a2
authored
6 months ago
by
youjie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
97621247
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
472 deletions
+0
-472
IncomeShare copy.vue
...le/DataAnalysis/components/oneEchart/IncomeShare copy.vue
+0
-472
No files found.
src/components/FinancialModule/DataAnalysis/components/oneEchart/IncomeShare copy.vue
deleted
100644 → 0
View file @
97621247
<
template
>
<div
class=
"echartsBox"
>
<div
class=
"titleBox"
style=
"position: relative;"
>
<h3>
月度收入占比 %
</h3>
<div
style=
"margin-left: 20px;position: absolute;top: 5px;left: 140px;"
>
<el-select
v-model=
"CurrentMonth"
@
change=
"getEchart"
style=
"width: 120px;"
size=
"small"
>
<el-option
v-for=
"item in MonthList"
:label=
"item"
:value=
"item"
:key=
"item"
></el-option>
</el-select>
</div>
</div>
<div
style=
"background: #fff;"
>
<div
id=
"ShareMyEchart"
class=
"allMyEchartBox"
style=
"width: 500px;height: 300px;"
></div>
</div>
</div>
</
template
>
<
script
src=
"https://cdn.bootcdn.net/ajax/libs/echarts-gl/2.0.4/echarts-gl.min.js"
></
script
>
<
script
>
export
default
{
props
:[
'msgData'
,
'StatisticalData'
],
data
()
{
return
{
MonthList
:
[],
//月份列表
LineAnalysisDataHZ
:
[],
//各线路统计
CostAnalysisData
:
[],
//各成本统计
colorList
:[
'#089bab'
,
'#FFA171'
,
'#72b8ff'
,
'#ff9cc6'
,
'#7b78ff'
,
'#28cc90'
,
'#ee8fff'
,
'#5cf2ff'
,
'#ff9a00'
,
'#4fc4f7'
,
'#738eff'
,
'#b0edff'
,
'rgba(228,57,57,.9)'
,
'rgba(248,126,46,1)'
,
'rgba(252,196,34,.7)'
,
'#3DD948'
,
'#39CAE4'
,
'rgba(44,49,241,.6)'
,
'rgba(122,57,228,.5)'
,
'#E65FC1'
,
'#D0B478'
,
'#BABABA'
,
'rgba(228,57,57,.7)'
,
'rgba(247,154,44,.7)'
,
'rgba(255,246,11,.7)'
,
'rgba(61,217,72,.7)'
,
'rgba(57,202,228,.7)'
,
'rgba(44,49,241,.7)'
,
'rgba(122,57,228,.7)'
],
CurrentMonth
:
null
}
},
created
()
{
window
.
addEventListener
(
'resize'
,
this
.
handleResize
);
},
destroyed
()
{
window
.
removeEventListener
(
'resize'
,
this
.
handleResize
);
},
watch
:
{
StatisticalData
:{
handler
(
n
,
o
){
this
.
MonthList
=
n
.
MonthList
//月份列表
this
.
LineAnalysisDataHZ
=
n
.
LineAnalysisDataHZ
//各线路统计
this
.
CostAnalysisData
=
n
.
CostAnalysisData
//各成本统计
this
.
CurrentMonth
=
this
.
MonthList
[
this
.
MonthList
.
length
-
1
]
// this.getEchart()
// this.initChartR2()
},
deep
:
true
,
immediate
:
false
,
}
},
mounted
()
{
this
.
initChartR2
()
},
methods
:
{
handleResize
()
{
location
.
reload
()
},
getEchart
(){
// return
let
datas
=
[{
name
:
this
.
CurrentMonth
,
type
:
'pie'
,
radius
:
'50%'
,
data
:
[],
// 绑定实时数据数组
emphasis
:
{
itemStyle
:
{
shadowBlur
:
5
,
shadowOffsetX
:
0
,
shadowColor
:
'rgba(0, 0, 0, 0.5)'
}
}
}]
let
titles
=
[]
let
Stocklegend
=
{}
let
Newobj
=
{}
this
.
LineAnalysisDataHZ
.
forEach
((
x
,
indexs
)
=>
{
let
Name
=
`
${
x
.
Name
}
`
if
(
Name
!=
'合计'
){
titles
.
push
(
Name
)
let
newDetailList
=
[]
x
.
DetailList
.
forEach
(
y
=>
{
if
(
y
.
Month
==
this
.
CurrentMonth
)
{
newDetailList
.
push
(
y
)
}
})
if
(
newDetailList
.
length
>
0
){
newDetailList
.
forEach
((
y
,
index
)
=>
{
datas
[
0
].
data
.
push
({
value
:
y
.
IncomeRate
,
name
:
x
.
Name
,
})
})
}
// if(indexs>3){
// let name=x.Name;
// Newobj[name]=false;
// }
// Stocklegend=Newobj;
}
})
let
chartDom
=
document
.
getElementById
(
'ShareMyEchart'
);
let
myChart
=
this
.
$echarts
.
init
(
chartDom
);
let
option
option
=
{
color
:
this
.
colorList
,
tooltip
:
{
trigger
:
'item'
},
legend
:
{
bottom
:
'bottom'
,
left
:
'left'
,
type
:
'scroll'
,
icon
:
"circle"
,
padding
:
[
25
,
20
,
20
,
20
]
,
selected
:
Stocklegend
},
series
:
datas
}
myChart
.
setOption
(
option
,
true
)
},
initChartR2
()
{
let
chartDom
=
document
.
getElementById
(
'ShareMyEchart'
);
let
myChart
=
this
.
$echarts
.
init
(
chartDom
);
function
getParametricEquation
(
startRatio
,
endRatio
,
isSelected
,
isHovered
,
k
,
height
)
{
// 计算
const
midRatio
=
(
startRatio
+
endRatio
)
/
2
const
startRadian
=
startRatio
*
Math
.
PI
*
2
const
endRadian
=
endRatio
*
Math
.
PI
*
2
const
midRadian
=
midRatio
*
Math
.
PI
*
2
// 如果只有一个扇形,则不实现选中效果。
if
(
startRatio
===
0
&&
endRatio
===
1
)
{
isSelected
=
false
}
// 通过扇形内径/外径的值,换算出辅助参数 k(默认值 1/3)
k
=
typeof
k
!==
'undefined'
?
k
:
1
/
3
// 计算选中效果分别在 x 轴、y 轴方向上的位移(未选中,则位移均为 0)
const
offsetX
=
isSelected
?
Math
.
cos
(
midRadian
)
*
0.1
:
0
const
offsetY
=
isSelected
?
Math
.
sin
(
midRadian
)
*
0.1
:
0
// 计算高亮效果的放大比例(未高亮,则比例为 1)
const
hoverRate
=
isHovered
?
1.05
:
1
// 返回曲面参数方程
return
{
u
:
{
min
:
-
Math
.
PI
,
max
:
Math
.
PI
*
3
,
step
:
Math
.
PI
/
32
},
v
:
{
min
:
0
,
max
:
Math
.
PI
*
2
,
step
:
Math
.
PI
/
20
},
x
:
function
(
u
,
v
)
{
if
(
u
<
startRadian
)
{
return
(
offsetX
+
Math
.
cos
(
startRadian
)
*
(
1
+
Math
.
cos
(
v
)
*
k
)
*
hoverRate
)
}
if
(
u
>
endRadian
)
{
return
(
offsetX
+
Math
.
cos
(
endRadian
)
*
(
1
+
Math
.
cos
(
v
)
*
k
)
*
hoverRate
)
}
return
offsetX
+
Math
.
cos
(
u
)
*
(
1
+
Math
.
cos
(
v
)
*
k
)
*
hoverRate
},
y
:
function
(
u
,
v
)
{
if
(
u
<
startRadian
)
{
return
(
offsetY
+
Math
.
sin
(
startRadian
)
*
(
1
+
Math
.
cos
(
v
)
*
k
)
*
hoverRate
)
}
if
(
u
>
endRadian
)
{
return
(
offsetY
+
Math
.
sin
(
endRadian
)
*
(
1
+
Math
.
cos
(
v
)
*
k
)
*
hoverRate
)
}
return
offsetY
+
Math
.
sin
(
u
)
*
(
1
+
Math
.
cos
(
v
)
*
k
)
*
hoverRate
},
z
:
function
(
u
,
v
)
{
if
(
u
<
-
Math
.
PI
*
0.5
)
{
return
Math
.
sin
(
u
)
}
if
(
u
>
Math
.
PI
*
2.5
)
{
return
Math
.
sin
(
u
)
}
return
Math
.
sin
(
v
)
>
0
?
1
*
height
:
-
1
}
}
}
// 生成模拟 3D 饼图的配置项
function
getPie3D
(
pieData
,
internalDiameterRatio
)
{
const
series
=
[]
let
sumValue
=
0
let
startValue
=
0
let
endValue
=
0
const
legendData
=
[]
const
k
=
typeof
internalDiameterRatio
!==
'undefined'
?
(
1
-
internalDiameterRatio
)
/
(
1
+
internalDiameterRatio
)
:
1
/
3
// 为每一个饼图数据,生成一个 series-surface 配置
for
(
let
i
=
0
;
i
<
pieData
.
length
;
i
++
)
{
sumValue
+=
pieData
[
i
].
value
const
seriesItem
=
{
name
:
typeof
pieData
[
i
].
name
===
'undefined'
?
`series
${
i
}
`
:
pieData
[
i
].
name
,
type
:
'surface'
,
parametric
:
true
,
wireframe
:
{
show
:
false
},
pieData
:
pieData
[
i
],
pieStatus
:
{
selected
:
false
,
hovered
:
false
,
k
:
k
}
}
if
(
typeof
pieData
[
i
].
itemStyle
!==
'undefined'
)
{
const
itemStyle
=
{}
typeof
pieData
[
i
].
itemStyle
.
color
!==
'undefined'
?
(
itemStyle
.
color
=
pieData
[
i
].
itemStyle
.
color
)
:
null
typeof
pieData
[
i
].
itemStyle
.
opacity
!==
'undefined'
?
(
itemStyle
.
opacity
=
pieData
[
i
].
itemStyle
.
opacity
)
:
null
seriesItem
.
itemStyle
=
itemStyle
}
series
.
push
(
seriesItem
)
}
// 使用上一次遍历时,计算出的数据和 sumValue,调用 getParametricEquation 函数,
// 向每个 series-surface 传入不同的参数方程 series-surface.parametricEquation,也就是实现每一个扇形。
for
(
let
i
=
0
;
i
<
series
.
length
;
i
++
)
{
endValue
=
startValue
+
series
[
i
].
pieData
.
value
series
[
i
].
pieData
.
startRatio
=
startValue
/
sumValue
series
[
i
].
pieData
.
endRatio
=
endValue
/
sumValue
series
[
i
].
parametricEquation
=
getParametricEquation
(
series
[
i
].
pieData
.
startRatio
,
series
[
i
].
pieData
.
endRatio
,
false
,
false
,
k
,
2000
)
startValue
=
endValue
legendData
.
push
(
series
[
i
].
name
)
}
return
series
}
// 传入数据生成 option
const
optionsData
=
[
{
name
:
'国际货代'
,
value
:
13.87
,
itemStyle
:
{
opacity
:
0.5
,
color
:
'#7bc35a'
}
},
{
name
:
'租赁业务'
,
value
:
0.6
,
itemStyle
:
{
opacity
:
0.5
,
color
:
'#2f97df'
}
},
{
name
:
'仓储装卸'
,
value
:
9.53
,
itemStyle
:
{
opacity
:
0.5
,
color
:
'#4268d6'
}
},
{
name
:
'干线运输'
,
value
:
72.17
,
itemStyle
:
{
opacity
:
0.5
,
color
:
'#d35e5f'
}
},
{
name
:
'配送业务'
,
value
:
3.67
,
itemStyle
:
{
opacity
:
0.5
,
color
:
'#c2c763'
}
},
{
name
:
'其他业务'
,
value
:
0.17
,
itemStyle
:
{
opacity
:
0.5
,
color
:
'#8fdffe'
}
}
]
const
series
=
getPie3D
(
optionsData
.
map
(
item
=>
{
if
(
item
.
value
<
5
)
{
item
.
value
=
5
}
return
item
}),
0
,
240
,
28
,
26
,
0.5
)
series
.
push
({
name
:
'pie2d'
,
type
:
'pie'
,
label
:
{
opacity
:
1
,
position
:
'outside'
,
fontSize
:
12
,
lineHeight
:
20
,
textStyle
:
{
fontSize
:
12
,
color
:
'#fff'
}
},
labelLine
:
{
length
:
30
,
length2
:
30
},
minAngle
:
10
,
startAngle
:
-
50
,
// 起始角度,支持范围[0, 360]。
clockwise
:
false
,
// 饼图的扇区是否是顺时针排布。上述这两项配置主要是为了对齐3d的样式
radius
:
[
'0'
,
'25%'
],
center
:
[
'50%'
,
'50%'
],
data
:
optionsData
.
map
(
item
=>
{
item
.
itemStyle
.
opacity
=
0
return
item
})
})
// 准备待返回的配置项,把准备好的 legendData、series 传入。
const
option
=
{
legend
:
{
show
:
false
},
animation
:
true
,
tooltip
:
{
formatter
:
(
params
)
=>
{
if
(
params
.
seriesName
!==
'mouseoutSeries'
&&
params
.
seriesName
!==
'pie2d'
)
{
return
`
${
params
.
seriesName
}
<br/><span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:
${
params
.
color
}
;"></span>
${
option
.
series
[
params
.
seriesIndex
].
pieData
.
value
+
'%'
}
`
}
},
textStyle
:
{
fontSize
:
14
}
},
title
:
{
x
:
'center'
,
top
:
'20'
,
textStyle
:
{
color
:
'#fff'
,
fontSize
:
22
}
},
// backgroundColor: '#0E3567',
labelLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#7BC0CB'
},
normal
:
{
show
:
true
,
length
:
10
,
length2
:
10
}
},
label
:
{
show
:
true
,
position
:
'outside'
,
formatter
:
'{b}
\
n{d}%'
,
textStyle
:
{
color
:
'#fff'
,
fontSize
:
'12px'
}
},
xAxis3D
:
{
min
:
-
1
,
max
:
1
},
yAxis3D
:
{
min
:
-
1
,
max
:
1
},
zAxis3D
:
{
min
:
-
1
,
max
:
1
},
grid3D
:
{
show
:
false
,
boxHeight
:
0.01
,
// top: '30%',
bottom
:
'50%'
,
// environment: "rgba(255,255,255,0)",
viewControl
:
{
distance
:
300
,
alpha
:
35
,
beta
:
60
,
autoRotate
:
false
// 自动旋转
}
},
series
:
series
}
myChart
.
setOption
(
option
)
}
}
}
</
script
>
<
style
>
</
style
>
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment