9 changed files with 780 additions and 110 deletions
@ -0,0 +1,135 @@ |
|||||
|
@import '../../c/config'; |
||||
|
@import '../../c/function'; |
||||
|
@import './c/common'; |
||||
|
|
||||
|
.title { |
||||
|
padding: 10px; |
||||
|
font-size: 22px; |
||||
|
font-family: PingFang SC; |
||||
|
font-weight: 800; |
||||
|
color: #ffffff; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
position: relative; |
||||
|
|
||||
|
img { |
||||
|
display: block; |
||||
|
margin-right: 5px; |
||||
|
} |
||||
|
span { |
||||
|
display: block; |
||||
|
} |
||||
|
|
||||
|
.second-select { |
||||
|
margin: 0 10px 0 40px; |
||||
|
|
||||
|
::v-deep .el-input { |
||||
|
width: 140px; |
||||
|
height: 36px; |
||||
|
.el-input__inner { |
||||
|
height: 100%; |
||||
|
padding: 0 10px; |
||||
|
color: #fff; |
||||
|
line-height: 36px; |
||||
|
background: #06186d; |
||||
|
border: 1px solid #1a64cc; |
||||
|
} |
||||
|
.el-icon-arrow-up:before { |
||||
|
content: '\e78f'; |
||||
|
} |
||||
|
} |
||||
|
::v-deep .el-date-editor { |
||||
|
.el-input__prefix { |
||||
|
left: unset; |
||||
|
right: 5px; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.cascader { |
||||
|
::v-deep .el-input { |
||||
|
width: 220px; |
||||
|
} |
||||
|
} |
||||
|
.status-select { |
||||
|
position: absolute; |
||||
|
top: 20px; |
||||
|
right: 10px; |
||||
|
} |
||||
|
.second-select:last-child { |
||||
|
margin-left: 0; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.g-cpt-resi { |
||||
|
display: flex; |
||||
|
flex-direction: row; |
||||
|
// flex-wrap: wrap; |
||||
|
// justify-content: center; |
||||
|
height: calc(100vh - 130px); |
||||
|
|
||||
|
.g-l { |
||||
|
flex-shrink: 0; |
||||
|
width: 600px; |
||||
|
height: calc(100vh - 190px); |
||||
|
} |
||||
|
|
||||
|
.g-r { |
||||
|
text-align: center; |
||||
|
margin: 40px 19px 20px; |
||||
|
width: calc(100vw - 60px - 600px); |
||||
|
height: calc(100vh - 140px - 20px); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.g-r { |
||||
|
.tb { |
||||
|
position: relative; |
||||
|
height: calc(100vh - 220px); |
||||
|
overflow-y: auto; |
||||
|
@include scrollBar; |
||||
|
|
||||
|
.m-pagination { |
||||
|
position: absolute; |
||||
|
box-sizing: border-box; |
||||
|
right: 0; |
||||
|
bottom: 0; |
||||
|
|
||||
|
width: 100%; |
||||
|
height: 40px; |
||||
|
display: flex; |
||||
|
justify-content: flex-end; |
||||
|
|
||||
|
/deep/ .el-pagination.is-background .el-pager li:not(.disabled).active { |
||||
|
background: #0266d1; |
||||
|
color: #000d3f; |
||||
|
} |
||||
|
|
||||
|
/deep/ .el-pagination .el-pager li { |
||||
|
background: #002e74; |
||||
|
} |
||||
|
|
||||
|
/deep/ .el-pagination .btn-prev { |
||||
|
background: #002e74; |
||||
|
} |
||||
|
|
||||
|
/deep/ .el-pagination .btn-next { |
||||
|
background: #002e74; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.echart-wr { |
||||
|
margin-left: 30px; |
||||
|
// margin-top: 100px; |
||||
|
text-align: center; |
||||
|
position: relative; |
||||
|
width: 500px; |
||||
|
height: 100%; |
||||
|
box-sizing: border-box; |
||||
|
.echart-org { |
||||
|
width: 100%; |
||||
|
height: 90%; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,436 @@ |
|||||
|
<template> |
||||
|
<cpt-card> |
||||
|
<div class="title"> |
||||
|
<img src="@/assets/img/shuju/title-tip.png" /> |
||||
|
<span>事件分类分析</span> |
||||
|
|
||||
|
<div class="second-select cascader"> |
||||
|
|
||||
|
<el-cascader class="customer_cascader" |
||||
|
ref="myCascader" |
||||
|
v-model="agencyIdArray" |
||||
|
:key="iscascaderShow" |
||||
|
:options="casOptions" |
||||
|
:props="optionProps" |
||||
|
@change="handleChangeAgency" |
||||
|
clearable></el-cascader> |
||||
|
</div> |
||||
|
<div class="second-select "> |
||||
|
|
||||
|
<el-date-picker v-model="dateId" |
||||
|
type="date" |
||||
|
:clearable="false" |
||||
|
@change="handleChangeDate" |
||||
|
prefix-icon="el-icon-caret-bottom" |
||||
|
placeholder="选择日期" |
||||
|
value-format="yyyyMMdd"> |
||||
|
</el-date-picker> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="g-cpt-resi"> |
||||
|
<div class="g-l"> |
||||
|
<screen-echarts-frame class="echart-wr" |
||||
|
@myChartMethod="pieInitOk" |
||||
|
ref="pieChart"></screen-echarts-frame> |
||||
|
|
||||
|
</div> |
||||
|
<div class="g-r"> |
||||
|
<div class="m-tb"> |
||||
|
|
||||
|
<div class="tb"> |
||||
|
<cpt-tb :col-list="demand.colList" |
||||
|
:loading="demand.loading" |
||||
|
:header="demand.header" |
||||
|
:list="demand.list"></cpt-tb> |
||||
|
|
||||
|
<div class="m-pagination"> |
||||
|
<el-pagination :current-page="demand.pageNo" |
||||
|
:page-size="demand.pageSize" |
||||
|
:total="demand.total" |
||||
|
background |
||||
|
layout="prev, pager, next" |
||||
|
@current-change="handlePageNoChange_demand"> |
||||
|
</el-pagination> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
</cpt-card> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { Loading } from "element-ui"; //引入Loading服务 |
||||
|
import { requestPost } from "@/js/dai/request"; |
||||
|
import cptCard from "@/views/modules/visual/cpts/card"; |
||||
|
import cptTb from "@/views/modules/visual/cpts/tb"; |
||||
|
import screenEchartsFrame from "@/views/modules/visual/components/screen-echarts-frame"; |
||||
|
|
||||
|
import { pieOption } from './typePieOption.js' |
||||
|
|
||||
|
|
||||
|
export default { |
||||
|
name: "HomeMap", |
||||
|
data () { |
||||
|
return { |
||||
|
showNoData: false, |
||||
|
timer: null, |
||||
|
pieChartS: null, |
||||
|
pieChart: '', |
||||
|
pieOption: {}, |
||||
|
pieInitState: false, |
||||
|
pieTotal: 0, |
||||
|
colorArray: [], |
||||
|
pieData: [ |
||||
|
{ total: 1048, categoryName: '城市管理', color: '#1B51FF', selected: true }, |
||||
|
{ total: 735, categoryName: '为民服务', color: '#00E5ED' }, |
||||
|
{ total: 580, categoryName: '安全监管', color: '#7800FF' }, |
||||
|
{ total: 484, categoryName: '民政', color: '#16D783' }, |
||||
|
{ total: 300, categoryName: '环境保护', color: '#FF7800' }, |
||||
|
{ total: 1049, categoryName: '建设管理', color: '#FFBA00' }, |
||||
|
{ total: 735, categoryName: '街道吹哨部门报到', color: '#FFD685' }, |
||||
|
{ total: 580, categoryName: '社会治安综合', color: '#2A00FF' }, |
||||
|
{ total: 484, categoryName: '公安交通管理', color: '#C600FF' }, |
||||
|
{ total: 300, categoryName: '卫生计生监管执法', color: '#FF2A00' }, |
||||
|
{ total: 484, categoryName: '民生', color: '#3DDA83' }, |
||||
|
{ total: 300, categoryName: '街道安全', color: '#FAC126' } |
||||
|
], |
||||
|
|
||||
|
agencyId: '', |
||||
|
dateId: '', |
||||
|
categoryCode: '', |
||||
|
demand: { |
||||
|
loading: true, |
||||
|
colList: [ |
||||
|
{ |
||||
|
align: "center", |
||||
|
width: "5%", |
||||
|
}, |
||||
|
{ |
||||
|
align: "center", |
||||
|
width: "10%", |
||||
|
}, |
||||
|
{ |
||||
|
align: "center", |
||||
|
width: "10%", |
||||
|
}, |
||||
|
{ |
||||
|
align: "center", |
||||
|
width: "10%", |
||||
|
}, |
||||
|
{ |
||||
|
align: "center", |
||||
|
width: "10%", |
||||
|
}, |
||||
|
{ |
||||
|
align: "center", |
||||
|
width: "5%", |
||||
|
}, |
||||
|
{ |
||||
|
align: "center", |
||||
|
width: "20%", |
||||
|
}, |
||||
|
{ |
||||
|
align: "center", |
||||
|
width: "10%", |
||||
|
}, |
||||
|
{ |
||||
|
align: "center", |
||||
|
width: "10%", |
||||
|
}, |
||||
|
], |
||||
|
header: ["序号", "项目编号", "类别", "反映渠道", "所属网格", "状态", "项目标题", "转成项目时间", "操作"], |
||||
|
list: [], |
||||
|
pageSize: 10, |
||||
|
pageNo: 1, |
||||
|
total: 0, |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
casOptions: [], |
||||
|
agencyIdArray: [], |
||||
|
customerList: [], |
||||
|
iscascaderShow: 0, |
||||
|
|
||||
|
optionProps: { |
||||
|
multiple: false, |
||||
|
value: 'agencyId', |
||||
|
label: 'agencyName', |
||||
|
children: 'subAgencyList', |
||||
|
checkStrictly: true |
||||
|
}, |
||||
|
|
||||
|
}; |
||||
|
}, |
||||
|
// mixins: [animate] |
||||
|
beforeDestroy () { |
||||
|
this.timer && clearInterval(this.timer) |
||||
|
}, |
||||
|
|
||||
|
async mounted () { |
||||
|
this.userId = this.uid; |
||||
|
this.initData() |
||||
|
await this.getAgencylist()//获取组织级别 |
||||
|
this.getApiData(); |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
initData () { |
||||
|
var time = (new Date).getTime() - 24 * 60 * 60 * 1000; |
||||
|
this.dateId = new Date(time); // 获取的是前一天日期 |
||||
|
|
||||
|
}, |
||||
|
async getApiData () { |
||||
|
|
||||
|
await this.getPie() |
||||
|
await this.getTable(); |
||||
|
}, |
||||
|
|
||||
|
async getAgencylist () { |
||||
|
const url = '/gov/org/customeragency/agencylist' |
||||
|
// const url = 'http://yapi.elinkservice.cn/mock/102/gov/org/agency/agencylist' |
||||
|
|
||||
|
const params = { |
||||
|
// customerId: '613cc61a6b8ce4c70d21bd413dac72cc' |
||||
|
customerId: '0c41b272ee9ee95ac6f184ad548a30eb' |
||||
|
} |
||||
|
const { data, code, msg } = await requestPost(url, params) |
||||
|
if (code === 0) { |
||||
|
++this.iscascaderShow |
||||
|
this.casOptions = [] |
||||
|
this.agencyIdArray.length = [] |
||||
|
|
||||
|
if (data) { |
||||
|
this.casOptions.push(data) |
||||
|
} |
||||
|
|
||||
|
} else { |
||||
|
this.$message.error(msg) |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
handleChangeDate (value) { |
||||
|
|
||||
|
this.dateId = value |
||||
|
this.getApiData() |
||||
|
}, |
||||
|
|
||||
|
|
||||
|
pieInitOk (dom) { |
||||
|
console.log('pie准备好了', dom) |
||||
|
this.pieChartS = dom |
||||
|
this.pieInitState = true |
||||
|
|
||||
|
}, |
||||
|
getPie () { |
||||
|
if (this.pieInitState) { |
||||
|
this.getPieChart() |
||||
|
} else { |
||||
|
setTimeout(() => { |
||||
|
this.getPie() |
||||
|
}, 500) |
||||
|
} |
||||
|
}, |
||||
|
// 获取饼状图 |
||||
|
async getPieChart () { |
||||
|
this.$refs.pieChart.clear() |
||||
|
this.pieTotal = 0 |
||||
|
const _that = this |
||||
|
// this.$refs.pieChart.showLoading() |
||||
|
// const url ="/data/aggregator/project/projectcategorylist"; |
||||
|
const url = "http://yapi.elinkservice.cn/mock/245/data/aggregator/project/projectcategorylist"; |
||||
|
let params = { |
||||
|
agencyId: this.agencyId, |
||||
|
dateId: this.dateId, |
||||
|
}; |
||||
|
|
||||
|
const { data, code, msg } = await requestPost(url, params); |
||||
|
// 获取pieChart配置 |
||||
|
|
||||
|
if (code === 0) { |
||||
|
// 获取pieChart配置 |
||||
|
this.pieOption = pieOption(this.pieChartS) |
||||
|
if (data && data.length > 0) { |
||||
|
// this.pieData = data |
||||
|
|
||||
|
} else { |
||||
|
this.pieData = [{ total: 0, categoryName: '无分类', color: '#00E5ED' }] |
||||
|
} |
||||
|
|
||||
|
let maxValue = this.pieData[0].total |
||||
|
let maxIndex = 0 |
||||
|
this.pieData[0].selected = true |
||||
|
this.pieData.forEach((item, index) => { |
||||
|
item.name = item.categoryName |
||||
|
item.value = item.total |
||||
|
this.colorArray.push(item.color) |
||||
|
this.pieTotal = this.pieTotal + item.value |
||||
|
|
||||
|
if (item.value > maxValue) { |
||||
|
maxValue = item.value |
||||
|
maxIndex = index |
||||
|
item.selected = true |
||||
|
} else if (index !== 0) { |
||||
|
item.selected = false |
||||
|
} |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
|
||||
|
|
||||
|
this.pieOption.title.text = this.pieTotal |
||||
|
this.pieOption.series[1].itemStyle = { |
||||
|
color: function (params) { |
||||
|
return _that.colorArray[params.dataIndex] |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
let fun = function (params) { |
||||
|
_that.clickPie(params.dataIndex) |
||||
|
|
||||
|
_that.categoryCode = _that.pieData[params.dataIndex].categoryCode |
||||
|
_that.getTable() |
||||
|
} |
||||
|
this.$refs.pieChart.handleClick(fun) |
||||
|
this.clickPie(maxIndex) |
||||
|
} else { |
||||
|
this.$message.error(msg); |
||||
|
} |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
clickPie (seriesIndex) { |
||||
|
this.pieData.forEach((element, index) => { |
||||
|
if (index === seriesIndex) { |
||||
|
element.label = { |
||||
|
show: true, |
||||
|
|
||||
|
}; |
||||
|
element.labelLine = { |
||||
|
show: true, |
||||
|
lineStyle: { |
||||
|
opacity: 1, |
||||
|
} |
||||
|
|
||||
|
}; |
||||
|
console.log('zhilma') |
||||
|
|
||||
|
} else { |
||||
|
element.label = { |
||||
|
show: false, |
||||
|
|
||||
|
}; |
||||
|
element.labelLine = { |
||||
|
show: false, |
||||
|
lineStyle: { |
||||
|
opacity: 0, |
||||
|
color: 'rgba(255,255,255,0)' |
||||
|
} |
||||
|
|
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
}); |
||||
|
this.pieOption.series[1].data = this.pieData |
||||
|
// this.$refs.pieChart.hideLoading() |
||||
|
this.$refs.pieChart.setOption(this.pieOption) |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
handleChangeAgency (value) { |
||||
|
|
||||
|
this.agencyName = this.$refs["myCascader"].getCheckedNodes()[0].label |
||||
|
this.agencyId = this.agencyIdArray.length > 0 ? this.agencyIdArray[this.agencyIdArray.length - 1] : '' |
||||
|
this.getApiData() |
||||
|
console.log(this.agencyIdArray) |
||||
|
}, |
||||
|
|
||||
|
//加载组织数据 |
||||
|
async getTable () { |
||||
|
// const url = "/data/aggregator/project/categoryprojectlist"; |
||||
|
const url = "http://yapi.elinkservice.cn/mock/245/data/aggregator/project/categoryprojectlist"; |
||||
|
let params = { |
||||
|
dateId: this.dateId, |
||||
|
agencyId: this.agencyId, |
||||
|
categoryCode: this.categoryCode, |
||||
|
pageNo: this.demand.pageNo, |
||||
|
pageSize: this.demand.pageSize, |
||||
|
isPage: true |
||||
|
}; |
||||
|
|
||||
|
const { data, code, msg } = await requestPost(url, params); |
||||
|
this.demand.loading = false; |
||||
|
|
||||
|
if (code === 0) { |
||||
|
this.demand.total = data.total; |
||||
|
this.demand.list = data.list.map((item) => { |
||||
|
//楼院小组:issue; 项目立项:agency 事件上报:resi_event【也可控制点击查看时里边三个按钮的显示】 |
||||
|
item.originShow = item.origin === 'issue' ? '楼院小组' : item.origin === 'agency' ? '项目立项' : '事件上报' |
||||
|
//状态:待处理 pending,已结案closed |
||||
|
item.statusShow = item.status === 'pending' ? '待处理' : '已结案' |
||||
|
return [ |
||||
|
{ type: "index" }, |
||||
|
item.projectCode, |
||||
|
item.categoryNames.join(','), |
||||
|
item.originShow, |
||||
|
item.gridName, |
||||
|
item.statusShow, |
||||
|
item.title, |
||||
|
item.time, |
||||
|
{ type: "operate", list: ["查看"] }, |
||||
|
]; |
||||
|
}); |
||||
|
} else { |
||||
|
this.$message.error(msg); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
handlePageNoChange_demand (val) { |
||||
|
this.demand.pageNo = val; |
||||
|
this.getTable(); |
||||
|
}, |
||||
|
toUserInfo (uid) { |
||||
|
this.$router.push({ path: `/main-shuju/visual-basicinfo-people/${uid}` }); |
||||
|
}, |
||||
|
}, |
||||
|
props: { |
||||
|
uid: { |
||||
|
type: String, |
||||
|
default: "", |
||||
|
// default: "8ada68cb6f1e4b9a8333348a39ef3aee", |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
computed: {}, |
||||
|
|
||||
|
components: { |
||||
|
cptCard, |
||||
|
cptTb, |
||||
|
screenEchartsFrame, |
||||
|
}, |
||||
|
|
||||
|
watch: { |
||||
|
uid (id) { |
||||
|
this.userId = id; |
||||
|
}, |
||||
|
userId () { |
||||
|
this.getApiData(); |
||||
|
window.scrollTo(0, 0); |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style |
||||
|
lang="scss" |
||||
|
src="@/assets/scss/modules/visual/distributionAnalyze.scss" |
||||
|
scoped |
||||
|
></style> |
||||
|
|
||||
|
<style lang=scss scoped> |
||||
|
</style> |
||||
@ -0,0 +1,77 @@ |
|||||
|
import * as echarts from 'echarts' |
||||
|
export function lineOption () { |
||||
|
|
||||
|
return { |
||||
|
|
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
// boundaryGap: false,
|
||||
|
axisLabel: { |
||||
|
color: '#8ec7dc', |
||||
|
fontSize: 16 |
||||
|
}, |
||||
|
axisTick: { |
||||
|
show: false |
||||
|
}, |
||||
|
axisLine: { |
||||
|
lineStyle: { |
||||
|
color: '#0c4b59' |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
yAxis: { |
||||
|
nameTextStyle: { |
||||
|
color: '#8ec7dc', |
||||
|
fontSize: 18 |
||||
|
}, |
||||
|
splitNumber: 4, |
||||
|
minInterval: 1, |
||||
|
show: true, |
||||
|
type: 'value', |
||||
|
axisLabel: { |
||||
|
color: '#8ec7dc', |
||||
|
fontSize: 18 |
||||
|
}, |
||||
|
axisTick: { |
||||
|
show: false |
||||
|
}, |
||||
|
splitLine: { |
||||
|
lineStyle: { |
||||
|
color: ['#145968'], |
||||
|
type: 'dotted' |
||||
|
} |
||||
|
}, |
||||
|
axisLine: { |
||||
|
show: true, |
||||
|
symbol: ['none', 'arrow'], |
||||
|
symbolOffset: [0, 15], |
||||
|
lineStyle: { |
||||
|
color: '#0c4b59' |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: '项目数', |
||||
|
type: 'line', |
||||
|
barWidth: 15, |
||||
|
areaStyle: {}, |
||||
|
itemStyle: { |
||||
|
color: new echarts.graphic.LinearGradient( |
||||
|
0, 1, 0, 0, |
||||
|
[ |
||||
|
{ offset: 0, color: 'rgba(121, 55, 255, 0)' }, |
||||
|
{ offset: 1, color: '#6339FF' } |
||||
|
] |
||||
|
) |
||||
|
} |
||||
|
}, |
||||
|
// {
|
||||
|
// data: [820, 932, 901, 934, 1290, 1330, 1320],
|
||||
|
// type: 'line',
|
||||
|
// areaStyle: {}
|
||||
|
// }
|
||||
|
] |
||||
|
|
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue