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