Browse Source

事件处理分析

shibei_master
jiangyy 3 years ago
parent
commit
2e202a4e92
  1. 57
      src/assets/scss/modules/visual/processAnalyze.scss
  2. 58
      src/assets/scss/modules/visual/resibuzz.scss
  3. 132
      src/assets/scss/modules/visual/search_1.scss
  4. 173
      src/assets/scss/modules/visual/shijianchulifenxi.scss
  5. 58
      src/assets/scss/modules/visual/typeAnalyze.scss
  6. 5
      src/router/index.js
  7. 11
      src/views/modules/visual/communityGovern/distributionAnalyze.vue
  8. 10
      src/views/modules/visual/communityGovern/processAnalyze.vue
  9. 523
      src/views/modules/visual/communityGovern/resibuzz copy.vue
  10. 54
      src/views/modules/visual/communityGovern/resibuzz.vue
  11. 86
      src/views/modules/visual/communityGovern/shijianchuli/processLineOption.js
  12. 66
      src/views/modules/visual/communityGovern/shijianchuli/processPieOption.js
  13. 699
      src/views/modules/visual/communityGovern/shijianchuli/shijianchulifenxi.vue
  14. 50
      src/views/modules/visual/communityGovern/typeAnalyze.vue

57
src/assets/scss/modules/visual/processAnalyze.scss

@ -2,63 +2,6 @@
@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-title {
display: flex;
align-items: center;
.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;
}
}
.second-select:last-child {
margin-left: 0;
}
}
}
.g-cpt-resi {
display: flex;

58
src/assets/scss/modules/visual/resibuzz.scss

@ -2,65 +2,7 @@
@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 {
margin-left: 10px;
// position: absolute;
// top: 20px;
// right: 10px;
}
.second-select:last-child {
margin-left: 0;
}
}
.g-cpt-resi {
display: flex;

132
src/assets/scss/modules/visual/search_1.scss

@ -0,0 +1,132 @@
@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;
}
.search{
display: block;
display: flex;
align-items: center;
margin-left:40px;
.second-select {
margin: 0 10px 0 10px;
::v-deep .el-input {
width: 180px;
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';
}
// .el-select__caret:before {
// content: '\E790'
// }
}
}
}
.range-data {
::v-deep .el-date-editor {
width: 360px;
position: relative;
background: #06186d;
border: 1px solid #1a64cc;
.el-range-input {
color: #fff;
background: #06186d;
margin-left: 10px;
}
.el-range-separator {
color: #fff;
}
.el-range__icon {
position: absolute;
right: 5px;
// float: right;
}
.el-input__prefix {
left: unset;
right: 5px;
}
}
}
.one-date{
::v-deep .el-date-editor {
.el-input__prefix {
left: unset;
right: 5px;
}
}
}
.second-title {
display: block;
display: flex;
align-items: center;
margin-left
.second-title-label {
position: relative;
padding-left: 40px;
font-size: 16px;
font-weight: 500;
color: #fff;
}
.second-title-label::after {
content: '';
position: absolute;
top: 50%;
left: 20px;
width: 12px;
height: 12px;
box-sizing: border-box;
margin-top: -6px;
background: #2865fa;
border-radius: 50%;
}
}
.cascader {
::v-deep .el-input {
width: 220px;
}
}
}

173
src/assets/scss/modules/visual/shijianchulifenxi.scss

@ -0,0 +1,173 @@
@import '../../c/config';
@import '../../c/function';
@import './c/common';
.g-cpt-resi {
display: flex;
flex-direction: row;
height: calc(100vh - 180px);
.g-l {
flex-shrink: 0;
width: 700px;
height: calc(100vh - 230px);
.l_top {
height: 385px;
display: flex;
align-items: center;
}
.l_bottom {
height: calc(100vh - 230px - 385px);
margin-top: 20px;
}
}
.g-r {
text-align: center;
margin: 20px 10px 20px;
width: calc(100vw - 700px);
height: calc(100vh - 180px - 20px);
}
}
.l_bottom {
.bottom_label {
position: relative;
padding-left: 40px;
font-size: 16px;
font-weight: 500;
color: #fff;
}
.bottom_label::after {
content: '';
position: absolute;
top: 50%;
left: 20px;
width: 12px;
height: 12px;
box-sizing: border-box;
margin-top: -6px;
background: #2865fa;
border-radius: 50%;
}
> span {
font-size: 18px;
font-family: PingFang SC;
font-weight: 800;
color: #ffffff;
}
.echart-line {
margin-top: 10px;
height: 100%;
}
}
.g-r {
.m-tb {
position: relative;
height: 100%;
.tb {
height: calc(100vh - 170px - 50px - 50px);
overflow-y: auto;
@include scrollBar;
}
.m-pagination {
box-sizing: border-box;
position: absolute;
right: 5px;
bottom: 5px;
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: 385px;
box-sizing: border-box;
}
.g-pie {
position: relative;
display: flex;
.pie-legend {
margin-left: 30px;
display: flex;
flex-direction: column;
justify-content: center;
.legend_item {
.item_name {
margin-left: 5px;
font-size: 10px;
font-family: PingFang SC;
font-weight: 500;
color: #eff0f1;
}
> img {
margin-top: -10px;
width: 80px;
height: 10px;
}
.item_num {
.item_count {
font-size: 17px;
font-family: PingFang SC;
font-weight: 500;
color: #ffffff;
}
.item_percent {
margin-left: 12px;
font-size: 8px;
font-family: PingFang SC;
font-weight: 300;
color: #ffffff;
line-height: 18px;
}
}
}
.item_last {
margin-top: 20px;
}
}
}
.table-status {
position: relative;
width: 600px;
margin: auto;
}

58
src/assets/scss/modules/visual/typeAnalyze.scss

@ -2,64 +2,6 @@
@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;

5
src/router/index.js

@ -308,6 +308,11 @@ router.beforeEach((to, from, next) => {
id: "6",
name: "社区治理",
children: [
{
url: "visual/communityGovern/shijianchuli/shijianchulifenxi",
name: "事件处理分析",
id: "shijianchulifenxi",
},
{
url: "visual/communityGovern/processAnalyze",
name: "事件处置分析",

11
src/views/modules/visual/communityGovern/distributionAnalyze.vue

@ -5,7 +5,7 @@
<img src="@/assets/img/shuju/title-tip.png" />
<span>事件分布分析</span>
<div class="second-title">
<div class="search">
<div class="second-select cascader">
@ -18,7 +18,7 @@
:show-all-levels="false"
@change="handleChangeAgency"></el-cascader>
</div>
<div class="second-select">
<div class="second-select range-data">
<el-date-picker v-model="timeRange"
type="daterange"
range-separator="至"
@ -635,5 +635,8 @@ export default {
scoped
></style>
<style lang=scss scoped>
</style>
<style
lang="scss"
src="@/assets/scss/modules/visual/search_1.scss"
scoped
></style>

10
src/views/modules/visual/communityGovern/processAnalyze.vue

@ -4,7 +4,7 @@
<img src="@/assets/img/shuju/title-tip.png" />
<span>事件处置分析</span>
<div class="second-title">
<div class="search">
<div class="second-select cascader">
<el-cascader class="customer_cascader"
ref="myCascader"
@ -15,7 +15,7 @@
:show-all-levels="false"
@change="handleChangeAgency"></el-cascader>
</div>
<div class="second-select">
<div class="second-select one-date">
<el-date-picker v-model="dateIdShow"
type="date"
:clearable="false"
@ -707,4 +707,10 @@ export default {
scoped
></style>
<style
lang="scss"
src="@/assets/scss/modules/visual/search_1.scss"
scoped
></style>

523
src/views/modules/visual/communityGovern/resibuzz copy.vue

@ -1,523 +0,0 @@
<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"
:show-all-levels="false"
@change="handleChangeAgency"></el-cascader>
</div>
<div class="second-select status-select">
<el-select v-model="status"
:popper-append-to-body="false"
placeholder="请选择">
<el-option v-for="(item,index) in stateArray"
:key="item.value"
:label="item.label"
:value="item.value"
@click.native="handleChangeState(index)">
</el-option>
</el-select>
</div>
</div>
<div class="g-cpt-resi">
<div class="g-l">
<screen-echarts-frame v-if=" !dataLoading"
class="echart-wr"
@myChartMethod="pieInitOk"
ref="pieChart"></screen-echarts-frame>
<div class="table-status"
v-if="dataLoading">
<screen-loading>加载中</screen-loading>
</div>
</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"
@operate="toIssueInfo"></cpt-tb>
</div>
<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>
<issue-info v-if="showIssue"
:issueId="issueId"
@close="showIssue = false" />
</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 ScreenLoading from "@/views/modules/visual/components/screen-loading";
import ScreenNodata from "@/views/modules/visual/components/screen-nodata";
import { pieOption } from './resiPieOption.js'
import nextTick from 'dai-js/tools/nextTick'
import issueInfo from "./cpt/issue-info";
export default {
name: "HomeMap",
data () {
return {
dataLoading: true,
pieChartS: null,
pieChart: '',
pieOption: {},
pieInitState: false,
pieTotal: 0,
colorArray: [],
pieData: [
// { count: 1048, categoryName: '', color: '#1B51FF', selected: true },
// { count: 735, categoryName: '', color: '#00E5ED' },
// { count: 580, categoryName: '', color: '#7800FF' },
// { count: 484, categoryName: '', color: '#16D783' },
// { count: 300, categoryName: '', color: '#FF7800' },
// { count: 1048, categoryName: '', color: '#FFBA00' },
// { count: 735, categoryName: '', color: '#FFD685' },
// { count: 1580, categoryName: '', color: '#2A00FF' },
// { count: 484, categoryName: '', color: '#C600FF' },
// { count: 300, categoryName: '', color: '#FF2A00' },
// { count: 484, categoryName: '', color: '#3DDA83' },
// { count: 300, categoryName: '', color: '#FAC126' }
],
//voting shift_project closedall
stateArray: [
{
label: '全部',
value: 'all'
},
{
label: '表决中',
value: 'voting'
},
{
label: '已转项目',
value: 'shift_project'
},
{
label: '已关闭',
value: 'closed'
},
],
status: 'all',
orgId: '',
orgTypeSel: '',
tableList: [],
demand: {
loading: true,
colList: [
{
align: "center",
width: "5%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "20%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "5%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "15%",
},
{
align: "center",
width: "5%",
},
{
align: "center",
width: "5%",
},
{
align: "center",
width: "10%",
},
],
header: ["序号", "议题标题", "处理意见", "分类", "状态", "创建时间", "发起人", "已表态/应表态", "支持", "反对", "操作"],
list: [],
pageSize: 10,
pageNo: 1,
total: 0,
},
showIssue: false,
issueId: '',
casOptions: [],
agencyIdArray: [],
customerList: [],
iscascaderShow: 0,
optionProps: {
multiple: false,
value: 'orgLevel',
label: 'agencyName',
children: 'subAgencyList',
checkStrictly: true
},
};
},
// mixins: [animate]
beforeDestroy () {
},
async mounted () {
this.dataLoading = true
await this.getAgencylist()//
await this.getApiData()
this.dataLoading = false
this.getPie()
},
methods: {
async getApiData () {
await this.getPieChart()
// await this.getTable();
},
//
async getAgencylist () {
const url = "/gov/org/customeragency/agencygridtree";
let params = {};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.agencyInfo = data
this.orgId = this.agencyInfo.agencyId
this.orgType = this.agencyInfo.level === 'grid' ? 'grid' : 'agency'
if (!this.agencyInfo.latitude) {
this.agencyInfo.latitude = 36.072227
}
if (!this.agencyInfo.longitude) {
this.agencyInfo.longitude = 120.389455
}
if (!this.agencyInfo.level) {
this.agencyInfo.level = 'street'
}
//
++this.iscascaderShow
this.casOptions = []
this.agencyIdArray.length = []
if (data) {
this.casOptions.push(data)
this.agencyIdArray.push(this.agencyInfo.orgLevel)
}
} else {
this.$message.error(msg);
}
},
//
async getPieChart () {
if (this.$refs.pieChart) {
this.$refs.pieChart.clear()
this.$refs.pieChart.showLoading()
}
const url = "/gov/issue/issue/resibuzz-leftpiechart";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/issue/issue/resibuzz-leftpiechart";
let params = {
orgId: this.orgId,
orgType: this.orgType,
status: this.status,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
if (data && data.length > 0) {
this.pieData = data
} else {
this.pieData = []
}
if (this.$refs.pieChart) {
this.$refs.pieChart.hideLoading()
}
} else {
this.$message.error(msg);
}
},
pieInitOk (dom) {
console.log('pie准备好了', dom)
this.pieChartS = dom
this.pieInitState = true
},
getPie () {
if (this.pieInitState) {
this.assignPieChart()
} else {
setTimeout(() => {
this.getPie()
}, 500)
}
},
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: true,
};
element.labelLine = {
show: true,
lineStyle: {
opacity: 0,
color: 'rgba(255,255,255,0)'
}
};
}
});
this.pieOption.series[1].data = this.pieData
this.$refs.pieChart.setOption(this.pieOption)
},
assignPieChart () {
this.pieTotal = 0
if (this.pieData.length > 0) {
this.$refs.pieChart.setNoData(false)
const _that = this
let maxIndex = 0
let maxValue = this.pieData[0].count
this.pieData[0].selected = true
this.pieData.forEach((item, index) => {
item.name = item.categoryName
item.value = item.count
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
}
});
// pieChart
this.pieOption = pieOption(this.pieChartS)
this.pieOption.title.text = this.pieTotal
this.pieOption.series[1].itemStyle = {
color: function (params) {
return _that.colorArray[params.dataIndex]
}
}
this.pieOption.series[1].data = this.pieData
this.$refs.pieChart.setOption(this.pieOption)
// this.clickPie(maxIndex)
// let fun = function (params) {
// _that.clickPie(params.dataIndex)
// }
// this.$refs.pieChart.handleClick(fun)
} else {
this.$refs.pieChart.setNoData(true)
}
},
async handleChangeState (index) {
await this.getApiData()
this.assignPieChart()
},
async handleChangeAgency (value) {
let orgArray = []
let key = this.agencyIdArray.length > 0 ? this.agencyIdArray[this.agencyIdArray.length - 1] : ''
if (key) {
orgArray = key.split('-')
this.orgId = orgArray[0]
this.orgType = orgArray[1] === 'grid' ? 'grid' : 'agency'
} else {
this.orgId = ''
this.orgType = ''
}
await this.getApiData()
this.assignPieChart()
},
//
async getTable () {
const url = "/gov/issue/issue/resibuzz";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/issue/issue/resibuzz";
let params = {
status: this.status,
orgId: this.orgId,
orgType: this.orgType,
pageNo: this.demand.pageNo,
pageSize: this.demand.pageSize,
};
const { data, code, msg } = await requestPost(url, params);
this.demand.loading = false;
if (code === 0) {
this.demand.total = data.total;
this.tableList = data.list
this.demand.list = data.list.map((item) => {
return [
item.sort ? item.sort : '--',
item.issueTitle ? item.issueTitle : '',
item.suggestion ? item.suggestion : '',
item.categoryName.join(','),
item.status ? item.status : '',
item.createdTime ? item.createdTime : '',
item.issueOriginator ? item.issueOriginator : '',
item.voteAccount ? item.voteAccount : '',
item.supportCount ? item.supportCount : 0,
item.oppositionCount ? item.oppositionCount : 0,
{ type: "operate", list: ["查看"] },
];
});
} else {
this.$message.error(msg);
}
},
handlePageNoChange_demand (val) {
this.demand.pageNo = val;
this.getTable();
},
async toIssueInfo (index) {
const { tableList } = this;
this.issueId = tableList[index].issueId
this.showIssue = true
},
},
props: {
uid: {
type: String,
default: "",
// default: "8ada68cb6f1e4b9a8333348a39ef3aee",
},
},
computed: {},
components: {
cptCard,
cptTb,
screenEchartsFrame,
ScreenLoading,
ScreenNodata,
issueInfo
},
watch: {
uid (id) {
this.userId = id;
},
userId () {
this.getApiData();
window.scrollTo(0, 0);
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/visual/resibuzz.scss"
scoped
></style>
<style lang=scss scoped>
</style>

54
src/views/modules/visual/communityGovern/resibuzz.vue

@ -3,29 +3,30 @@
<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"
:show-all-levels="false"
@change="handleChangeAgency"></el-cascader>
</div>
<div class="second-select status-select">
<el-select v-model="status"
:popper-append-to-body="false"
placeholder="请选择">
<el-option v-for="(item,index) in stateArray"
:key="item.value"
:label="item.label"
:value="item.value"
@click.native="handleChangeState(index)">
</el-option>
</el-select>
<div class="search">
<div class="second-select cascader">
<el-cascader class="customer_cascader"
ref="myCascader"
v-model="agencyIdArray"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"
@change="handleChangeAgency"></el-cascader>
</div>
<div class="second-select ">
<el-select v-model="status"
:popper-append-to-body="false"
placeholder="请选择">
<el-option v-for="(item,index) in stateArray"
:key="item.value"
:label="item.label"
:value="item.value"
@click.native="handleChangeState(index)">
</el-option>
</el-select>
</div>
</div>
</div>
@ -531,5 +532,8 @@ export default {
scoped
></style>
<style lang=scss scoped>
</style>
<style
lang="scss"
src="@/assets/scss/modules/visual/search_1.scss"
scoped
></style>

86
src/views/modules/visual/communityGovern/shijianchuli/processLineOption.js

@ -0,0 +1,86 @@
import * as echarts from 'echarts'
export function lineOption () {
return {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
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',
smooth: true,
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: {}
// }
]
}
}

66
src/views/modules/visual/communityGovern/resiPieOption copy.js → src/views/modules/visual/communityGovern/shijianchuli/processPieOption.js

@ -1,10 +1,10 @@
export function pieOption (_charts) {
const center= ['50%', '250px']
const center= ['50%', '200px']
return {
title: {
text: '0',
top: 220,
top: 170,
left: 'center',
textStyle: {
width: '100%',
@ -23,18 +23,18 @@ const center= ['50%', '250px']
tooltip: {
show: false
},
legend: {
top: 500,
bottom: 0,
itemWidth: 20,
itemHeight: 10,
textStyle: {
color: '#D2E7FF',
fontSize: 16,
lineHeight: 20,
},
// legend: {
// top: 350,
// bottom: 0,
// itemWidth: 20,
// itemHeight: 10,
// textStyle: {
// color: '#D2E7FF',
// fontSize: 16,
// lineHeight: 20,
// },
},
// },
series: [
// 外侧圆环
{
@ -45,21 +45,27 @@ const center= ['50%', '250px']
// tooltip: {
// },
center: center,
radius: ['55%', '55.3%'],
radius: ['58%', '58.3%'],
label: {
show: false
normal: {
show: false
}
},
labelLine: {
show: false
normal: {
show: false
}
},
data: [{
value: 360,
itemStyle: {
color: 'rgba(40, 101, 250, 0)',
width:0,
borderColor: 'rgba(40, 101, 250, 0.5)',
borderWidth: 1,
borderType: 'dotted'
normal: {
color: 'rgba(40, 101, 250, 0)',
width:0,
borderColor: 'rgba(40, 101, 250, 0.5)',
borderWidth: 1,
borderType: 'dotted'
}
}
}
]
@ -71,11 +77,11 @@ const center= ['50%', '250px']
// name: 'Access From',
type: 'pie',
center: center,
radius: ['40%', '60%'],
radius: ['35%', '48%'],
avoidLabelOverlap: false,
// top: top + '%',
// height: '80%',
selectedMode: 'single',
// selectedMode: 'single',
left: 'center',
width: 400,
label: {
@ -85,7 +91,7 @@ const center= ['50%', '250px']
// formatter: '{a|{c}}\n\n{name|{b}}',
formatter: '{a|{c}}\n{r|}\n{name|{b}}',
minMargin: 5,
edgeDistance: -20,
edgeDistance: 1,
lineHeight: 15,
color: '#fff',
fontSize: 12,
@ -131,13 +137,11 @@ const center= ['50%', '250px']
};
},
itemStyle: {
// color:function(params) {
// //自定义颜色
// var colorList = [
// '#00FFFF', '#00FF00', '#FFFF00', '#FF8C00', '#FF0000', '#FE8463',
// ];
// return colorList[params.dataIndex]
// }
color:function(params) {
//自定义颜色
var colorList = [ '#FAC126', '#3DDA83'];
return colorList[params.dataIndex]
}
},
data: [],

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

@ -0,0 +1,699 @@
<template>
<cpt-card>
<div class="title">
<img src="@/assets/img/shuju/title-tip.png" />
<span>事件处理分析</span>
<div class="search">
<div class="second-select cascader">
<el-cascader class="customer_cascader"
ref="myCascader"
v-model="agencyIdArray"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"
@change="handleChangeAgency"></el-cascader>
</div>
<div class="second-select">
<el-select v-model="dataType"
:popper-append-to-body="false"
placeholder="请选择">
<el-option v-for="(item,index) in dateArray"
:key="item.value"
:label="item.label"
:value="item.value"
@click.native="handleChangeState(index)">
</el-option>
</el-select>
</div>
<div v-if="dataType==='5'"
class="second-select range-data">
<el-date-picker v-model="timeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
prefix-icon="el-icon-caret-bottom"
format="yyyy-MM-dd"
value-format="yyyyMMdd"
@change="handleSelectChange">
</el-date-picker>
</div>
</div>
</div>
<div class="g-cpt-resi">
<div class="g-l">
<div class="l_top">
<div v-if="!pieNoData && !dataLoading"
class="g-pie">
<screen-echarts-frame class="echart-wr"
@myChartMethod="pieInitOk"
ref="pieChart"></screen-echarts-frame>
<div class="pie-legend">
<div :class="['legend_item',{'item_last':index===legendArray.length-1}]"
v-for="(item,index) in legendArray"
:key="index">
<div class="item_name">{{item.name}}</div>
<img :src="item.url" />
<div class="item_num">
<span class="item_count">{{item.count}}</span>
<span class="item_percent">{{item.percent}}</span>
</div>
</div>
</div>
</div>
<screen-nodata class="nodata"
v-if="pieNoData&& !dataLoading"></screen-nodata>
<div class="table-status"
v-if="dataLoading">
<screen-loading>加载中</screen-loading>
</div>
</div>
<div class="l_bottom">
<div class="bottom_label">月度新增事件统计</div>
<screen-echarts-frame v-if="!lineNoData&& !dataLoading"
class="echart-line"
@myChartMethod="lineInitOk"
ref="lineChart"></screen-echarts-frame>
<screen-nodata class="nodata"
v-if="lineNoData&& !dataLoading"></screen-nodata>
<div class="table-status"
v-if="dataLoading">
<screen-loading>加载中</screen-loading>
</div>
</div>
</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"
@operate="toIssueInfo"></cpt-tb>
</div>
<div class="m-pagination">
<el-pagination :current-page="demand.pageNo"
:page-size="demand.pageSize"
:total="demand.total"
background
layout="prev, pager, next,total"
@current-change="handlePageNoChange_demand">
</el-pagination>
</div>
</div>
</div>
</div>
</cpt-card>
</template>
<script>
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 ScreenLoading from "@/views/modules/visual/components/screen-loading";
import ScreenNodata from "@/views/modules/visual/components/screen-nodata";
import { pieOption } from './processPieOption.js'
import { lineOption } from './processLineOption.js'
import nextTick from 'dai-js/tools/nextTick'
export default {
name: "shijianchulifenxi",
data () {
return {
dataLoading: true,
pieNoData: false,
lineNoData: false,
isfirstInit: true,//
projectTotal: 0,
dateIncr: 0,
monthIncr: 0,
lineChart: '',
lineOption: {},
lineInitState: false,
lineColorArray: [],
lineData: [],
lineXaxis: [],
lineSeriesData: [],
pieChartS: null,
pieChart: '',
pieOption: {},
pieInitState: false,
pieTotal: 0,
colorArray: [],
pieData: [],
legendArray: [
{
name: '未结案',
count: 0,
percent: '0%',
url: require('@/assets/img/shuju/measure/huang@2x.png')
},
{
name: '已结案',
count: 0,
percent: '0%',
url: require('@/assets/img/shuju/measure/lv@2x.png')
}
],
timeRange: [],
agencyId: '',
dataType: '5',
agencyInfo: {},
casOptions: [],
agencyIdArray: [],
customerList: [],
iscascaderShow: 0,
optionProps: {
multiple: false,
value: 'agencyId',
label: 'agencyName',
children: 'subAgencyList',
checkStrictly: true
},
dateArray: [
{
label: '近一年',
value: '1'
},
{
label: '近一个月',
value: '2'
},
{
label: '近三个月',
value: '3'
},
{
label: '近半年',
value: '4'
},
{
label: '不限',
value: '5'
},
],
tableList: [],
demand: {
loading: true,
colList: [
{
align: "center",
width: "5%",
},
{
align: "center",
width: "15%",
},
{
align: "center",
width: "25%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "5%",
},
{
align: "center",
width: "10%",
},
],
header: ["序号", "所属网格", "事件内容", "上报渠道", "报事人", "手机号", "状态", "操作"],
list: [],
pageSize: 10,
pageNo: 1,
total: 0,
},
};
},
// mixins: [animate]
beforeDestroy () {
},
async created () {
},
async mounted () {
this.dataLoading = true
//
this.initData()
await this.getAgencylist()//
//
await this.getProjectTotal()
await this.getLineChart()
await this.getTable()
this.dataLoading = false
this.assignData()
},
methods: {
async getApiData () {
await this.getProjectTotal()
await this.getLineChart()
await this.getTable();
this.assignData()
},
async handleChangeState (index) {
await this.getApiData()
this.assignPieChart()
},
assignData () {
this.getPie()
this.getLine()
},
handleSelectChange (value) {
console.log(value)
this.getApiData();
},
//
async getAgencylist () {
// const url = "/gov/org/customeragency/agencygridtree";
const url = '/gov/org/customeragency/agencylist'
let params = {};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.agencyInfo = data
this.agencyId = this.agencyInfo.agencyId
if (!this.agencyInfo.latitude) {
this.agencyInfo.latitude = 36.072227
}
if (!this.agencyInfo.longitude) {
this.agencyInfo.longitude = 120.389455
}
if (!this.agencyInfo.level) {
this.agencyInfo.level = 'street'
}
//
++this.iscascaderShow
this.casOptions = []
this.agencyIdArray.length = []
if (data) {
this.casOptions.push(data)
this.agencyIdArray.push(this.agencyId)
}
} else {
this.$message.error(msg);
}
},
//
async getProjectTotal () {
if (this.$refs.pieChart) {
this.$refs.pieChart.showLoading()
this.$refs.pieChart.clear()
}
const url = "/data/aggregator/project/projecttotal";
// const url = "http://yapi.elinkservice.cn/mock/245/data/aggregator/project/projecttotal";
let params = {
agencyId: this.agencyId,
dateId: this.dateIdShow,
};
const { data, code, msg } = await requestPost(url, params);
if (this.$refs.pieChart) {
this.$refs.pieChart.hideLoading()
}
if (code === 0) {
this.projectTotal = data.projectTotal
this.dateIncr = data.dateIncr
this.monthIncr = data.monthIncr
this.legendArray = [
{
name: '未结案',
count: data.pendingTotal,
percent: data.pendingRatio,
url: require('@/assets/img/shuju/measure/huang@2x.png')
},
{
name: '已结案',
count: data.closedTotal,
percent: data.closedRatio,
url: require('@/assets/img/shuju/measure/lv@2x.png')
}
]
this.pieData = [
{
name: "未结案",
value: data.pendingTotal,
},
{
name: "已结案",
value: data.closedTotal,
}
]
} else {
this.$message.error(msg);
}
},
//
async getTable () {
const url = "/gov/issue/issue/resibuzz";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/issue/issue/resibuzz";
let params = {
status: 'pending',
orgId: this.orgId,
orgType: this.orgType,
pageNo: this.demand.pageNo,
pageSize: this.demand.pageSize,
};
const { data, code, msg } = await requestPost(url, params);
this.demand.loading = false;
if (code === 0) {
this.demand.total = data.total;
this.tableList = data.list
this.demand.list = data.list.map((item) => {
return [
item.sort ? item.sort : '--',
item.issueTitle ? item.issueTitle : '',
item.suggestion ? item.suggestion : '',
item.categoryName.join(','),
item.status ? item.status : '',
item.createdTime ? item.createdTime : '',
item.issueOriginator ? item.issueOriginator : '',
item.voteAccount ? item.voteAccount : '',
item.supportCount ? item.supportCount : 0,
item.oppositionCount ? item.oppositionCount : 0,
{ type: "operate", list: ["查看"] },
];
});
} else {
this.$message.error(msg);
}
},
handlePageNoChange_demand (val) {
this.demand.pageNo = val;
this.getTable();
},
async toIssueInfo (index) {
const { tableList } = this;
this.issueId = tableList[index].issueId
this.showIssue = true
},
pieInitOk (dom) {
this.pieChartS = dom
this.pieInitState = true
},
lineInitOk () {
this.lineInitState = true
},
getLine () {
if (this.lineInitState) {
this.assignLineChart()
} else {
setTimeout(() => {
this.getLine()
}, 500)
}
},
// 线
async getLineChart () {
if (this.$refs.lineChart) {
this.$refs.lineChart.clear()
this.$refs.lineChart.showLoading()
}
const _that = this
// this.$refs.pieChart.showLoading()
const url = "/data/aggregator/project/projectmonthincr";
// const url = "http://yapi.elinkservice.cn/mock/245/data/aggregator/project/projectmonthincr";
let params = {
agencyId: this.agencyId,
dateId: this.dateIdShow,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
// pieChart
this.lineXaxis = []
this.lineSeriesData = []
if (data && data.length > 0) {
this.lineNoData = false
data.forEach(item => {
this.lineXaxis.push(item.type)
this.lineSeriesData.push(item.value)
});
this.lineData = data
} else {
this.lineNoData = true
}
if (this.$refs.lineChart) {
this.$refs.lineChart.hideLoading()
}
} else {
this.$message.error(msg);
}
},
assignLineChart () {
this.lineOption = lineOption()
this.$refs.lineChart.setOption(this.lineOption, true)
this.$refs.lineChart.setOption({
xAxis: { data: this.lineXaxis },
series: [
{ data: this.lineSeriesData },
]
}, true)
},
getPie () {
if (this.pieInitState) {
this.assignPieChart()
} else {
setTimeout(() => {
this.getPie()
}, 500)
}
},
//
async assignPieChart () {
this.pieTotal = 0
let maxIndex = 0
let maxValue = this.pieData[0].value
const _that = this
// pieChart
this.pieOption = pieOption(this.pieChartS)
this.pieData.forEach((item, index) => {
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.clickPie(maxIndex)
let fun = function (params) {
_that.clickPie(params.dataIndex)
}
this.$refs.pieChart.handleClick(fun)
},
clickPie (seriesIndex) {
this.pieData.forEach((element, index) => {
if (index === seriesIndex) {
element.label = {
show: true,
};
element.labelLine = {
show: true,
lineStyle: {
opacity: 1,
}
};
} 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) {
let orgArray = []
let key = this.agencyIdArray.length > 0 ? this.agencyIdArray[this.agencyIdArray.length - 1] : ''
if (key) {
orgArray = key.split('-')
this.orgId = orgArray[0]
this.orgType = orgArray[1] === 'grid' ? 'grid' : 'agency'
} else {
this.orgId = ''
this.orgType = ''
}
this.getApiData()
// 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)
},
//
initData () {
var time = (new Date).getTime() - 24 * 60 * 60 * 1000;
var nowdate = new Date(time); //
var y = nowdate.getFullYear();
var m = nowdate.getMonth() + 1 < 10 ? "0" + (nowdate.getMonth() + 1) : nowdate.getMonth() + 1;
var d = nowdate.getDate() < 10 ? "0" + nowdate.getDate() : nowdate.getDate();
this.dateIdShow = y + '-' + m + '-' + d;
},
toUserInfo (uid) {
this.$router.push({ path: `/main-shuju/visual-basicinfo-people/${uid}` });
},
},
props: {
uid: {
type: String,
default: "",
// default: "8ada68cb6f1e4b9a8333348a39ef3aee",
},
},
computed: {},
components: {
cptCard,
cptTb,
screenEchartsFrame,
ScreenLoading,
ScreenNodata
},
watch: {
dateIdShow () {
// let dataArray = this.dateIdShow.split('-')
// this.dateId = dataArray.join('')
},
uid (id) {
this.userId = id;
},
userId () {
this.getApiData();
window.scrollTo(0, 0);
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/visual/shijianchulifenxi.scss"
scoped
></style>
<style
lang="scss"
src="@/assets/scss/modules/visual/search_1.scss"
scoped
></style>

50
src/views/modules/visual/communityGovern/typeAnalyze.vue

@ -3,29 +3,30 @@
<div class="title">
<img src="@/assets/img/shuju/title-tip.png" />
<span>事件分类分析</span>
<div class="search">
<div class="second-select cascader">
<el-cascader class="customer_cascader"
ref="myCascader"
v-model="agencyIdArray"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"
@change="handleChangeAgency"></el-cascader>
</div>
<div class="second-select one-date">
<div class="second-select cascader">
<el-cascader class="customer_cascader"
ref="myCascader"
v-model="agencyIdArray"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"
@change="handleChangeAgency"></el-cascader>
</div>
<div class="second-select ">
<el-date-picker v-model="dateIdShow"
type="date"
:clearable="false"
@change="handleChangeDate"
prefix-icon="el-icon-caret-bottom"
placeholder="选择日期"
value-format="yyyy-MM-dd">
</el-date-picker>
<el-date-picker v-model="dateIdShow"
type="date"
:clearable="false"
@change="handleChangeDate"
prefix-icon="el-icon-caret-bottom"
placeholder="选择日期"
value-format="yyyy-MM-dd">
</el-date-picker>
</div>
</div>
</div>
@ -494,5 +495,8 @@ export default {
scoped
></style>
<style lang=scss scoped>
</style>
<style
lang="scss"
src="@/assets/scss/modules/visual/search_1.scss"
scoped
></style>

Loading…
Cancel
Save