|
|
@ -1,26 +1,34 @@ |
|
|
|
<template> |
|
|
|
<div class="types-dissatisfaction" |
|
|
|
v-loading="loading" |
|
|
|
element-loading-text="加载中..." |
|
|
|
element-loading-spinner="el-icon-loading" |
|
|
|
element-loading-background="rgba(0,0,0,0.5)" |
|
|
|
<div |
|
|
|
class="types-dissatisfaction" |
|
|
|
v-loading="loading" |
|
|
|
element-loading-text="加载中..." |
|
|
|
element-loading-spinner="el-icon-loading" |
|
|
|
element-loading-background="rgba(0,0,0,0.5)" |
|
|
|
> |
|
|
|
<div class="screen"> |
|
|
|
<Tabs v-model="resultType" :list="resultTypeList" @changeVal="resultTypeChange"/> |
|
|
|
<el-select v-model="typeCondition" |
|
|
|
popper-class="selectPopClass" |
|
|
|
placeholder="请选择" |
|
|
|
class="select" |
|
|
|
@change="timeChange"> |
|
|
|
<Tabs |
|
|
|
v-model="resultType" |
|
|
|
:list="resultTypeList" |
|
|
|
@changeVal="resultTypeChange" |
|
|
|
/> |
|
|
|
<el-select |
|
|
|
v-model="typeCondition" |
|
|
|
popper-class="selectPopClass" |
|
|
|
placeholder="请选择" |
|
|
|
class="select" |
|
|
|
@change="timeChange" |
|
|
|
> |
|
|
|
<el-option |
|
|
|
v-for="item in typeConditionList" |
|
|
|
:key="item.value" |
|
|
|
:label="item.label" |
|
|
|
:value="item.value"> |
|
|
|
v-for="item in typeConditionList" |
|
|
|
:key="item.value" |
|
|
|
:label="item.label" |
|
|
|
:value="item.value" |
|
|
|
> |
|
|
|
</el-option> |
|
|
|
</el-select> |
|
|
|
</div> |
|
|
|
<div id="typeConditionChart" style="height: 542px;"></div> |
|
|
|
<div id="typeConditionChart" style="height: 542px"></div> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
|
|
|
@ -30,47 +38,52 @@ import Tabs from "@/views/dataBoard/satisfactionEval/components/Tabs/index.vue"; |
|
|
|
|
|
|
|
export default { |
|
|
|
name: "TypesOfDissatisfaction", |
|
|
|
components: {Tabs}, |
|
|
|
components: { Tabs }, |
|
|
|
data() { |
|
|
|
return { |
|
|
|
resultType: 1, |
|
|
|
resultTypeList: [{ |
|
|
|
label: ' 按省调查/社区自查结果', |
|
|
|
value: 1 |
|
|
|
|
|
|
|
}, { |
|
|
|
label: '按12345热线投诉结果', |
|
|
|
value: 2 |
|
|
|
|
|
|
|
}], |
|
|
|
resultTypeList: [ |
|
|
|
{ |
|
|
|
label: " 按省调查/社区自查结果", |
|
|
|
value: 1, |
|
|
|
}, |
|
|
|
{ |
|
|
|
label: "按12345热线投诉结果", |
|
|
|
value: 2, |
|
|
|
}, |
|
|
|
], |
|
|
|
typeCondition: 1, |
|
|
|
typeConditionList: [ |
|
|
|
{ |
|
|
|
label: '本月', |
|
|
|
value: 1 |
|
|
|
}, { |
|
|
|
label: '上月', |
|
|
|
value: 2 |
|
|
|
}, { |
|
|
|
label: '近三月', |
|
|
|
value: 3 |
|
|
|
}, { |
|
|
|
label: '近半年', |
|
|
|
value: 4 |
|
|
|
}, { |
|
|
|
label: '近一年', |
|
|
|
value: 5 |
|
|
|
label: "本月", |
|
|
|
value: 1, |
|
|
|
}, |
|
|
|
{ |
|
|
|
label: "上月", |
|
|
|
value: 2, |
|
|
|
}, |
|
|
|
{ |
|
|
|
label: "近三月", |
|
|
|
value: 3, |
|
|
|
}, |
|
|
|
{ |
|
|
|
label: "近半年", |
|
|
|
value: 4, |
|
|
|
}, |
|
|
|
{ |
|
|
|
label: "近一年", |
|
|
|
value: 5, |
|
|
|
}, |
|
|
|
], |
|
|
|
loading: true |
|
|
|
} |
|
|
|
loading: true, |
|
|
|
}; |
|
|
|
}, |
|
|
|
watch: { |
|
|
|
"$store.state.chooseArea.chooseName"(val) { |
|
|
|
if (val.orgId) { |
|
|
|
this.getData(); |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
mounted() { |
|
|
|
if (this.$store.state.chooseArea.chooseName.orgId) { |
|
|
@ -80,99 +93,124 @@ export default { |
|
|
|
methods: { |
|
|
|
resultTypeChange(val) { |
|
|
|
if (val !== this.resultType) { |
|
|
|
this.resultType = val |
|
|
|
this.getData() |
|
|
|
this.resultType = val; |
|
|
|
this.getData(); |
|
|
|
} |
|
|
|
}, |
|
|
|
timeChange() { |
|
|
|
let startTime = '', endTime = '' |
|
|
|
let startTime = "", |
|
|
|
endTime = ""; |
|
|
|
if (this.typeCondition === 1) { |
|
|
|
startTime = this.$moment().startOf('month').format('YYYY-MM-DD') |
|
|
|
startTime = this.$moment().startOf("month").format("YYYY-MM-DD"); |
|
|
|
} |
|
|
|
if (this.typeCondition === 2) { |
|
|
|
startTime = this.$moment().subtract(1, 'months').startOf('month').format('YYYY-MM-DD') |
|
|
|
startTime = this.$moment() |
|
|
|
.subtract(1, "months") |
|
|
|
.startOf("month") |
|
|
|
.format("YYYY-MM-DD"); |
|
|
|
} |
|
|
|
if (this.typeCondition === 3) { |
|
|
|
startTime = this.$moment().subtract(2, 'months').startOf('month').format('YYYY-MM-DD') |
|
|
|
startTime = this.$moment() |
|
|
|
.subtract(2, "months") |
|
|
|
.startOf("month") |
|
|
|
.format("YYYY-MM-DD"); |
|
|
|
} |
|
|
|
if (this.typeCondition === 4) { |
|
|
|
startTime = this.$moment().subtract(5, 'months').startOf('month').format('YYYY-MM-DD') |
|
|
|
startTime = this.$moment() |
|
|
|
.subtract(5, "months") |
|
|
|
.startOf("month") |
|
|
|
.format("YYYY-MM-DD"); |
|
|
|
} |
|
|
|
if (this.typeCondition === 5) { |
|
|
|
startTime = this.$moment().subtract(11, 'months').startOf('month').format('YYYY-MM-DD') |
|
|
|
startTime = this.$moment() |
|
|
|
.subtract(11, "months") |
|
|
|
.startOf("month") |
|
|
|
.format("YYYY-MM-DD"); |
|
|
|
} |
|
|
|
|
|
|
|
if (this.typeCondition === 2) { |
|
|
|
endTime = this.$moment().subtract(1, 'months').endOf('month').format('YYYY-MM-DD') |
|
|
|
endTime = this.$moment() |
|
|
|
.subtract(1, "months") |
|
|
|
.endOf("month") |
|
|
|
.format("YYYY-MM-DD"); |
|
|
|
} else { |
|
|
|
endTime = this.$moment().endOf('month').format('YYYY-MM-DD') |
|
|
|
endTime = this.$moment().endOf("month").format("YYYY-MM-DD"); |
|
|
|
} |
|
|
|
this.getData(startTime, endTime) |
|
|
|
this.$emit('timeChange', {startTime, endTime}) |
|
|
|
this.getData(startTime, endTime); |
|
|
|
this.$emit("timeChange", { startTime, endTime }); |
|
|
|
}, |
|
|
|
getData(startTime, endTime) { |
|
|
|
this.loading = true |
|
|
|
this.loading = true; |
|
|
|
let params = { |
|
|
|
level: this.$store.state.chooseArea.chooseName.level, |
|
|
|
orgId: this.$store.state.chooseArea.chooseName.orgId, |
|
|
|
startTime, |
|
|
|
endTime |
|
|
|
} |
|
|
|
|
|
|
|
endTime, |
|
|
|
}; |
|
|
|
|
|
|
|
params = this.$paramsFormat(params) |
|
|
|
let url = '/governance/satisfactionOverview/satisfactionGroup' |
|
|
|
params = this.$paramsFormat(params); |
|
|
|
let url = "/governance/satisfactionOverview/satisfactionGroup"; |
|
|
|
|
|
|
|
if (this.resultType === 2) { |
|
|
|
url = '/governance/satisfactionOverview/event12345Group' |
|
|
|
url = "/governance/satisfactionOverview/event12345Group"; |
|
|
|
} |
|
|
|
|
|
|
|
this.$http.get(url + '?' + params).then(({data: {data}}) => { |
|
|
|
this.initCharts(data) |
|
|
|
}) |
|
|
|
this.$http.get(url + "?" + params).then(({ data: { data } }) => { |
|
|
|
this.initCharts(data); |
|
|
|
}); |
|
|
|
}, |
|
|
|
initCharts(data) { |
|
|
|
let div = document.getElementById('typeConditionChart'); |
|
|
|
let div = document.getElementById("typeConditionChart"); |
|
|
|
this.myChart = echarts.init(div); |
|
|
|
var dataname = data.map(item => item.name) |
|
|
|
var datavaule = data.map(item => item.blueNum ? item.blueNum : 0) |
|
|
|
var datavaule2 = data.map(item => item.yellowNum ? item.yellowNum : 0) |
|
|
|
var indicator = [] |
|
|
|
let max = Math.max(...datavaule, ...datavaule2) |
|
|
|
console.log(max) |
|
|
|
var datamax = new Array(datavaule.length).fill(max) |
|
|
|
var dataname = data.map((item) => item.name); |
|
|
|
var datavaule = data.map((item) => (item.blueNum ? item.blueNum : 0)); |
|
|
|
var datavaule2 = data.map((item) => |
|
|
|
item.yellowNum ? item.yellowNum : 0 |
|
|
|
); |
|
|
|
var indicator = []; |
|
|
|
let max = Math.max(...datavaule, ...datavaule2); |
|
|
|
console.log(max); |
|
|
|
var datamax = new Array(datavaule.length).fill(max); |
|
|
|
for (var i = 0; i < dataname.length; i++) { |
|
|
|
indicator.push({ |
|
|
|
name: dataname[i], |
|
|
|
max: datamax[i], |
|
|
|
}) |
|
|
|
}); |
|
|
|
} |
|
|
|
let legendName = ['省满意度调查\n各项不满意人数', '社区满意度自查\n各项不满意人数'] |
|
|
|
let series = [{ |
|
|
|
name: this.resultType === 2 ? '12345热线\n事件上报人数' : "省满意度调查\n各项不满意人数", |
|
|
|
type: "radar", |
|
|
|
symbol: "circle", |
|
|
|
symbolSize: 7, |
|
|
|
areaStyle: { |
|
|
|
normal: { |
|
|
|
color: 'rgba(58,128,231,0.36)', |
|
|
|
} |
|
|
|
}, |
|
|
|
itemStyle: { |
|
|
|
color: '#3A80E7', |
|
|
|
borderColor: '#3AB7FF', |
|
|
|
borderWidth: 1, |
|
|
|
}, |
|
|
|
lineStyle: { |
|
|
|
normal: { |
|
|
|
color: "#3AB7FF", |
|
|
|
width: 2 |
|
|
|
} |
|
|
|
let legendName = [ |
|
|
|
"省满意度调查\n各项不满意人数", |
|
|
|
"社区满意度自查\n各项不满意人数", |
|
|
|
]; |
|
|
|
let series = [ |
|
|
|
{ |
|
|
|
name: |
|
|
|
this.resultType === 2 |
|
|
|
? "12345热线\n事件上报人数" |
|
|
|
: "省满意度调查\n各项不满意人数", |
|
|
|
type: "radar", |
|
|
|
symbol: "circle", |
|
|
|
symbolSize: 7, |
|
|
|
areaStyle: { |
|
|
|
normal: { |
|
|
|
color: "rgba(58,128,231,0.36)", |
|
|
|
}, |
|
|
|
}, |
|
|
|
itemStyle: { |
|
|
|
color: "#3A80E7", |
|
|
|
borderColor: "#3AB7FF", |
|
|
|
borderWidth: 1, |
|
|
|
}, |
|
|
|
lineStyle: { |
|
|
|
normal: { |
|
|
|
color: "#3AB7FF", |
|
|
|
width: 2, |
|
|
|
}, |
|
|
|
}, |
|
|
|
data: [datavaule], |
|
|
|
}, |
|
|
|
data: [datavaule] |
|
|
|
}] |
|
|
|
]; |
|
|
|
if (this.resultType === 2) { |
|
|
|
legendName = ['12345热线\n事件上报人数'] |
|
|
|
legendName = ["12345热线\n事件上报人数"]; |
|
|
|
} else { |
|
|
|
series.push({ |
|
|
|
name: "社区满意度自查\n各项不满意人数", |
|
|
@ -181,46 +219,51 @@ export default { |
|
|
|
symbolSize: 7, |
|
|
|
areaStyle: { |
|
|
|
normal: { |
|
|
|
color: 'rgba(170, 216, 255, 0)', |
|
|
|
} |
|
|
|
color: "rgba(170, 216, 255, 0)", |
|
|
|
}, |
|
|
|
}, |
|
|
|
itemStyle: { |
|
|
|
color: '#EB8E16', |
|
|
|
borderColor: '#EF9700', |
|
|
|
color: "#EB8E16", |
|
|
|
borderColor: "#EF9700", |
|
|
|
borderWidth: 1, |
|
|
|
}, |
|
|
|
lineStyle: { |
|
|
|
normal: { |
|
|
|
color: "#EF9700", |
|
|
|
width: 2 |
|
|
|
} |
|
|
|
width: 2, |
|
|
|
}, |
|
|
|
}, |
|
|
|
data: [datavaule2] |
|
|
|
}) |
|
|
|
data: [datavaule2], |
|
|
|
}); |
|
|
|
} |
|
|
|
var option = { |
|
|
|
tooltip: { |
|
|
|
show: false, |
|
|
|
trigger: "item", |
|
|
|
backgroundColor: 'rgba(13,33,71,0.5)', |
|
|
|
borderColor: 'rgba(143,174,252,0.6)', |
|
|
|
padding: 8, |
|
|
|
textStyle: { |
|
|
|
color: '#fff', |
|
|
|
}, |
|
|
|
}, |
|
|
|
legend: { |
|
|
|
show: true, |
|
|
|
textStyle: { |
|
|
|
color: '#ffffff', |
|
|
|
color: "#ffffff", |
|
|
|
rich: { |
|
|
|
name: { |
|
|
|
fontSize: 14, |
|
|
|
lineHeight: 22, |
|
|
|
padding: [24, 0, 0, 0] |
|
|
|
padding: [24, 0, 0, 0], |
|
|
|
}, |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
itemWidth: 6, |
|
|
|
itemHeight: 6, |
|
|
|
y: 0, |
|
|
|
x: 'right', |
|
|
|
formatter: name => { |
|
|
|
return `{name|${name}}` |
|
|
|
x: "right", |
|
|
|
formatter: (name) => { |
|
|
|
return `{name|${name}}`; |
|
|
|
}, |
|
|
|
data: legendName, |
|
|
|
}, |
|
|
@ -231,8 +274,8 @@ export default { |
|
|
|
splitNumber: 5, |
|
|
|
splitArea: { |
|
|
|
areaStyle: { |
|
|
|
color: 'transparent' |
|
|
|
} |
|
|
|
color: "transparent", |
|
|
|
}, |
|
|
|
}, |
|
|
|
axisLabel: { |
|
|
|
show: false, |
|
|
@ -240,33 +283,33 @@ export default { |
|
|
|
axisLine: { |
|
|
|
show: true, |
|
|
|
lineStyle: { |
|
|
|
color: "transparent" |
|
|
|
} |
|
|
|
color: "transparent", |
|
|
|
}, |
|
|
|
}, |
|
|
|
splitLine: { |
|
|
|
show: true, |
|
|
|
lineStyle: { |
|
|
|
color: "#527AA8" |
|
|
|
} |
|
|
|
color: "#527AA8", |
|
|
|
}, |
|
|
|
}, |
|
|
|
name: { |
|
|
|
textStyle: { |
|
|
|
color: '#ffffff', |
|
|
|
fontSize: '16', |
|
|
|
color: "#ffffff", |
|
|
|
fontSize: "16", |
|
|
|
borderRadius: 3, |
|
|
|
padding: [3, 5] |
|
|
|
} |
|
|
|
padding: [3, 5], |
|
|
|
}, |
|
|
|
}, |
|
|
|
indicator: indicator |
|
|
|
indicator: indicator, |
|
|
|
}, |
|
|
|
series |
|
|
|
series, |
|
|
|
}; |
|
|
|
this.myChart.setOption(option, true); |
|
|
|
window.addEventListener("resize", () => this.myChart.resize()); |
|
|
|
this.loading = false |
|
|
|
this.loading = false; |
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
}; |
|
|
|
</script> |
|
|
|
|
|
|
|
<style scoped lang="scss"> |
|
|
@ -281,15 +324,15 @@ export default { |
|
|
|
/deep/ .el-input__inner { |
|
|
|
width: 90px !important; |
|
|
|
height: 24px !important; |
|
|
|
background: #021C49 !important; |
|
|
|
border: 1px solid #125AAA !important; |
|
|
|
background: #021c49 !important; |
|
|
|
border: 1px solid #125aaa !important; |
|
|
|
border-radius: 12px !important; |
|
|
|
color: #A0CDFF; |
|
|
|
color: #a0cdff; |
|
|
|
} |
|
|
|
|
|
|
|
/deep/ .el-input__icon { |
|
|
|
line-height: 24px !important; |
|
|
|
color: #A0CDFF; |
|
|
|
color: #a0cdff; |
|
|
|
} |
|
|
|
} |
|
|
|
</style> |
|
|
|
</style> |
|
|
|