1 changed files with 655 additions and 0 deletions
@ -0,0 +1,655 @@ |
|||||
|
|
||||
|
<template> |
||||
|
<div class="g-main"> |
||||
|
<div> |
||||
|
<div class="m-search"> |
||||
|
<el-form :inline="true" :model="formData" ref="ref_searchform" :label-width="'100px'"> |
||||
|
<el-form-item label="统计时间"> |
||||
|
<el-date-picker v-model="formData.queryDateStart" type="date" value-format="yyyy-MM" placeholder="开始时间" |
||||
|
style="width: 202px" clearable> |
||||
|
</el-date-picker> |
||||
|
至 |
||||
|
<el-date-picker v-model="formData.queryDateEnd" type="date" value-format="yyyy-MM" placeholder="结束时间" |
||||
|
style="width: 202px" clearable> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
<el-button style="margin-left: 30px" size="small" type="primary " |
||||
|
@click="handleSearch">查询</el-button> |
||||
|
<el-button style="margin-left: 10px" is-plain class="diy-button--white el-button--default" |
||||
|
size="small" @click="exportReport">导出</el-button> |
||||
|
</el-form> |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
<div class="m-table"> |
||||
|
<div style="text-align: center;"> |
||||
|
<h1>海伦路街道2023年1月1日至6月31日</h1> |
||||
|
<h1>政务热线运行情况分析报告</h1> |
||||
|
</div> |
||||
|
<div> |
||||
|
<h1 style="font-size: 24px; font-weight: bold;"> 一、总体运行情况 </h1> |
||||
|
<p style="font-size: 16px; line-height: 1.5; margin-top: 10px; text-indent: 2em;"> |
||||
|
{{ report.overallOperation }} |
||||
|
</p> |
||||
|
<h1 style="text-align: center;font-size: 20px;">行业领域分布情况</h1> |
||||
|
<div class="m-table-item" :style="{ height: maxTableHeight + 'px', width: '100%' }"> |
||||
|
<div id="categoryChart"></div> |
||||
|
<div id="categoryPie"></div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div> |
||||
|
<h1 style="font-size: 24px; font-weight: bold;"> 二、工单情况分析 </h1> |
||||
|
<h2 style="font-size: 20px; font-weight: bold;"> (一)地域统计分析 </h2> |
||||
|
<p style="font-size: 16px; line-height: 1.5; margin-top: 10px; text-indent: 2em;"> |
||||
|
{{ report.geoStatis }} |
||||
|
</p> |
||||
|
<h1 style="text-align: center;font-size: 20px;">各社区问题数量及占比</h1> |
||||
|
<div class="m-table-item" :style="{ height: maxTableHeight + 'px', width: '100%' }"> |
||||
|
<div id="communityChart"></div> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<h2 style="font-size: 20px; font-weight: bold;"> (二)科室热线分布分析 </h2> |
||||
|
<p style="font-size: 16px; line-height: 1.5; margin-top: 10px; text-indent: 2em;"> |
||||
|
{{ report.departHotline }} |
||||
|
</p> |
||||
|
<h1 style="text-align: center;font-size: 20px;">科室热线分布情况</h1> |
||||
|
<div class="m-table-item" :style="{ height: maxTableHeight + 'px', width: '100%' }"> |
||||
|
<div id="departChart"></div> |
||||
|
</div> |
||||
|
|
||||
|
<h2 style="font-size: 20px; font-weight: bold;"> (三)热点诉求及区域分析 </h2> |
||||
|
<p style="font-size: 16px; line-height: 1.5; margin-top: 10px; text-indent: 2em;"> |
||||
|
{{ report.hotDemand }} |
||||
|
</p> |
||||
|
<h1 style="text-align: center;font-size: 20px;">热线诉求热点问题前十</h1> |
||||
|
<div class="m-table-item" :style="{ height: maxTableHeight + 'px', width: '100%' }"> |
||||
|
<div id="hotlineChart"></div> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<div> |
||||
|
<h1 style="font-size: 24px; font-weight: bold;"> 三、存在主要问题 </h1> |
||||
|
<h2 style="font-size: 20px; font-weight: bold;"> (一)同地点同类型事件重复投诉 </h2> |
||||
|
</div> |
||||
|
|
||||
|
<!-- <el-table :data="addressData" border class="m-table-item" style="width: 100%" :height="maxTableHeight"> |
||||
|
<el-table-column label="序号" fixed="left" type="index" align="center" width="50" /> |
||||
|
<el-table-column prop="address" align="center" label="地点" :show-overflow-tooltip="true"></el-table-column> |
||||
|
<el-table-column prop="amount" align="center" label="投诉次数" :show-overflow-tooltip="true"></el-table-column> |
||||
|
<el-table-column prop="content" align="center" label="投诉内容" :show-overflow-tooltip="true"></el-table-column> |
||||
|
</el-table> --> |
||||
|
|
||||
|
<div> |
||||
|
<h2 style="font-size: 20px; font-weight: bold;"> (二)同一人员重复投诉</h2> |
||||
|
</div> |
||||
|
|
||||
|
<!-- <el-table :data="mobileData" border class="m-table-item" style="width: 100%" :height="maxTableHeight"> |
||||
|
<el-table-column label="序号" fixed="left" type="index" align="center" width="50" /> |
||||
|
<el-table-column prop="address" align="center" label="联系方式" :show-overflow-tooltip="true"></el-table-column> |
||||
|
<el-table-column prop="amount" align="center" label="投诉次数" :show-overflow-tooltip="true"></el-table-column> |
||||
|
<el-table-column prop="content" align="center" label="投诉内容" :show-overflow-tooltip="true"></el-table-column> |
||||
|
</el-table> --> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
</div> |
||||
|
</template> |
||||
|
<script> |
||||
|
import { requestPost, requestGet } from "@/js/dai/request"; |
||||
|
import nextTick from "dai-js/tools/nextTick"; |
||||
|
import { mapGetters } from "vuex"; |
||||
|
import axios from "axios"; |
||||
|
import * as echarts from "echarts"; |
||||
|
|
||||
|
export default { |
||||
|
components: {}, |
||||
|
|
||||
|
data() { |
||||
|
return { |
||||
|
searchH: 20, |
||||
|
|
||||
|
formData: { |
||||
|
queryDateStart: "", |
||||
|
queryDateEnd: "", |
||||
|
}, |
||||
|
|
||||
|
// 内容字段 |
||||
|
report:{ |
||||
|
overallOperation:"", |
||||
|
geoStatis:"", |
||||
|
departHotline:"", |
||||
|
hotDemand:"" |
||||
|
}, |
||||
|
addressData:{}, |
||||
|
mobileData:{}, |
||||
|
|
||||
|
categoryChart: {}, |
||||
|
categoryPie: {}, |
||||
|
communityChart: {}, |
||||
|
departChart: {}, |
||||
|
hotlineChart: {}, |
||||
|
|
||||
|
|
||||
|
categoryChartOption: { |
||||
|
tooltip: { |
||||
|
trigger: 'axis' |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['工单数量'], |
||||
|
bottom: '10%', |
||||
|
icon: 'rect', |
||||
|
itemWidth: 20, |
||||
|
itemHeight: 5, |
||||
|
itemGap: 20, |
||||
|
}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '25%', |
||||
|
containLabel: true |
||||
|
}, |
||||
|
toolbox: {}, |
||||
|
|
||||
|
|
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: [], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '单位(个)', |
||||
|
min: 0, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: '工单数量', |
||||
|
type: 'bar', |
||||
|
data: [], |
||||
|
barWidth: 36, // 设置柱子宽度 |
||||
|
barCategoryGap: 0, // 设置柱子间的间隔为0 |
||||
|
itemStyle: { |
||||
|
color: new echarts.graphic.LinearGradient( |
||||
|
0, 0, 0, 1, |
||||
|
[ |
||||
|
{ offset: 0, color: '#2c7cf2' }, // 从顶部开始 |
||||
|
{ offset: 1, color: '#80b3ff' } // 到底部结束 |
||||
|
] |
||||
|
) |
||||
|
}, |
||||
|
showBackground: true, |
||||
|
backgroundStyle: { |
||||
|
color: '#fafbfc', |
||||
|
opacity: "0.5" |
||||
|
} |
||||
|
}, |
||||
|
] |
||||
|
}, |
||||
|
|
||||
|
categoryPieOption:{ |
||||
|
tooltip: { |
||||
|
trigger: 'item' |
||||
|
}, |
||||
|
legend: { |
||||
|
type: 'scroll', |
||||
|
bottom: 0, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: '数量', |
||||
|
type: 'pie', |
||||
|
radius: '80%', |
||||
|
data: [ |
||||
|
|
||||
|
], |
||||
|
emphasis: { |
||||
|
itemStyle: { |
||||
|
shadowBlur: 10, |
||||
|
shadowOffsetX: 0, |
||||
|
shadowColor: 'rgba(0, 0, 0, 0.5)' |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
|
||||
|
communityOption : { |
||||
|
color: ['#5470C6', '#91CC75'], |
||||
|
tooltip: { |
||||
|
trigger: 'axis', |
||||
|
axisPointer: { |
||||
|
type: 'cross' |
||||
|
} |
||||
|
}, |
||||
|
grid: { |
||||
|
right: '20%' |
||||
|
}, |
||||
|
toolbox: { |
||||
|
feature: { |
||||
|
dataView: { show: true, readOnly: false }, |
||||
|
restore: { show: true }, |
||||
|
saveAsImage: { show: true } |
||||
|
} |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['数量', '占比'] |
||||
|
}, |
||||
|
xAxis: [ |
||||
|
{ |
||||
|
type: 'category', |
||||
|
axisTick: { |
||||
|
alignWithLabel: true |
||||
|
}, |
||||
|
data: [], |
||||
|
} |
||||
|
], |
||||
|
yAxis: [ |
||||
|
{ |
||||
|
type: 'value', |
||||
|
name: '占比', |
||||
|
position: 'right', |
||||
|
alignTicks: true, |
||||
|
axisLine: { |
||||
|
show: true, |
||||
|
lineStyle: { |
||||
|
color: '#91CC75' |
||||
|
} |
||||
|
}, |
||||
|
axisLabel: { |
||||
|
formatter: '{value} %' |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
type: 'value', |
||||
|
name: '数量', |
||||
|
position: 'left', |
||||
|
alignTicks: true, |
||||
|
axisLine: { |
||||
|
show: true, |
||||
|
lineStyle: { |
||||
|
color: '#5470C6' |
||||
|
} |
||||
|
}, |
||||
|
axisLabel: { |
||||
|
formatter: '{value} 件' |
||||
|
} |
||||
|
} |
||||
|
], |
||||
|
series: [ |
||||
|
{ |
||||
|
name: '数量', |
||||
|
type: 'bar', |
||||
|
barWidth: 36, // 设置柱子宽度 |
||||
|
data: [ |
||||
|
|
||||
|
] |
||||
|
}, |
||||
|
{ |
||||
|
name: '占比', |
||||
|
type: 'line', |
||||
|
yAxisIndex: 1, |
||||
|
data: [ |
||||
|
|
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
|
||||
|
departOption : { |
||||
|
color: ['#5470C6', '#91CC75'], |
||||
|
tooltip: { |
||||
|
trigger: 'axis', |
||||
|
axisPointer: { |
||||
|
type: 'cross' |
||||
|
} |
||||
|
}, |
||||
|
grid: { |
||||
|
right: '20%' |
||||
|
}, |
||||
|
toolbox: { |
||||
|
feature: { |
||||
|
dataView: { show: true, readOnly: false }, |
||||
|
restore: { show: true }, |
||||
|
saveAsImage: { show: true } |
||||
|
} |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['数量', '占比'] |
||||
|
}, |
||||
|
xAxis: [ |
||||
|
{ |
||||
|
type: 'category', |
||||
|
axisTick: { |
||||
|
alignWithLabel: true |
||||
|
}, |
||||
|
data: [], |
||||
|
} |
||||
|
], |
||||
|
yAxis: [ |
||||
|
{ |
||||
|
type: 'value', |
||||
|
name: '占比', |
||||
|
position: 'right', |
||||
|
alignTicks: true, |
||||
|
axisLine: { |
||||
|
show: true, |
||||
|
lineStyle: { |
||||
|
color: '#5470C6' |
||||
|
} |
||||
|
}, |
||||
|
axisLabel: { |
||||
|
formatter: '{value} %' |
||||
|
} |
||||
|
}, |
||||
|
{ |
||||
|
type: 'value', |
||||
|
name: '数量', |
||||
|
position: 'left', |
||||
|
alignTicks: true, |
||||
|
axisLine: { |
||||
|
show: true, |
||||
|
lineStyle: { |
||||
|
color: '#00264D' |
||||
|
} |
||||
|
}, |
||||
|
axisLabel: { |
||||
|
formatter: '{value} 件' |
||||
|
} |
||||
|
} |
||||
|
], |
||||
|
series: [ |
||||
|
{ |
||||
|
name: '数量', |
||||
|
type: 'bar', |
||||
|
barWidth: 36, // 设置柱子宽度 |
||||
|
itemStyle: { |
||||
|
normal: { |
||||
|
// 定制显示(按顺序) |
||||
|
color: function(params) { |
||||
|
var colorList = ['#00BFFF', '#800080', '#008080', '#FF8C00', '#FF3333', '#6600CC', '#00FF00', '#4682B4', '#282828', '#FF4500']; |
||||
|
return colorList[params.dataIndex] |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
data: [ |
||||
|
|
||||
|
] |
||||
|
}, |
||||
|
{ |
||||
|
name: '占比', |
||||
|
type: 'line', |
||||
|
yAxisIndex: 1, |
||||
|
data: [ |
||||
|
|
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
|
||||
|
hotlineChartOption: { |
||||
|
tooltip: { |
||||
|
trigger: 'axis' |
||||
|
}, |
||||
|
legend: { |
||||
|
data: ['工单数量'], |
||||
|
bottom: '10%', |
||||
|
icon: 'rect', |
||||
|
itemWidth: 20, |
||||
|
itemHeight: 5, |
||||
|
itemGap: 20, |
||||
|
}, |
||||
|
grid: { |
||||
|
left: '3%', |
||||
|
right: '4%', |
||||
|
bottom: '25%', |
||||
|
containLabel: true |
||||
|
}, |
||||
|
toolbox: {}, |
||||
|
|
||||
|
|
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
boundaryGap: true, |
||||
|
data: [], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
name: '单位(个)', |
||||
|
min: 0, |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: '工单数量', |
||||
|
type: 'bar', |
||||
|
data: [], |
||||
|
barWidth: 36, // 设置柱子宽度 |
||||
|
barCategoryGap: 0, // 设置柱子间的间隔为0 |
||||
|
itemStyle: { |
||||
|
color: new echarts.graphic.LinearGradient( |
||||
|
0, 0, 0, 1, |
||||
|
[ |
||||
|
{ offset: 0, color: '#2c7cf2' }, // 从顶部开始 |
||||
|
{ offset: 1, color: '#80b3ff' } // 到底部结束 |
||||
|
] |
||||
|
) |
||||
|
}, |
||||
|
showBackground: true, |
||||
|
backgroundStyle: { |
||||
|
color: '#fafbfc', |
||||
|
opacity: "0.5" |
||||
|
} |
||||
|
}, |
||||
|
] |
||||
|
}, |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
computed: { |
||||
|
maxTableHeight() { |
||||
|
const h = this.clientHeight - this.searchH - 330 + this.iframeHeight; |
||||
|
const _h = this.clientHeight - 330 - this.searchH; |
||||
|
return this.$store.state.inIframe ? h : _h; |
||||
|
}, |
||||
|
...mapGetters(["clientHeight", "iframeHeight"]), |
||||
|
}, |
||||
|
watch: {}, |
||||
|
async mounted() { |
||||
|
this.user = this.$store.state.user; |
||||
|
this.agencyId = this.user.agencyId; |
||||
|
await this.getTableData(); |
||||
|
await this.initEcharts(); |
||||
|
}, |
||||
|
methods: { |
||||
|
initEcharts() { |
||||
|
this.categoryChart = echarts.init(document.getElementById("categoryChart")); |
||||
|
this.categoryChart.setOption(this.categoryChartOption); |
||||
|
let than = this; |
||||
|
this.categoryChart.on("click", function (params) { |
||||
|
than.handelClickChart(params.name); |
||||
|
}); |
||||
|
|
||||
|
this.categoryPie= echarts.init(document.getElementById("categoryPie")); |
||||
|
this.categoryPie.setOption(this.categoryPieOption); |
||||
|
this.categoryPie.on("click", function (params) { |
||||
|
than.handelClickChart(params.name); |
||||
|
}); |
||||
|
|
||||
|
this.communityChart= echarts.init(document.getElementById("communityChart")); |
||||
|
this.communityChart.setOption(this.communityOption); |
||||
|
this.communityChart.on("click", function (params) { |
||||
|
than.handelClickChart(params.name); |
||||
|
}); |
||||
|
|
||||
|
|
||||
|
this.departChart= echarts.init(document.getElementById("departChart")); |
||||
|
this.departChart.setOption(this.departOption); |
||||
|
this.departChart.on("click", function (params) { |
||||
|
than.handelClickChart(params.name); |
||||
|
}); |
||||
|
|
||||
|
this.hotlineChart= echarts.init(document.getElementById("hotlineChart")); |
||||
|
this.hotlineChart.setOption(this.hotlineChartOption); |
||||
|
this.hotlineChart.on("click", function (params) { |
||||
|
than.handelClickChart(params.name); |
||||
|
}); |
||||
|
|
||||
|
|
||||
|
window.addEventListener("resize", this.handleWindowResize); |
||||
|
|
||||
|
console.log("图表加载") |
||||
|
}, |
||||
|
handleWindowResize() { |
||||
|
if (this.categoryChart) { |
||||
|
this.categoryChart.resize(); |
||||
|
} |
||||
|
if (this.categoryPie) { |
||||
|
this.categoryPie.resize(); |
||||
|
} |
||||
|
}, |
||||
|
handelClickChart(name) { |
||||
|
this.showFormList = true; |
||||
|
this.satisfactionCategoryStr = this.dicts.satisfaction_category.filter( |
||||
|
(item) => item.label == name |
||||
|
)[0].value; |
||||
|
}, |
||||
|
handleClose() { |
||||
|
this.showFormList = false; |
||||
|
}, |
||||
|
// 搜索事件 |
||||
|
handleSearch(val) { |
||||
|
console.log(this.formData); |
||||
|
}, |
||||
|
|
||||
|
// 重置 |
||||
|
exportReport() { |
||||
|
this.formData = {}; |
||||
|
}, |
||||
|
|
||||
|
// 获取分类 |
||||
|
async getTableData() { |
||||
|
|
||||
|
const url = '/governance/dwdEvent/report'; |
||||
|
const {formData } = this; |
||||
|
const { data, code, msg } = await requestPost(url, { |
||||
|
...formData |
||||
|
}); |
||||
|
if (code != 0) { |
||||
|
this.$message.error(msg); |
||||
|
return; |
||||
|
} |
||||
|
if (!data) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
this.report = data; |
||||
|
console.log(this.report) |
||||
|
|
||||
|
this.tableLoading = true; |
||||
|
|
||||
|
//获取分类 |
||||
|
Object.keys(this.report.categoryCount).forEach((key) => { |
||||
|
const value = this.report.categoryCount[key]; |
||||
|
|
||||
|
this.categoryChartOption.series[0].data.push(value); |
||||
|
this.categoryChartOption.xAxis.data.push(key); |
||||
|
|
||||
|
const jsonObject = { |
||||
|
address: key, |
||||
|
amount: key, |
||||
|
content:key |
||||
|
}; |
||||
|
this.categoryPieOption.series[0].data.push(jsonObject); |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
// 获取社区 |
||||
|
Object.keys(this.report.communityCount).forEach((key) => { |
||||
|
const value = this.report.communityCount[key]; |
||||
|
|
||||
|
this.communityOption.xAxis[0].data.push(key); |
||||
|
this.communityOption.series[0].data.push(value/this.report.totalEvent*100); |
||||
|
this.communityOption.series[1].data.push(value); |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
// 获取科室 |
||||
|
Object.keys(this.report.departCount).forEach((key) => { |
||||
|
const value = this.report.departCount[key]; |
||||
|
|
||||
|
this.departOption.xAxis[0].data.push(key); |
||||
|
this.departOption.series[0].data.push(value/this.report.totalEvent*100); |
||||
|
this.departOption.series[1].data.push(value); |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
|
||||
|
// 获取热点诉求及区域分析 |
||||
|
Object.keys(this.report.subCategoryCount).forEach((key) => { |
||||
|
const value = this.report.subCategoryCount[key]; |
||||
|
|
||||
|
this.hotlineChartOption.xAxis.data.push(key); |
||||
|
this.hotlineChartOption.series[0].data.push(value); |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
props: {}, |
||||
|
}; |
||||
|
</script> |
||||
|
<style lang="scss" scoped> |
||||
|
@import "@/assets/scss/buttonstyle.scss"; |
||||
|
@import "@/assets/scss/modules/management/list-main.scss"; |
||||
|
@import "@/assets/scss/modules/shequzhili/event-info.scss"; |
||||
|
|
||||
|
.div_btn_left>* { |
||||
|
margin-right: 10px; |
||||
|
} |
||||
|
|
||||
|
.m-table-item { |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
#categoryChart { |
||||
|
width: 100%; |
||||
|
flex: 1; |
||||
|
} |
||||
|
|
||||
|
#categoryPie { |
||||
|
width: 100%; |
||||
|
flex: 1; |
||||
|
} |
||||
|
|
||||
|
#communityChart { |
||||
|
width: 100%; |
||||
|
flex: 1; |
||||
|
} |
||||
|
|
||||
|
#departChart { |
||||
|
width: 100%; |
||||
|
flex: 1; |
||||
|
} |
||||
|
|
||||
|
#hotlineChart { |
||||
|
width: 100%; |
||||
|
flex: 1; |
||||
|
} |
||||
|
|
||||
|
.centered-title { |
||||
|
text-align: center; /* 将文本水平居中对齐 */ |
||||
|
font-size: 28px; /* 设置标题字体大小 */ |
||||
|
font-weight: bold; /* 设置标题加粗 */ |
||||
|
color: #333; /* 设置标题颜色 */ |
||||
|
margin-bottom: 20px; /* 设置标题与下方内容的间距 */ |
||||
|
} |
||||
|
|
||||
|
</style> |
||||
|
|
||||
|
|
||||
Loading…
Reference in new issue