Browse Source

事件处理分析图表

dev-烟台0301
jiangyy 3 years ago
parent
commit
04d7db2ddd
  1. 6
      src/views/modules/visual/communityGovern/shijianchuli/chart.js
  2. 2
      src/views/modules/visual/communityGovern/shijianchuli/shijianchulifenxi copy.vue
  3. 558
      src/views/modules/visual/communityGovern/shijianchuli/shijianchulifenxi.vue

6
src/views/modules/visual/communityGovern/shijianchuli/chart.js

@ -7,7 +7,8 @@
* @param pieHeight 立体的高度
* @param opacity 饼或者环的透明度
*/
const getPie3D = (pieData, internalDiameterRatio, distance, alpha, pieHeight, opacity = 1) => {
const getPie3D = (pieData, internalDiameterRatio, distance, alpha, pieHeight, opacity = 1,beta) => {
const series = []
let sumValue = 0
let startValue = 0
@ -156,7 +157,7 @@
viewControl: {
// 3d效果可以放大、旋转等,请自己去查看官方配置
alpha, // 角度
beta: -40,
beta,
distance, // 调整视角到主体的距离,类似调整zoom
rotateSensitivity: 0, // 设置为0无法旋转
zoomSensitivity: 0, // 设置为0无法缩放
@ -245,6 +246,7 @@ const getParametricEquation = (startRatio, endRatio, isSelected, isHovered, k, h
* 获取3d丙图的最高扇区的高度
*/
const getHeight3D = (series, height) => {
series.sort((a, b) => {
return b.pieData.value - a.pieData.value
})

2
src/views/modules/visual/communityGovern/shijianchuli/shijianchulifenxi copy.vue

@ -637,8 +637,6 @@ export default {
};
// element.selected = !element.selected
} else {
element.selected = false
element.label = {
show: false,

558
src/views/modules/visual/communityGovern/shijianchuli/shijianchulifenxi.vue

@ -190,6 +190,16 @@ export default {
value: 72
}
],
optionDataLine: [
{
name: '处理中',
value: 50
},
{
name: '已完成',
value: 50
}
],
statusChart: null,
option: {},
@ -300,6 +310,9 @@ export default {
showProject: false,
eventId: '',
beta: 20,
selectedIndex: ''
};
},
// mixins: [animate]
@ -360,7 +373,7 @@ export default {
}
if (index !== '0' && isRefresh) {
await this.getApiData()
// this.assignPieChart()
}
@ -368,7 +381,7 @@ export default {
assignData () {
this.initChart()
// this.getPie()
this.getLine()
},
@ -444,16 +457,68 @@ export default {
url: require('@/assets/img/shuju/measure/lv@2x.png')
}
]
let dataClosed = Math.floor(data.closedRatio * 10000) / 100
let dataPro = Math.floor(data.processingRatio * 10000) / 100
if (data.closedRatio === 0 && data.processingRatio === 0) {
dataClosed = 50
dataPro = 50
}
let dataClosedLine = Math.floor(data.closedRatio * 10000) / 100
let dataProLine = Math.floor(data.processingRatio * 10000) / 100
// dataClosed = 5
// dataPro = 95
// dataClosed = 10
// dataPro = 90
// dataClosed = 20
// dataPro = 80
// dataClosed = 30
// dataPro = 70
// dataClosed = 40
// dataPro = 60
// dataClosed = 50
// dataPro = 50
if (Math.abs(dataClosed - dataPro) > 80) {
this.beta = 70
} else if (Math.abs(dataClosed - dataPro) > 70) {
this.beta = 60
} else if (Math.abs(dataClosed - dataPro) > 50) {
this.beta = 20
} else if (Math.abs(dataClosed - dataPro) > 30) {
this.beta = -20
} else if (Math.abs(dataClosed - dataPro) > 10) {
this.beta = -30
} else {
this.beta = -60
}
this.optionData = [
{
name: "已完成",
value: dataClosed
},
{
name: "处理中",
value: dataPro
},
]
this.optionDataLine = [
{
name: "已完成",
value: Math.floor(data.closedRatio * 10000) / 100
value: dataClosedLine
},
{
name: "处理中",
value: Math.floor(data.processingRatio * 10000) / 100
value: dataProLine
},
]
this.setLabel()
@ -596,101 +661,68 @@ export default {
}, true)
},
getPie () {
if (this.pieInitState) {
this.assignPieChart()
} else {
setTimeout(() => {
this.getPie()
}, 500)
}
},
//
async assignPieChart () {
let maxIndex = 0
const _that = this
// pieChart
this.pieOption = pieOption(this.pieChartS)
this.pieData[0].selected = false
this.pieData[1].selected = false
this.pieOption.title.text = this.projectTotal
this.clickPie()
let fun = function (params) {
_that.clickPie(params)
}
this.$refs.pieChart.handleClick(fun)
},
clickPie (params) {
setLabel () {
this.optionDataLine.forEach((item, index) => {
let dataIndex = params ? params.dataIndex : null
let componentIndex = params ? params.componentIndex : null
if (componentIndex === 1) {//
if (dataIndex === 0) {
this.processStatus = 'closed_case'
} else if (dataIndex === 1) {
this.processStatus = 'processing'
item.itemStyle = {
color: color[index]
}
} else if (componentIndex === 2) {//
this.processStatus = ''
dataIndex = 3
}
if (dataIndex === 3) {
this.$refs.pieChart.clear()
}
this.pieData.forEach((element, index) => {
if (index === dataIndex) {
element.selected = true
element.label = {
show: true,
};
element.labelLine = {
item.label = {
normal: {
show: true,
lineStyle: {
opacity: 1,
color: color[index],
formatter: [
'{d|{d}%}',
'{b|{b}}'
].join('\n'), // \n
rich: {
b: {
color: '#fff',
lineHeight: 25,
align: 'left',
fontSize: 13,
marginTop: 20
},
c: {
fontSize: 22,
color: '#fff',
textShadowColor: '#1c90a6',
textShadowOffsetX: 0,
textShadowOffsetY: 2,
textShadowBlur: 5
},
d: {
color: color[index],
fontSize: 22,
align: 'left'
}
}
}
}
item.labelLine = {
};
// element.selected = !element.selected
} else {
element.selected = false
element.label = {
show: false,
};
element.labelLine = {
show: false,
normal: {
show: true,
length: 30,
length2: 80,
lineStyle: {
opacity: 0,
color: 'rgba(255,255,255,0)'
width: 1,
color: 'rgba(255,255,255,0.7)'
}
}
}
item.labelLayout = function (params) {
const isLeft = params.labelRect.x < myChart.getWidth() / 2;
const points = params.labelLinePoints;
// Update the end point.
points[2][0] = isLeft
? params.labelRect.x
: params.labelRect.x + params.labelRect.width;
return {
labelLinePoints: points
};
element.selected = false
}
});
this.pieOption.series[1].data = this.pieData
this.demand.pageNo = 1
this.getTable()
// this.$refs.pieChart.hideLoading()
this.$refs.pieChart.setOption(this.pieOption)
},
setLabel () {
})
this.optionData.forEach((item, index) => {
item.itemStyle = {
@ -703,8 +735,6 @@ export default {
formatter: [
'{d|{d}%}',
'{b|{b}}'
].join('\n'), // \n
rich: {
b: {
@ -731,7 +761,9 @@ export default {
}
}
item.labelLine = {
normal: {
show: true,
length: 30,
length2: 80,
lineStyle: {
@ -760,7 +792,8 @@ export default {
// let statusChart = echarts.init(document.getElementById('cityGreenLand-charts'));
this.statusChart = echarts.init(document.getElementById('cityGreenLand'));
// option, 3d,
this.option = getPie3D(this.optionData, 0.8, 300, 28, 22, 0.4)
this.option = getPie3D(this.optionData, 0.8, 300, 28, 22, 0.4, this.beta)
console.log(this.option)
this.statusChart.setOption(this.option)
// label线2d使labelLine3dsetOption
this.option.series.push({
@ -772,14 +805,15 @@ export default {
fontSize: 13,
lineHeight: 20
},
startAngle: 40, // [0, 360]
startAngle: -this.beta, // [0, 360]
clockwise: false, // 3d
radius: ['30%', '35%'],
center: ['50%', '50%'],
data: this.optionData,
data: this.optionDataLine,
itemStyle: {
opacity: 0 //02d
}
},
})
this.statusChart.setOption(this.option)
this.bindListen(this.statusChart)
@ -789,155 +823,205 @@ export default {
//
// optionNameoptionopiton
bindListen (myChart, optionName = 'option') {
let selectedIndex = ''
// let selectedIndex = ''
let hoveredIndex = ''
//
myChart.on('click', (params) => {
debugger
// option.series
const isSelected = !this[optionName].series[params.seriesIndex].pieStatus
.selected
const isHovered =
this[optionName].series[params.seriesIndex].pieStatus.hovered
const k = this[optionName].series[params.seriesIndex].pieStatus.k
const startRatio =
this[optionName].series[params.seriesIndex].pieData.startRatio
const endRatio =
this[optionName].series[params.seriesIndex].pieData.endRatio
// option
if (selectedIndex !== '' && selectedIndex !== params.seriesIndex) {
this[optionName].series[
selectedIndex
].parametricEquation = getParametricEquation(
this[optionName].series[selectedIndex].pieData.startRatio,
this[optionName].series[selectedIndex].pieData.endRatio,
false,
false,
k,
this[optionName].series[selectedIndex].pieData.value
)
this[optionName].series[selectedIndex].pieStatus.selected = false
}
// / option
this[optionName].series[
params.seriesIndex
].parametricEquation = getParametricEquation(
startRatio,
endRatio,
isSelected,
isHovered,
k,
this[optionName].series[params.seriesIndex].pieData.value
)
this[optionName].series[params.seriesIndex].pieStatus.selected = isSelected
// seriesIndex
selectedIndex = isSelected ? params.seriesIndex : null
// 使 option
myChart.setOption(this[optionName])
})
// mouseover
myChart.on('mouseover', (params) => {
//
let isSelected
let isHovered
let startRatio
let endRatio
let k
// mouseover
if (hoveredIndex === params.seriesIndex) {
//
} else {
// option
if (hoveredIndex !== '') {
// option.series false
isSelected = this[optionName].series[hoveredIndex].pieStatus.selected
isHovered = false
startRatio = this[optionName].series[hoveredIndex].pieData.startRatio
endRatio = this[optionName].series[hoveredIndex].pieData.endRatio
k = this[optionName].series[hoveredIndex].pieStatus.k
// option
this[optionName].series[
hoveredIndex
].parametricEquation = getParametricEquation(
startRatio,
endRatio,
isSelected,
isHovered,
k,
this[optionName].series[hoveredIndex].pieData.value
)
this[optionName].series[hoveredIndex].pieStatus.hovered = isHovered
// seriesIndex
hoveredIndex = ''
let dataIndex = null
console.log('params', params)
console.log('params.seriesIndex', params.seriesIndex)
console.log('this[optionName].series', this[optionName].series)
console.log('this[optionName].series[params.seriesIndex]', this[optionName].series[params.seriesIndex])
if (params.componentSubType === 'pie') {//线
dataIndex = params.dataIndex
this.click3DPie(myChart, 'option', dataIndex)
if (dataIndex === 0) {//1
this.processStatus = 'closed_case'
} else if (dataIndex === 1) {//2
this.processStatus = 'processing'
} else {
this.processStatus = ''
}
// mouseover option
if (
params.seriesName !== 'mouseoutSeries' &&
params.seriesName !== 'pie2d'
) {
// option.series true
isSelected =
this[optionName].series[params.seriesIndex].pieStatus.selected
isHovered = true
startRatio =
this[optionName].series[params.seriesIndex].pieData.startRatio
endRatio = this[optionName].series[params.seriesIndex].pieData.endRatio
k = this[optionName].series[params.seriesIndex].pieStatus.k
// option
this[optionName].series[
params.seriesIndex
].parametricEquation = getParametricEquation(
startRatio,
endRatio,
isSelected,
isHovered,
k,
this[optionName].series[params.seriesIndex].pieData.value + 60
)
this[optionName].series[
params.seriesIndex
].pieStatus.hovered = isHovered
// seriesIndex
hoveredIndex = params.seriesIndex
if (!this.selectedIndex) {
this.processStatus = ''
}
// 使 option
myChart.setOption(this[optionName])
}
})
// bug
myChart.on('globalout', () => {
//
let isSelected
let isHovered
let startRatio
let endRatio
let k
if (hoveredIndex !== '') {
// option.series true
isSelected = this[optionName].series[hoveredIndex].pieStatus.selected
isHovered = false
k = this[optionName].series[hoveredIndex].pieStatus.k
startRatio = this[optionName].series[hoveredIndex].pieData.startRatio
endRatio = this[optionName].series[hoveredIndex].pieData.endRatio
// option
this[optionName].series[
hoveredIndex
].parametricEquation = getParametricEquation(
startRatio,
endRatio,
isSelected,
isHovered,
k,
this[optionName].series[hoveredIndex].pieData.value
)
this[optionName].series[hoveredIndex].pieStatus.hovered = isHovered
// seriesIndex
hoveredIndex = ''
} else {//
dataIndex = params.seriesIndex
this.click3DPie(myChart, 'option', dataIndex)
//table
if (this.selectedIndex || this.selectedIndex === 0) {
if (this.selectedIndex === 0) {
this.processStatus = 'closed_case'
} else if (this.selectedIndex === 1) {
this.processStatus = 'processing'
}
} else {
this.processStatus = ''
}
}
// 使 option
myChart.setOption(this[optionName])
this.getTable()
})
// mouseover
// myChart.on('mouseover', (params) => {
// //
// let isSelected
// let isHovered
// let startRatio
// let endRatio
// let k
// // mouseover
// if (hoveredIndex === params.seriesIndex) {
// //
// } else {
// // option
// if (hoveredIndex !== '') {
// // option.series false
// isSelected = this[optionName].series[hoveredIndex].pieStatus.selected
// isHovered = false
// startRatio = this[optionName].series[hoveredIndex].pieData.startRatio
// endRatio = this[optionName].series[hoveredIndex].pieData.endRatio
// k = this[optionName].series[hoveredIndex].pieStatus.k
// // option
// this[optionName].series[
// hoveredIndex
// ].parametricEquation = getParametricEquation(
// startRatio,
// endRatio,
// isSelected,
// isHovered,
// k,
// this[optionName].series[hoveredIndex].pieData.value
// )
// this[optionName].series[hoveredIndex].pieStatus.hovered = isHovered
// // seriesIndex
// hoveredIndex = ''
// }
// // mouseover option
// if (
// params.seriesName !== 'mouseoutSeries' &&
// params.seriesName !== 'pie2d'
// ) {
// // option.series true
// isSelected =
// this[optionName].series[params.seriesIndex].pieStatus.selected
// isHovered = true
// startRatio =
// this[optionName].series[params.seriesIndex].pieData.startRatio
// endRatio = this[optionName].series[params.seriesIndex].pieData.endRatio
// k = this[optionName].series[params.seriesIndex].pieStatus.k
// // option
// this[optionName].series[
// params.seriesIndex
// ].parametricEquation = getParametricEquation(
// startRatio,
// endRatio,
// isSelected,
// isHovered,
// k,
// this[optionName].series[params.seriesIndex].pieData.value + 60
// )
// this[optionName].series[
// params.seriesIndex
// ].pieStatus.hovered = isHovered
// // seriesIndex
// hoveredIndex = params.seriesIndex
// }
// // 使 option
// myChart.setOption(this[optionName])
// }
// })
// // bug
// myChart.on('globalout', () => {
// //
// let isSelected
// let isHovered
// let startRatio
// let endRatio
// let k
// if (hoveredIndex !== '') {
// // option.series true
// isSelected = this[optionName].series[hoveredIndex].pieStatus.selected
// isHovered = false
// k = this[optionName].series[hoveredIndex].pieStatus.k
// startRatio = this[optionName].series[hoveredIndex].pieData.startRatio
// endRatio = this[optionName].series[hoveredIndex].pieData.endRatio
// // option
// this[optionName].series[
// hoveredIndex
// ].parametricEquation = getParametricEquation(
// startRatio,
// endRatio,
// isSelected,
// isHovered,
// k,
// this[optionName].series[hoveredIndex].pieData.value
// )
// this[optionName].series[hoveredIndex].pieStatus.hovered = isHovered
// // seriesIndex
// hoveredIndex = ''
// }
// // 使 option
// myChart.setOption(this[optionName])
// })
},
click3DPie (myChart, optionName, seriesIndex) {
// option.series
const isSelected = !this[optionName].series[seriesIndex].pieStatus.selected
const isHovered = this[optionName].series[seriesIndex].pieStatus.hovered
const k = this[optionName].series[seriesIndex].pieStatus.k
const startRatio = this[optionName].series[seriesIndex].pieData.startRatio
const endRatio = this[optionName].series[seriesIndex].pieData.endRatio
// option
if (this.selectedIndex !== '' && this.selectedIndex !== null && this.selectedIndex !== seriesIndex) {
this[optionName].series[
this.selectedIndex
].parametricEquation = getParametricEquation(
this[optionName].series[this.selectedIndex].pieData.startRatio,
this[optionName].series[this.selectedIndex].pieData.endRatio,
false,
false,
k,
this[optionName].series[this.selectedIndex].pieData.value
)
this[optionName].series[this.selectedIndex].pieStatus.selected = false
}
// / option
this[optionName].series[
seriesIndex
].parametricEquation = getParametricEquation(
startRatio,
endRatio,
isSelected,
isHovered,
k,
this[optionName].series[seriesIndex].pieData.value
)
this[optionName].series[seriesIndex].pieStatus.selected = isSelected
// seriesIndex
this.selectedIndex = isSelected ? seriesIndex : null
// 使 option
myChart.setOption(this[optionName])
},
handleChangeAgency () {

Loading…
Cancel
Save