You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
650 lines
18 KiB
650 lines
18 KiB
<template>
|
|
<div class="warning-box">
|
|
<!-- 组织路由 -->
|
|
<div class="div_top">
|
|
<div class="router_line"></div>
|
|
<div class="div_router">
|
|
<span class="router_parents"
|
|
v-for="(item,index) in runAgencyArray"
|
|
@click="handleClickAgency(index)"
|
|
:key="index">{{item.orgName}}<span class="arrow">></span></span>
|
|
|
|
<span class="router_child">{{orgName}}</span>
|
|
</div>
|
|
</div>
|
|
<cpt-card>
|
|
<div class="card-title">
|
|
<img class="title-icon"
|
|
src="@/assets/img/shuju/title-tip.png" />
|
|
<div class="title-label">
|
|
人房概览数据统计
|
|
|
|
</div>
|
|
</div>
|
|
<div class="card-left-title">本级人房概览数据统计</div>
|
|
<div class="card-echart">
|
|
|
|
<div class="card-left">
|
|
<div v-if="!dataLoading"
|
|
class="div-chart">
|
|
<screen-echarts-frame class="echart-wr"
|
|
@myChartMethod="housePieInitOk"
|
|
ref="housePieChart"></screen-echarts-frame>
|
|
|
|
<div class="div-tip">
|
|
<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>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="!dataLoading"
|
|
class="pie-table">
|
|
<div class="pie-table-total">
|
|
<div class="pie-table-total-count">{{houseData.houseTotal}}</div>
|
|
<div class="pie-table-title">房屋总数</div>
|
|
</div>
|
|
<div class="pie-table-line"></div>
|
|
<div class="pie-table-total ">
|
|
<div class="pie-table-total-count zz">{{houseData.zzHouseTotal}}</div>
|
|
<div class="pie-table-title">自住房屋数</div>
|
|
</div>
|
|
<div class="pie-table-total ">
|
|
<div class="pie-table-total-count cz">{{houseData.czHouseTotal}}</div>
|
|
<div class="pie-table-title">出租房屋数</div>
|
|
</div>
|
|
<div class="pie-table-total ">
|
|
<div class="pie-table-total-count xz">{{houseData.xzHouseTotal}}</div>
|
|
<div class="pie-table-title">闲置房屋数</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="loading-status"
|
|
v-if="dataLoading">
|
|
<screen-loading>加载中</screen-loading>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="card-left">
|
|
<div v-if="!dataLoading"
|
|
class="div-chart">
|
|
<screen-echarts-frame class="echart-wr"
|
|
@myChartMethod="userPieInitOk"
|
|
ref="userPieChart"></screen-echarts-frame>
|
|
|
|
<div class="div-tip2">
|
|
<div class="cz-tip">
|
|
<div class="cz-tip-dot"></div>
|
|
<span>常住人口数</span>
|
|
</div>
|
|
<div class="ld-tip">
|
|
<div class="ld-tip-dot"></div>
|
|
<span>流动人口数</span>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="!dataLoading"
|
|
class="pie-table">
|
|
<div class="pie-table-total">
|
|
<div class="pie-table-total-count">{{userData.userTotal}}</div>
|
|
<div class="pie-table-title">居民总数</div>
|
|
</div>
|
|
<div class="pie-table-line"></div>
|
|
<div class="pie-table-total ">
|
|
<div class="pie-table-total-count zz">{{userData.czUserTotal}}</div>
|
|
<div class="pie-table-title">常住人口数</div>
|
|
</div>
|
|
<div class="pie-table-total ">
|
|
<div class="pie-table-total-count cz">{{userData.ldUserTotal}}</div>
|
|
<div class="pie-table-title">流动人口数</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="loading-status"
|
|
v-if="dataLoading">
|
|
<screen-loading>加载中</screen-loading>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<div v-if="orgType!=='village'">
|
|
|
|
<div class="card-left-title">下级人房概览数据统计</div>
|
|
|
|
<div v-if="subList.length>0"
|
|
class="card-table">
|
|
<div v-for="(item,index) in subList"
|
|
:key="index"
|
|
:class="['table_item',index%2 === 0?'item_dark':'']">
|
|
<div class="item_name"
|
|
@click="handleToSubAgency(item)">
|
|
<img src="@/assets/img/shuju/logo1.png" />
|
|
<span>{{item.orgName}}</span>
|
|
</div>
|
|
|
|
<div class="item_data">
|
|
<div class="item_left">
|
|
<div class="pie-table-total">
|
|
<div class="pie-table-total-count">{{item.houseTotal}}</div>
|
|
<div class="pie-table-title">房屋总数</div>
|
|
</div>
|
|
<div class="pie-table-line"></div>
|
|
<div class="pie-table-total ">
|
|
<div class="pie-table-total-count colorwhite">{{item.zzHouseTotal}}</div>
|
|
<div class="pie-table-title table-table-title">{{item.zzHouseRatio+'%'}}</div>
|
|
<div class="pie-table-title table-table-title">自住房屋数</div>
|
|
</div>
|
|
<div class="pie-table-total ">
|
|
<div class="pie-table-total-count colorwhite">{{item.czHouseTotal}}</div>
|
|
<div class="pie-table-title table-table-title">{{item.czHouseRatio+'%'}}</div>
|
|
<div class="pie-table-title table-table-title">出租房屋数</div>
|
|
</div>
|
|
<div class="pie-table-total ">
|
|
<div class="pie-table-total-count colorwhite">{{item.xzHouseTotal}}</div>
|
|
<div class="pie-table-title table-table-title">{{item.xzHouseRatio+'%'}}</div>
|
|
<div class="pie-table-title table-table-title">闲置房屋数</div>
|
|
</div>
|
|
</div>
|
|
<div class="item_right">
|
|
<div class="pie-table-total">
|
|
<div class="pie-table-total-count">{{item.userTotal}}</div>
|
|
<div class="pie-table-title">居民总数</div>
|
|
</div>
|
|
<div class="pie-table-line"></div>
|
|
<div class="pie-table-total ">
|
|
<div class="pie-table-total-count colorwhite">{{item.czUserTotal}}</div>
|
|
<div class="pie-table-title table-table-title">{{item.czUserRatio+'%'}}</div>
|
|
<div class="pie-table-title table-table-title">常住人口数</div>
|
|
</div>
|
|
<div class="pie-table-total ">
|
|
<div class="pie-table-total-count colorwhite">{{item.ldUserTotal}}</div>
|
|
<div class="pie-table-title table-table-title">{{item.ldUserRatio+'%'}}</div>
|
|
<div class="pie-table-title table-table-title">流动人口数</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div v-if="subList.length===0"
|
|
class="no-data">
|
|
|
|
<img src="@/assets/img/modules/visual/noData.png"
|
|
class="no-data-img" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</cpt-card>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { requestPost } from "@/js/dai/request";
|
|
import screenTable from "../../components/screen-table/index";
|
|
import cptCard from "@/views/modules/visual/cpts/card";
|
|
import nextTick from "dai-js/tools/nextTick";
|
|
import screenEchartsFrame from "../../components/screen-echarts-frame";
|
|
import ScreenLoading from "@/views/modules/visual/components/screen-loading";
|
|
import { housePieOption } from './options'
|
|
import { userPieOption } from './userOptions'
|
|
|
|
import * as echarts from 'echarts';
|
|
export default {
|
|
name: "warning-box",
|
|
components: {
|
|
cptCard,
|
|
screenTable,
|
|
screenEchartsFrame,
|
|
ScreenLoading
|
|
},
|
|
data () {
|
|
return {
|
|
dataLoading: true,
|
|
orgId: '',
|
|
orgType: '',
|
|
orgName: this.$store.state.user.agencyName,
|
|
// orgShowName: this.$store.state.user.agencyName,//面包屑显示当前组织名称
|
|
|
|
|
|
housePieChartS: null,
|
|
housePieChart: '',
|
|
housePieOption: {},
|
|
housePieInitState: false,
|
|
houseData: {
|
|
orgId: '',//组织、网格、小区Id
|
|
orgType: '',//组织、网格、小区类型 agency grid village
|
|
houseTotal: 198000,//房屋总数
|
|
zzHouseTotal: 2000,//房屋自住总数
|
|
zzHouseRatio: '90%',//房屋自住总数占比(保留两位小数,带百分号的)
|
|
czHouseTotal: 30,//房屋出租总数
|
|
czHouseRatio: '5%',//房屋出租总数占比(保留两位小数,带百分号的)
|
|
xzHouseTotal: 200,//房屋闲置总数
|
|
xzHouseRatio: '70%',//房屋闲置总数占比(保留两位小数,带百分号的)
|
|
},
|
|
houseColorArray: ['#3dda83', '#e43c26', '#fac126'],
|
|
housePieData: [],
|
|
|
|
legendArray: [
|
|
{
|
|
name: '自住房屋数',
|
|
url: require('../../../../../assets/img/shuju/measure/lv@2x.png')
|
|
},
|
|
{
|
|
name: '出租房屋数',
|
|
url: require('../../../../../assets/img/shuju/measure/hong@2x.png')
|
|
},
|
|
{
|
|
name: '闲置房屋数',
|
|
url: require('../../../../../assets/img/shuju/measure/huang@2x.png')
|
|
}
|
|
],
|
|
|
|
userPieChartS: null,
|
|
userPieChart: '',
|
|
userPieOption: {},
|
|
userPieInitState: false,
|
|
userData: {
|
|
orgId: '',//组织、网格、小区Id
|
|
orgType: '',//组织、网格、小区类型 agency grid village
|
|
userTotal: 198000,//居民总数
|
|
czUserTotal: 2000,//常住居民总数
|
|
czUserRatio: '90%',//常住居民总数占比
|
|
ldUserTotal: 30,//流动居民总数
|
|
ldUserRatio: '5%',//流动居民总数占比
|
|
|
|
},
|
|
userColorArray: ['#3dda83', '#e43c26'],
|
|
userPieData: [],
|
|
|
|
subList: [],
|
|
|
|
//下钻层级记录
|
|
runNum: 0,
|
|
runAgencyArray: [],
|
|
selUserId: '',
|
|
center: [],
|
|
zoom: null,
|
|
parentPolygon: [],
|
|
|
|
};
|
|
},
|
|
async mounted () {
|
|
|
|
await this.getApiData()
|
|
|
|
},
|
|
methods: {
|
|
async getApiData () {
|
|
this.dataLoading = true
|
|
|
|
this.housePieInitState = false
|
|
this.userPieInitState = false
|
|
await this.getHousechart()
|
|
await this.getUserchart()
|
|
await this.getSubuserhouselist()
|
|
this.dataLoading = false
|
|
|
|
await nextTick(500)
|
|
|
|
this.getHousePie()
|
|
this.getUserPie()
|
|
|
|
|
|
|
|
},
|
|
housePieInitOk (dom) {
|
|
console.log('pie准备好了', dom)
|
|
this.housePieChartS = dom
|
|
// this.housePieInitState = true
|
|
|
|
},
|
|
userPieInitOk (dom) {
|
|
console.log('pie准备好了', dom)
|
|
this.userPieChartS = dom
|
|
// this.userPieInitState = true
|
|
|
|
},
|
|
|
|
async getHousechart (node, resolve) {
|
|
if (this.$refs.housePieChart) {
|
|
this.$refs.housePieChart.showLoading()
|
|
}
|
|
|
|
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/house/housechart";
|
|
const url = '/gov/org/house/housechart'
|
|
let params = {
|
|
orgId: this.orgId,
|
|
orgType: this.orgType
|
|
};
|
|
const { data, code, msg } = await requestPost(url, params);
|
|
if (code === 0) {
|
|
this.houseData = data
|
|
if (this.$refs.housePieChart) {
|
|
this.$refs.housePieChart.hideLoading()
|
|
}
|
|
|
|
|
|
} else {
|
|
this.houseData = {}
|
|
this.$message.error(msg);
|
|
}
|
|
this.housePieInitState = true
|
|
},
|
|
|
|
getHousePie () {
|
|
if (this.housePieInitState) {
|
|
this.assignHousePieChart()
|
|
} else {
|
|
setTimeout(() => {
|
|
this.getHousePie()
|
|
}, 500)
|
|
}
|
|
},
|
|
|
|
assignHousePieChart () {
|
|
|
|
if (this.houseData) {
|
|
this.$refs.housePieChart.setNoData(false)
|
|
this.$refs.housePieChart.clear()
|
|
this.housePieData = []
|
|
|
|
const _that = this
|
|
// 获取pieChart配置
|
|
this.housePieOption = housePieOption(this.housePieChartS)
|
|
// let maxValue = this.housePieData[0].total
|
|
// let maxIndex = 0
|
|
|
|
let obj1 = {
|
|
name: '自住房屋数',
|
|
value: this.houseData.zzHouseRatio,
|
|
selected: true
|
|
}
|
|
let obj2 = {
|
|
name: '出租房屋数',
|
|
value: this.houseData.czHouseRatio
|
|
}
|
|
let obj3 = {
|
|
name: '闲置房屋数',
|
|
value: this.houseData.xzHouseRatio
|
|
}
|
|
|
|
this.housePieData.push(obj1)
|
|
this.housePieData.push(obj2)
|
|
this.housePieData.push(obj3)
|
|
|
|
this.housePieOption.title.text = this.houseData.houseTotal
|
|
this.housePieOption.series[1].itemStyle = {
|
|
color: function (params) {
|
|
return _that.houseColorArray[params.dataIndex]
|
|
}
|
|
}
|
|
|
|
let fun = function (params) {
|
|
_that.clickHousePie(params.dataIndex)
|
|
|
|
}
|
|
this.$refs.housePieChart.handleClick(fun)
|
|
this.clickHousePie(0)
|
|
} else {
|
|
this.$refs.housePieChart.setNoData(true)
|
|
}
|
|
},
|
|
|
|
async getUserchart (node, resolve) {
|
|
if (this.$refs.userPieChart) {
|
|
this.$refs.userPieChart.showLoading()
|
|
}
|
|
// const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/icresiuser/userchart";
|
|
const url = '/epmetuser/icresiuser/userchart'
|
|
let params = {
|
|
orgId: this.orgId,
|
|
orgType: this.orgType
|
|
};
|
|
const { data, code, msg } = await requestPost(url, params);
|
|
if (code === 0) {
|
|
this.userData = data
|
|
if (this.$refs.userPieChart) {
|
|
this.$refs.userPieChart.hideLoading()
|
|
}
|
|
} else {
|
|
this.userData = {}
|
|
this.$message.error(msg);
|
|
}
|
|
this.userPieInitState = true
|
|
},
|
|
|
|
getUserPie () {
|
|
if (this.userPieInitState) {
|
|
this.assignUserPieChart()
|
|
} else {
|
|
setTimeout(() => {
|
|
this.getUserPie()
|
|
}, 500)
|
|
}
|
|
},
|
|
|
|
assignUserPieChart () {
|
|
|
|
if (this.userData) {
|
|
this.$refs.userPieChart.setNoData(false)
|
|
this.$refs.userPieChart.clear()
|
|
this.userPieData = []
|
|
|
|
const _that = this
|
|
// 获取pieChart配置
|
|
this.userPieOption = userPieOption(this.userPieChartS)
|
|
// let maxValue = this.userPieData[0].total
|
|
// let maxIndex = 0
|
|
|
|
let obj1 = {
|
|
name: '常住人口数',
|
|
value: this.userData.czUserRatio,
|
|
selected: true
|
|
}
|
|
let obj2 = {
|
|
name: '流动人口数',
|
|
value: this.userData.ldUserRatio
|
|
}
|
|
|
|
this.userPieData.push(obj1)
|
|
this.userPieData.push(obj2)
|
|
|
|
this.userPieOption.title.text = this.userData.userTotal
|
|
this.userPieOption.series[1].itemStyle = {
|
|
color: function (params) {
|
|
return _that.userColorArray[params.dataIndex]
|
|
}
|
|
}
|
|
|
|
let fun = function (params) {
|
|
_that.clickUserPie(params.dataIndex)
|
|
|
|
}
|
|
this.$refs.userPieChart.handleClick(fun)
|
|
this.clickUserPie(0)
|
|
} else {
|
|
this.$refs.userPieChart.setNoData(true)
|
|
}
|
|
},
|
|
|
|
async getSubuserhouselist (node, resolve) {
|
|
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/house/subuserhouselist";
|
|
const url = '/gov/org/house/subuserhouselist'
|
|
let params = {
|
|
orgId: this.orgId,
|
|
orgType: this.orgType
|
|
};
|
|
const { data, code, msg } = await requestPost(url, params);
|
|
if (code === 0) {
|
|
this.subList = data
|
|
|
|
|
|
} else {
|
|
}
|
|
},
|
|
|
|
async clickHousePie (seriesIndex) {
|
|
this.housePieData.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.housePieOption.series[1].data = this.housePieData
|
|
// this.$refs.housePieChart.hideLoading()
|
|
this.$refs.housePieChart.setOption(this.housePieOption)
|
|
|
|
|
|
},
|
|
|
|
async clickUserPie (seriesIndex) {
|
|
this.userPieData.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.userPieOption.series[1].data = this.userPieData
|
|
// this.$refs.userPieChart.hideLoading()
|
|
this.$refs.userPieChart.setOption(this.userPieOption)
|
|
|
|
// this.getTable()
|
|
},
|
|
|
|
async handleToSubAgency (item) {
|
|
if (!this.dataLoading) {
|
|
this.toSubAgency(item)
|
|
|
|
await this.getApiData()
|
|
}
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
//下钻到下一级
|
|
async toSubAgency (item) {
|
|
|
|
this.runNum++
|
|
let obj = {
|
|
orgId: this.orgId,
|
|
orgType: this.orgType,
|
|
orgName: this.orgName,
|
|
}
|
|
|
|
|
|
this.runAgencyArray.push(obj)
|
|
|
|
this.orgId = item.orgId
|
|
this.orgType = item.orgType
|
|
this.orgName = item.orgName
|
|
|
|
|
|
},
|
|
|
|
|
|
//返回所选组织
|
|
handleClickAgency (index) {
|
|
|
|
const cutNum = this.runAgencyArray.length - index//要减去的长度
|
|
this.runNum = this.runNum - cutNum
|
|
|
|
let orgData = this.runAgencyArray[index]
|
|
console.log('----------------', orgData)
|
|
|
|
for (let i = 0; i < cutNum; i++) {
|
|
this.runAgencyArray.pop()
|
|
}
|
|
|
|
this.orgId = orgData.orgId
|
|
this.orgType = orgData.orgType
|
|
this.orgName = orgData.orgName
|
|
|
|
this.getApiData()
|
|
|
|
|
|
},
|
|
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style
|
|
lang="scss"
|
|
src="@/assets/scss/modules/visual/warning.scss"
|
|
scoped
|
|
></style>
|
|
<style
|
|
lang="scss"
|
|
src="@/assets/scss/modules/visual/basicInfoMain.scss"
|
|
scoped
|
|
></style>
|
|
<style
|
|
lang="scss"
|
|
src="@/assets/scss/modules/visual/houseStatic.scss"
|
|
scoped
|
|
></style>
|
|
|
|
|