Files
dvcp_v2_webapp/packages/bigscreen/dv/AppQxnDv.vue

1378 lines
37 KiB
Vue
Raw Normal View History

2023-04-23 17:50:29 +08:00
<template>
<div class="AppQxnDv">
<div class="left">
2023-04-24 17:49:38 +08:00
<AiDvPanel style="width: 100%; height: auto;" border="border6" title="单位列表">
</AiDvPanel>
2023-04-23 17:50:29 +08:00
<div class="left-list">
2023-04-26 11:05:44 +08:00
<div
class="left-item"
v-for="(item, index) in areaList"
:class="[gridParentId === item.gridId ? 'active' : '']"
:key="index"
@click="init(item.gridId)">
2023-04-23 17:50:29 +08:00
<i>{{ index + 1 }}</i>
<div class="left-item__top">
2023-04-26 11:05:44 +08:00
<h2>{{ item.gridName }}</h2>
2023-04-27 16:58:44 +08:00
<el-select v-model="gridId" size="mini" @change="onChange" v-if="gridParentId === item.gridId && index !== 0" placeholder="请选择派出所">
2023-04-26 11:05:44 +08:00
<el-option
:label="item.gridName"
:value="item.gridId"
v-for="(item, index) in policeStationList"
:key="index">
</el-option>
2023-04-23 17:50:29 +08:00
</el-select>
</div>
<div class="left-item__bottom">
2023-04-26 11:05:44 +08:00
<span>居民数量{{ item.customerCount + item.groupMemberCount }}</span>
<span>成员{{ item.allGridMemberCount }}</span>
2023-04-23 17:50:29 +08:00
</div>
</div>
</div>
</div>
<div class="right">
<div class="right-left">
<AiDvPanel style="width: 100%" border="border6" title="微警务群概况">
<div class="right-left__total AppQxnDv-total">
2023-04-27 10:50:12 +08:00
<div class="item">
2023-04-23 17:50:29 +08:00
<h2>全部人员数</h2>
<div class="item-bottom">
2023-04-27 10:50:12 +08:00
<span>{{ wjwqgkInfo['群人数'] ? wjwqgkInfo['群人数'] + wjwqgkInfo['添加好友数'] : 0 }}</span>
<i></i>
</div>
</div>
<div class="item">
<h2>群人数</h2>
<div class="item-bottom">
<span>{{ wjwqgkInfo['群人数'] }}</span>
<i></i>
</div>
</div>
<div class="item">
<h2>添加好友数</h2>
<div class="item-bottom">
<span>{{ wjwqgkInfo['添加好友数'] }}</span>
<i></i>
</div>
</div>
<div class="item">
<h2>昨日新增</h2>
<div class="item-bottom">
<span>{{ wjwqgkInfo['昨日新增'] }}</span>
2023-04-23 17:50:29 +08:00
<i></i>
</div>
</div>
</div>
<div class="wrapper">
<div class="AppQxnDv-title">
<h2>增长情况</h2>
</div>
<ai-echart-v2
style="height: 200px; width: 500px;"
:ref="'chart'"
2023-04-27 10:50:12 +08:00
:data="zzData"
2023-04-23 17:50:29 +08:00
:ops="lineChart1">
</ai-echart-v2>
</div>
<div class="right-left__middle">
<div class="left">
<div class="wrapper">
<div class="AppQxnDv-title">
<h2>覆盖率</h2>
</div>
2023-04-27 10:50:12 +08:00
<DoughnutChart :ratio="fglRate" :value="fglData"></DoughnutChart>
2023-04-23 17:50:29 +08:00
</div>
<div class="wrapper">
<div class="AppQxnDv-title">
<h2>群标签化率</h2>
</div>
2023-04-27 10:50:12 +08:00
<DoughnutChart :ratio="qbqRate" :value="qbqlData"></DoughnutChart>
2023-04-23 17:50:29 +08:00
</div>
</div>
<div class="right wrapper">
<div class="AppQxnDv-title">
<h2>群标签情况</h2>
2023-04-28 13:47:35 +08:00
<!-- <el-select v-model="value" style="width: 92px" size="mini" placeholder="专属">
2023-04-23 17:50:29 +08:00
<el-option label="XXX派出所" value="1"></el-option>
<el-option label="XXX派出所" value="2"></el-option>
<el-option label="XXX派出所" value="3"></el-option>
2023-04-28 13:47:35 +08:00
</el-select> -->
2023-04-23 17:50:29 +08:00
</div>
<ai-echart-v2
2023-04-27 10:50:12 +08:00
style="height: 220px; width: 100%; margin-top: 10px;"
2023-04-23 17:50:29 +08:00
:ref="'chart2'"
:data="lineData1"
:ops="barChart8">
</ai-echart-v2>
</div>
</div>
<div class="right-left__bottom">
<div class="wrapper">
<div class="AppQxnDv-title">
<h2>单位成员关系人数</h2>
</div>
<ai-echart-v2
2023-04-27 10:50:12 +08:00
style="height: 236px; width: 100%; margin-top: 10px;"
2023-04-23 17:50:29 +08:00
:ref="'chart2'"
2023-04-27 10:50:12 +08:00
:data="dwData"
2023-04-23 17:50:29 +08:00
:ops="barChart8">
</ai-echart-v2>
</div>
<div class="wrapper">
<div class="AppQxnDv-title">
<h2>群人数规模分布</h2>
</div>
<ai-echart-v2
2023-04-28 13:47:35 +08:00
style="height: 160px; width: 100%; margin-top: 20px;"
2023-04-23 17:50:29 +08:00
:ref="'chart2'"
2023-04-27 10:50:12 +08:00
:data="qrsGmData"
2023-04-23 17:50:29 +08:00
:ops="pieChart">
</ai-echart-v2>
</div>
</div>
</AiDvPanel>
</div>
<div class="right-middle">
<AiDvPanel style="width: 100%" border="border6" title="综合概况图">
<div class="right-left__total AppQxnDv-total">
2023-04-26 17:32:51 +08:00
<div class="item">
2023-04-23 17:50:29 +08:00
<h2>分局数量</h2>
<div class="item-bottom">
2023-04-26 17:32:51 +08:00
<span>{{ middleTotalInfo['分局数量'] }}</span>
2023-04-27 16:18:27 +08:00
<i></i>
2023-04-26 17:32:51 +08:00
</div>
</div>
<div class="item">
<h2>派出所</h2>
<div class="item-bottom">
<span>{{ middleTotalInfo['派出所数量'] }}</span>
2023-04-27 16:18:27 +08:00
<i></i>
2023-04-26 17:32:51 +08:00
</div>
</div>
<div class="item">
<h2>成员总数</h2>
<div class="item-bottom">
<span>{{ middleTotalInfo['成员总数'] }}</span>
2023-04-27 16:58:44 +08:00
<i></i>
2023-04-26 17:32:51 +08:00
</div>
</div>
<div class="item">
<h2>已激活</h2>
<div class="item-bottom">
<span>{{ middleTotalInfo['已激活'] }}</span>
2023-04-27 16:58:44 +08:00
<i></i>
2023-04-26 17:32:51 +08:00
</div>
</div>
<div class="item">
<h2>末激活</h2>
<div class="item-bottom">
<span>{{ middleTotalInfo['未激活'] }}</span>
2023-04-27 16:58:44 +08:00
<i></i>
2023-04-23 17:50:29 +08:00
</div>
</div>
</div>
2023-04-25 17:25:29 +08:00
<div class="wrapper" style="position: relative;">
2023-04-26 14:14:29 +08:00
<DvMap :instance="instance" style="width: 100%; height: 376px;"></DvMap>
2023-04-25 17:25:29 +08:00
<div class="total-info">
<div class="total-info__item">
<img src="https://cdn.cunwuyun.cn/dvcp/dv/qxn/icon3.png">
<span>民警人数</span>
2023-04-26 17:32:51 +08:00
<i>{{ middleTotalInfo['民警'] }}</i>
2023-04-25 17:25:29 +08:00
</div>
<div class="total-info__item">
<img src="https://cdn.cunwuyun.cn/dvcp/dv/qxn/icon2.png">
<span>辅警人数</span>
2023-04-26 17:32:51 +08:00
<i>{{ middleTotalInfo['辅警'] }}</i>
2023-04-25 17:25:29 +08:00
</div>
<div class="total-info__item">
<img src="https://cdn.cunwuyun.cn/dvcp/dv/qxn/icon1.png">
<span>其他</span>
2023-04-26 17:32:51 +08:00
<i>{{ middleTotalInfo['成员总数'] ? middleTotalInfo['成员总数'] - middleTotalInfo['民警'] - middleTotalInfo['辅警'] : 0 }}</i>
2023-04-25 17:25:29 +08:00
</div>
</div>
2023-04-23 17:50:29 +08:00
</div>
<div class="right-middle__middle">
<div class="wrapper">
<div class="AppQxnDv-title">
<h2>成员激活</h2>
</div>
2023-04-26 17:32:51 +08:00
<DoughnutChart
:ratio="cyjhRate"
:value="cyjhData">
</DoughnutChart>
2023-04-23 17:50:29 +08:00
</div>
<div class="wrapper">
<div class="AppQxnDv-title">
<h2>日均活跃率</h2>
</div>
2023-04-26 17:32:51 +08:00
<DoughnutChart
2023-04-28 13:47:35 +08:00
:ratio="rjhyRate"
:value="rjhyData">
2023-04-26 17:32:51 +08:00
</DoughnutChart>
2023-04-23 17:50:29 +08:00
</div>
</div>
<div class="right-middle__bottom">
<div class="AppQxnDv-title">
<h2>近期成员使用分布</h2>
</div>
<ai-echart-v2
2023-04-25 10:38:06 +08:00
style="height: 236px; width: 100%;"
2023-04-23 17:50:29 +08:00
:ref="'chart'"
2023-04-28 13:47:35 +08:00
:data="cyfbData"
:ops="lineChart2">
2023-04-23 17:50:29 +08:00
</ai-echart-v2>
</div>
</AiDvPanel>
</div>
<div class="right-right">
2023-04-26 17:32:51 +08:00
<AiDvPanel style="height: auto;" border="border6" title="群动态概况">
2023-04-23 17:50:29 +08:00
<div class="right-left__total AppQxnDv-total">
2023-04-26 18:02:44 +08:00
<div class="item">
<h2>群总数</h2>
2023-04-23 17:50:29 +08:00
<div class="item-bottom">
2023-04-26 18:02:44 +08:00
<span>{{ wxGroupOverview['群数量'] }}</span>
2023-04-27 16:18:27 +08:00
<i></i>
2023-04-26 18:02:44 +08:00
</div>
</div>
<div class="item">
<h2>群主人数</h2>
<div class="item-bottom">
<span>{{ wxGroupOverview['群主人数'] }}</span>
<i></i>
</div>
</div>
<div class="item">
<h2>群人员活跃数(30)</h2>
<div class="item-bottom">
<span>{{ wxGroupOverview['群人员活跃度(30天)'] }}</span>
<i></i>
</div>
</div>
<div class="item">
<h2>群消息数(30)</h2>
<div class="item-bottom">
<span>{{ wxGroupOverview['群消息数(30天)'] }}</span>
2023-04-27 16:18:27 +08:00
<i></i>
2023-04-23 17:50:29 +08:00
</div>
</div>
</div>
<div class="right-right__top">
<div class="wrapper">
<div class="AppQxnDv-title">
<h2>群活跃率(7</h2>
</div>
2023-04-26 18:02:44 +08:00
<DoughnutChart
:ratio="qhyRate"
:value="qhyData">
</DoughnutChart>
2023-04-23 17:50:29 +08:00
</div>
<div class="wrapper">
<div class="AppQxnDv-title">
2023-04-26 18:02:44 +08:00
<h2>成员活跃(7</h2>
2023-04-23 17:50:29 +08:00
</div>
2023-04-26 18:02:44 +08:00
<DoughnutChart
:ratio="rhyRate"
:value="rhyData">
</DoughnutChart>
2023-04-23 17:50:29 +08:00
</div>
</div>
<div class="right-left__middle">
<div class="AppQxnDv-title">
<h2>各单位群主及群分布</h2>
</div>
<ai-echart-v2
2023-04-27 09:18:37 +08:00
style="height: 230px; width: 100%; margin-top: 10px;"
2023-04-23 17:50:29 +08:00
:ref="'chart5'"
2023-04-27 09:18:37 +08:00
:data="barChartData"
2023-04-23 17:50:29 +08:00
:ops="barChart">
</ai-echart-v2>
</div>
</AiDvPanel>
2023-04-27 16:16:21 +08:00
<AiDvPanel class="bottom" style="width: 100%" border="border6" title="群动态多维度排行">
2023-04-26 17:32:51 +08:00
<ai-table
2023-04-27 14:38:57 +08:00
width="100%"
2023-04-27 16:16:21 +08:00
max-height="320px"
2023-04-27 09:18:37 +08:00
height="310px"
2023-04-26 17:32:51 +08:00
:tableData="tableList"
:col-configs="colConfigs"
:isShowPagination="false"
@getList="() => {}">
2023-04-27 16:16:21 +08:00
<el-table-column slot="index" label="排名" align="center" width="38">
2023-04-26 17:32:51 +08:00
<template slot-scope="{ $index }">
<div class="table-index" :class="[$index < 3 ? 'table-index__active' : '']">
<span>{{ $index + 1 }}</span>
</div>
</template>
</el-table-column>
</ai-table>
2023-04-23 17:50:29 +08:00
</AiDvPanel>
</div>
</div>
</div>
</template>
<script>
import DvMap from './components/DvMap'
import DoughnutChart from './components/DoughnutChart'
export default {
name: 'AppQxnDv',
label: '警民互联',
2023-04-26 09:52:41 +08:00
props: {
instance: Function,
dict: Object,
},
2023-04-23 17:50:29 +08:00
components: {
DvMap,
DoughnutChart
},
data () {
return {
2023-04-25 17:25:29 +08:00
isShowInfo: false,
2023-04-23 17:50:29 +08:00
lineData: [
{
"name": "阿斯达",
"v1": 23,
"v2": 33
},
{
"name": "水电费",
"v1": 12,
"v2": 34
},
{
"name": "凡哥",
"v1": 67,
"v2": 25
},
{
"name": "党费",
"v1": 98,
"v2": 85
}
],
lineData1: [
{
"name": "1月",
"v1": 23
},
{
"name": "2月",
"v1": 12
},
{
"name": "3月",
"v1": 67
},
{
"name": "4月",
"v1": 98
}
],
lineChart1: {
2023-04-27 10:50:12 +08:00
legend: {
icon: 'roundRect',
textStyle: {
color: "#fff"
}
},
grid: {
left: '0%',
right: '0%',
bottom: '0%',
top: '35px',
containLabel: true
},
2023-04-23 17:50:29 +08:00
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(0, 102, 154, 0.65)',
borderColor: 'rgba(0, 102, 154, 0.65)',
textStyle: { color: '#fff' },
axisPointer: { type: 'cross' }
},
color: ['#7AA3CC', '#33CCCC'],
xAxis: {
type: "category",
axisTick: {show: false},
2023-04-25 17:25:29 +08:00
axisLine: { lineStyle: { color: 'rgba(179, 223, 255, 0.4)' } },
2023-04-23 17:50:29 +08:00
axisLabel: {color: '#8FABBF', fontSize: 12},
},
yAxis: {
nameGap: 23,
minInterval: 1,
splitLine: { lineStyle: { color: 'rgba(108, 128, 151, 0.3)', type: 'dashed' } },
axisLabel: {color: '#8FABBF', fontSize: 12},
axisPointer: { snap: true }
},
daemon: (color) => ({
showSymbol: false,
smooth: true,
lineStyle: {
shadowBlur: 4,
shadowOffsetY: 2,
width: 2
},
areaStyle: {
color: {
type: 'linear',
x: 0,
x2: 0,
y: 0,
y2: 1,
colorStops: [
{ offset: 0, color: this.Hex2RGBA(color, 0.3) },
{ offset: 1, color: this.Hex2RGBA(color, 0.1) }
]
}
}
})
},
2023-04-28 13:47:35 +08:00
lineChart2: {
legend: {
show: false
},
grid: {
left: '0%',
right: '0%',
bottom: '0%',
top: '35px',
containLabel: true
},
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(0, 102, 154, 0.65)',
borderColor: 'rgba(0, 102, 154, 0.65)',
textStyle: { color: '#fff' },
axisPointer: { type: 'cross' }
},
color: ['#33CCCC', '#33CCCC'],
xAxis: {
type: "category",
axisTick: {show: false},
axisLine: { lineStyle: { color: 'rgba(179, 223, 255, 0.4)' } },
axisLabel: {color: '#8FABBF', fontSize: 12},
},
yAxis: {
nameGap: 23,
minInterval: 1,
splitLine: { lineStyle: { color: 'rgba(108, 128, 151, 0.3)', type: 'dashed' } },
axisLabel: {color: '#8FABBF', fontSize: 12},
axisPointer: { snap: true }
},
daemon: (color) => ({
showSymbol: false,
smooth: true,
lineStyle: {
shadowBlur: 4,
shadowOffsetY: 2,
width: 2
},
areaStyle: {
color: {
type: 'linear',
x: 0,
x2: 0,
y: 0,
y2: 1,
colorStops: [
{ offset: 0, color: this.Hex2RGBA(color, 0.3) },
{ offset: 1, color: this.Hex2RGBA(color, 0.1) }
]
}
}
})
},
2023-04-23 17:50:29 +08:00
barChart8: {
2023-04-27 10:50:12 +08:00
legend: {
textStyle: {
color: "#fff"
}
},
grid: {
left: '0%',
right: '0%',
bottom: '0%',
top: '40px',
containLabel: true
},
2023-04-23 17:50:29 +08:00
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(0, 102, 154, 0.65)',
borderColor: 'rgba(0, 102, 154, 0.65)',
textStyle: { color: '#fff' },
axisPointer: { type: 'cross' }
},
yAxis: {
type: 'category',
2023-04-27 10:50:12 +08:00
axisLine: { lineStyle: { color: 'rgba(179, 223, 255, 0.4)' } },
2023-04-23 17:50:29 +08:00
axisLabel: {color: '#8FABBF', fontSize: 12},
axisTick: {show: false},
},
xAxis: {
nameGap: 23, minInterval: 1,
splitLine: {lineStyle: {color: 'rgba(108, 128, 151, 0.3)', type: 'dashed'}},
2023-04-27 10:50:12 +08:00
axisLabel: {color: '#8FABBF', fontSize: 12}
2023-04-23 17:50:29 +08:00
},
2023-04-27 10:50:12 +08:00
color: ['#65E0DE', '#E7C074', '#7AA3CC'],
series: [
{
name: '民警',
type: 'bar',
barWidth: '15',
stack: 'one'
2023-04-23 17:50:29 +08:00
},
2023-04-27 10:50:12 +08:00
{
name: '辅警',
barWidth: '15',
type: 'bar',
stack: 'one'
},
{
name: '其他',
barWidth: '15',
type: 'bar',
stack: 'one'
2023-04-23 17:50:29 +08:00
}
2023-04-27 10:50:12 +08:00
]
2023-04-23 17:50:29 +08:00
},
barChart: {
2023-04-27 09:18:37 +08:00
legend: {
2023-04-27 10:50:12 +08:00
icon: 'roundRect',
2023-04-27 09:18:37 +08:00
textStyle: {
color: "#fff"
}
},
grid: {
left: '0%',
right: '0%',
bottom: '0%',
top: '35px',
containLabel: true
},
2023-04-24 10:34:41 +08:00
xAxis: {
type: "category",
2023-04-25 17:25:29 +08:00
axisTick: {show: false},
axisLine: { lineStyle: { color: 'rgba(179, 223, 255, 0.4)' } },
2023-04-27 09:18:37 +08:00
axisLabel: {color: '#8FABBF', fontSize: 10, rotate: 30},
},
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(0, 102, 154, 0.65)',
borderColor: 'rgba(0, 102, 154, 0.65)',
textStyle: { color: '#fff' },
axisPointer: { type: 'cross' }
2023-04-24 10:34:41 +08:00
},
2023-04-23 17:50:29 +08:00
yAxis: {
nameGap: 23,
minInterval: 1,
splitLine: { lineStyle: { color: 'rgba(255,255,255,.2)', type: 'dashed' } },
2023-04-24 10:34:41 +08:00
axisPointer: { show: false },
axisLabel: {color: '#8FABBF', fontSize: 12}
2023-04-23 17:50:29 +08:00
},
axisPointer: {
type: 'shadow',
triggerTooltip: false,
shadowStyle: { color: 'rgba(46, 153, 255, .2)' }
},
color: [
{
type: 'linear',
x: 0,
x2: 0,
y: 0,
y2: 1,
colorStops: [
2023-04-27 09:18:37 +08:00
{ offset: 1, color: 'rgba(51, 204, 204, 1)' },
{ offset: 0, color: 'rgba(31, 89, 89, 0.25)' }
2023-04-23 17:50:29 +08:00
]
},
{
type: 'linear',
x: 0,
x2: 0,
y: 0,
y2: 1,
colorStops: [
2023-04-27 10:50:12 +08:00
{ offset: 0, color: 'rgba(219, 179, 110, 0.1)' },
{ offset: 1, color: 'rgba(219, 179, 110, 1)' }
2023-04-23 17:50:29 +08:00
]
}
],
2023-04-27 09:18:37 +08:00
series: [
{
2023-04-27 16:43:07 +08:00
name: '群主数量',
2023-04-27 09:18:37 +08:00
type: 'bar',
barWidth: '15'
},
{
2023-04-27 16:43:07 +08:00
name: '群数量',
2023-04-27 09:18:37 +08:00
barWidth: '15',
type: 'bar'
}
]
2023-04-23 17:50:29 +08:00
},
pieChart: {
tooltip: {
2023-04-27 10:50:12 +08:00
trigger: 'item',
backgroundColor: 'rgba(0, 102, 154, 0.65)',
borderColor: 'rgba(0, 102, 154, 0.65)',
textStyle: { color: '#fff' },
axisPointer: { type: 'cross' }
2023-04-23 17:50:29 +08:00
},
legend: {
show: false
},
grid: {
2023-04-28 13:47:35 +08:00
left: '0%',
2023-04-23 17:50:29 +08:00
top: '6%',
2023-04-28 13:47:35 +08:00
right: '0%',
2023-04-23 17:50:29 +08:00
bottom: '6%'
},
2023-04-25 17:25:29 +08:00
yAxis: {
axisLine: {show: false},
},
xAxis: {
axisLine: {show: false},
},
2023-04-24 10:34:41 +08:00
color: ['#59F7CA', '#62F2F8', '#F2B949', '#81C4E4', '#D8F2FD'],
2023-04-23 17:50:29 +08:00
series: [
{
type: 'pie',
radius: ['50%', '66%'],
labelLine:{
normal:{
2023-04-24 10:34:41 +08:00
length: 2,
2023-04-23 17:50:29 +08:00
lineStyle: {
color: '#526D7A'
}
}
},
label: {
show: true,
normal: {
textStyle: {
color: '#9BB7D4',
2023-04-28 13:47:35 +08:00
fontSize: 10
2023-04-23 17:50:29 +08:00
}
}
}
}
]
2023-04-26 11:05:44 +08:00
},
policeStationList: [],
areaList: [],
gridId: '',
2023-04-26 17:32:51 +08:00
gridParentId: 'gr3AePMwAAFWlqlNvfJboAWkRNbnA14A',
middleTotalInfo: {},
cyActivityInfo: {},
wxGroupOverview: {},
2023-04-27 10:50:12 +08:00
wjwqgkGMFBInfo: {},
wjwqgkInfo: {},
2023-04-26 17:32:51 +08:00
colConfigs: [
{ slot: 'index' },
2023-04-27 16:58:44 +08:00
{ prop: 'ownerName', label: '姓名', align: 'left', width: 58 },
{ prop: 'deptName', label: '单位', align: 'left' },
2023-04-26 17:32:51 +08:00
{ prop: 'groupCount', label: '群数量', align: 'center', width: 56 },
{ prop: 'groupMemberCount', label: '群人员', align: 'center', width: 56 },
2023-04-27 16:16:21 +08:00
{ prop: 'newMemberCount', label: '新增群人员', align: 'center', width: 80 },
2023-04-27 16:58:44 +08:00
// { prop: 'hasMsgGroupCount', label: '有消息的群', align: 'center', width: 80 },
{ prop: 'msgCount', label: '群聊人数', align: 'center', width: 80 },
{ prop: 'hasMsgMemberCount', label: '群消息总数', align: 'center', width: 80 }
2023-04-26 17:32:51 +08:00
]
2023-04-23 17:50:29 +08:00
}
},
2023-04-24 10:34:41 +08:00
computed: {
2023-04-28 13:47:35 +08:00
rjhyData () {
return [{key: '活跃成员', value: (this.cyActivityInfo['活跃成员总数(7日)'] / 7).toFixed(0)}, {key: '激活成员', value: this.cyActivityInfo['已激活']}]
},
rjhyRate () {
if (!this.cyActivityInfo['已激活']) {
return 0
}
return Number((((this.cyActivityInfo['活跃成员总数(7日)'] / 7).toFixed(0) / (this.cyActivityInfo['已激活'] + this.cyActivityInfo['未激活'])) * 100).toFixed(2))
},
2023-04-27 10:50:12 +08:00
qbqlData () {
2023-04-28 13:47:35 +08:00
return [{key: '已打标签', value: 2938}, {key: '未打标签', value: 2283}]
2023-04-27 10:50:12 +08:00
},
qbqRate () {
2023-04-28 13:47:35 +08:00
return 26.27
2023-04-27 10:50:12 +08:00
if (!this.cyActivityInfo['已激活']) {
return 0
}
return Number(((this.cyActivityInfo['已激活'] / (this.cyActivityInfo['已激活'] + this.cyActivityInfo['未激活'])) * 100).toFixed(2))
},
fglData () {
2023-04-28 13:47:35 +08:00
return [{key: '已关联人数', value: 726079}, {key: '地区户籍数', value: 3015112}]
2023-04-27 10:50:12 +08:00
},
fglRate () {
2023-04-28 13:47:35 +08:00
return 24.08
2023-04-27 10:50:12 +08:00
if (!this.cyActivityInfo['已激活']) {
return 0
}
return Number(((this.cyActivityInfo['已激活'] / (this.cyActivityInfo['已激活'] + this.cyActivityInfo['未激活'])) * 100).toFixed(2))
},
2023-04-26 17:32:51 +08:00
cyjhData () {
return [{key: '已激活', value: this.cyActivityInfo['已激活']}, {key: '未激活', value: this.cyActivityInfo['未激活']}]
},
cyjhRate () {
if (!this.cyActivityInfo['已激活']) {
return 0
}
return Number(((this.cyActivityInfo['已激活'] / (this.cyActivityInfo['已激活'] + this.cyActivityInfo['未激活'])) * 100).toFixed(2))
},
2023-04-26 18:02:44 +08:00
qhyData () {
return [{key: '活跃居民群', value: this.wxGroupOverview['活跃居民群数量(7天)']}, {key: '全部居民群', value: this.wxGroupOverview['群数量']}]
},
qhyRate () {
if (!this.wxGroupOverview['活跃居民群数量(7天)']) {
return 0
}
return Number(((this.wxGroupOverview['活跃居民群数量(7天)'] / (this.wxGroupOverview['群数量'] * 7)) * 100).toFixed(2))
},
rhyData () {
2023-04-27 17:21:05 +08:00
return [{key: '活跃成员', value: (this.wxGroupOverview['活跃群成员数量(7天)'] / 7).toFixed(0)}, {key: '群成员 ', value: (this.wxGroupOverview['群成员数量'] / 7).toFixed(0)}]
2023-04-26 18:02:44 +08:00
},
rhyRate () {
if (!this.wxGroupOverview['群成员数量']) {
return 0
}
2023-04-27 17:21:05 +08:00
return Number(((this.wxGroupOverview['活跃群成员数量(7天)'] / (this.wxGroupOverview['群成员数量'])) * 100).toFixed(2))
2023-04-26 17:32:51 +08:00
},
2023-04-28 13:47:35 +08:00
cyfbData () {
if (!this.cyActivityInfo['成员使用分布']) {
return []
}
return this.cyActivityInfo['成员使用分布'].map(v => {
return {
'日期': v['日期'],
'活跃用户数': v['活跃用户数']
}
})
},
2023-04-27 09:18:37 +08:00
barChartData () {
if (!this.wxGroupOverview['各单位群主及群分布']) {
return []
}
return this.wxGroupOverview['各单位群主及群分布'].map(v => {
return {
2023-04-28 13:47:35 +08:00
'name': v['网格名称'],
2023-04-27 09:18:37 +08:00
'群主数量': v['群主数量'],
'群数量': v['群数量']
}
})
},
2023-04-27 10:50:12 +08:00
dwData () {
if (!this.wjwqgkGMFBInfo.length) {
return []
}
return this.wjwqgkGMFBInfo.map(v => {
return {
'规模': v['规模'],
'民警': v['民警'],
'辅警': v['辅警'],
'其他': v['其他']
}
})
},
qrsGmData () {
if (!this.wjwqgkGMFBInfo.length) {
return []
}
return this.wjwqgkGMFBInfo.map(v => {
return {
'群人数规模分布': v['规模'],
v: v['群数量']
}
})
},
2023-04-26 17:32:51 +08:00
tableList () {
const list = this.wxGroupOverview['群动态多维度排行']
if (!list) {
return []
}
return list
2023-04-27 10:50:12 +08:00
},
zzData () {
if (!this.wjwqgkInfo['增长情况']) {
return []
}
return this.wjwqgkInfo['增长情况'].map(v => {
return {
2023-04-27 17:25:37 +08:00
'月份': v['月份'] + '月',
2023-04-27 10:50:12 +08:00
'居民人数': v['居民人数'],
'新增居民': v['新增居民']
}
})
2023-04-24 10:34:41 +08:00
}
},
2023-04-26 09:52:41 +08:00
mounted () {
this.init()
},
2023-04-23 17:50:29 +08:00
methods: {
2023-04-27 16:58:44 +08:00
onChange () {
this.$nextTick(() => {
this.instance.post(`/api/wxgridinfo/tree`, null, {
params: {
gridParentId: this.gridId,
corpId: 'wpytYEDgAA5zwi8Ak2mwFh3PwBKwwlWA'
}
}).then(res => {
if (res.code === 0) {
2023-04-27 17:49:30 +08:00
this.getInfo()
2023-04-27 16:58:44 +08:00
}
})
})
},
2023-04-26 11:05:44 +08:00
init (gridId) {
this.gridId = ''
2023-04-26 14:14:29 +08:00
this.gridParentId = gridId || 'gr3AePMwAAFWlqlNvfJboAWkRNbnA14A'
2023-04-27 14:38:57 +08:00
this.instance.post(`/api/wxgridinfo/tree`, null, {
2023-04-26 09:52:41 +08:00
params: {
2023-04-26 11:05:44 +08:00
gridParentId: gridId || '',
2023-04-26 09:52:41 +08:00
corpId: 'wpytYEDgAA5zwi8Ak2mwFh3PwBKwwlWA'
}
}).then(res => {
if (res.code === 0) {
2023-04-26 11:05:44 +08:00
if (gridId) {
this.policeStationList = res.data
} else {
this.areaList = res.data
}
2023-04-27 17:21:05 +08:00
this.getInfo()
2023-04-26 09:52:41 +08:00
}
})
2023-04-26 14:14:29 +08:00
},
getInfo () {
2023-04-27 14:38:57 +08:00
this.instance.post(`/api/wxgridinfo/comprehensiveOverview`, null, {
2023-04-26 17:32:51 +08:00
params: {
corpId: 'wpytYEDgAA5zwi8Ak2mwFh3PwBKwwlWA'
}
}).then(res => {
if (res.code === 0) {
this.middleTotalInfo = res.data
}
})
2023-04-26 14:14:29 +08:00
2023-04-27 14:38:57 +08:00
this.instance.post(`/api/wxgridinfo/wxGroupOverview`, null, {
2023-04-26 17:32:51 +08:00
params: {
corpId: 'wpytYEDgAA5zwi8Ak2mwFh3PwBKwwlWA',
gridId: this.gridId || this.gridParentId
}
}).then(res => {
if (res.code === 0) {
this.wxGroupOverview = res.data
}
})
2023-04-27 14:38:57 +08:00
this.instance.post(`/api/wxgridinfo/wjwqgk`, null, {
2023-04-27 10:50:12 +08:00
params: {
corpId: 'wpytYEDgAA5zwi8Ak2mwFh3PwBKwwlWA',
gridId: this.gridId || this.gridParentId
}
}).then(res => {
if (res.code === 0) {
this.wjwqgkInfo = res.data
}
})
2023-04-27 14:38:57 +08:00
this.instance.post(`/api/wxgridinfo/wjwqgkGMFB`, null, {
2023-04-27 10:50:12 +08:00
params: {
corpId: 'wpytYEDgAA5zwi8Ak2mwFh3PwBKwwlWA',
gridId: this.gridId || this.gridParentId
}
}).then(res => {
if (res.code === 0) {
this.wjwqgkGMFBInfo = res.data
}
})
2023-04-27 14:38:57 +08:00
this.instance.post(`/api/wxgridinfo/cyActivity`, null, {
2023-04-26 17:32:51 +08:00
params: {
corpId: 'wpytYEDgAA5zwi8Ak2mwFh3PwBKwwlWA',
gridId: this.gridId || this.gridParentId
}
}).then(res => {
if (res.code === 0) {
this.cyActivityInfo = res.data
}
})
2023-04-26 09:52:41 +08:00
},
2023-04-23 17:50:29 +08:00
Hex2RGBA(color, alpha = 1) {
let hex = 0;
if (color.charAt(0) == "#") {
if (color.length == 4) {
//检测诸如#FFF简写格式
color = "#" + color.charAt(1).repeat(2) +
color.charAt(2).repeat(2) +
color.charAt(3).repeat(2);
}
hex = parseInt(color.slice(1), 16);
}
let r = hex >> 16 & 0xFF;
let g = hex >> 8 & 0xFF;
let b = hex & 0xFF;
return `rgba(${r},${g},${b},${alpha})`;
},
2023-04-27 10:50:12 +08:00
2023-04-23 17:50:29 +08:00
RGBtoHex(r, g, b) {
let hex = r << 16 | g << 8 | b;
return "#" + hex.toString(16);
}
}
}
</script>
<style lang="scss" scoped>
.AppQxnDv {
display: flex;
2023-04-27 17:49:30 +08:00
justify-content: center;
2023-04-23 17:50:29 +08:00
height: 100%;
padding-top: 16px;
box-sizing: border-box;
background: #0c0c0c;
overflow: hidden;
2023-04-26 17:32:51 +08:00
.table-index {
display: flex;
align-items: center;
justify-content: center;
span {
width: 22px;
height: 20px;
line-height: 20px;
text-align: center;
border-radius: 4px;
border: 1px solid #42BED5;
}
&.table-index__active span {
border-color: #EDAA38;
}
}
2023-04-23 17:50:29 +08:00
.wrapper {
2023-04-27 16:43:07 +08:00
flex: 1;
2023-04-23 17:50:29 +08:00
margin-bottom: 12px;
}
2023-04-25 17:25:29 +08:00
.total-info {
display: flex;
position: absolute;
flex-direction: column;
right: 11px;
top: 26px;
z-index: 11;
.total-info__item {
display: flex;
align-items: center;
margin-bottom: 11px;
&:last-child {
margin-bottom: 0;
}
img {
width: 22px;
height: 22px;
}
span {
width: 60px;
margin: 0 16px 0 6px;
color: #C6D6E6;
font-size: 14px;
}
i {
font-style: normal;
font-size: 16px;
color: #fff;
}
}
}
2023-04-23 17:50:29 +08:00
.AppQxnDv-title {
display: flex;
position: relative;
align-items: center;
justify-content: space-between;
height: 30px;
line-height: 30px;
color: rgba(172, 201, 230, 0.8);
background-image: linear-gradient(270deg, rgba(31, 67, 102, 0) 0%, rgba(31, 67, 102, 0.25) 100%);
h2 {
position: relative;
font-size: 16px;
font-weight: 500;
padding: 0 10px;
&::after {
position: absolute;
bottom: 0;
left: 27px;
z-index: 1;
width: 9px;
height: 2px;
background: rgba(41, 77, 102, 1);
content: ' ';
}
}
&::after {
position: absolute;
bottom: 0;
left: 0;
z-index: 1;
width: 9px;
height: 2px;
background: #5299CC;
content: ' ';
}
&::before {
position: absolute;
bottom: 0;
left: 14px;
z-index: 1;
width: 9px;
height: 2px;
background: rgba(41, 77, 102, 1);
content: ' ';
}
}
.AppQxnDv-total {
display: flex;
align-items: center;
margin-bottom: 16px;
.item {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
flex: 1;
h2 {
margin-bottom: 10px;
font-size: 14px;
font-weight: 500;
color: #FFFFFF;
}
.item-bottom {
display: flex;
align-items: baseline;
span {
font-weight: 700;
font-size: 18px;
color: #02FEFF;
}
i {
margin-left: 4px;
font-style: normal;
color: rgba(255, 255, 255, 0.5);
font-size: 12px;
}
}
}
}
:deep(.el-select) {
height: 24px;
line-height: 24px;
input {
width: 100%;
height: 24px;
line-height: 24px;
padding: 0 26px 0 6px;
font-size: 12px;
color: rgba(179, 229, 229, 1);
border: 1px solid #2A7A92;
border-radius: 2px;
background: transparent;
&::placeholder {
color: rgba(179, 229, 229, 0.6);
}
}
.el-input__suffix {
right: 1px;
top: 0px;
}
i {
color: #B3E5E5;
}
}
2023-04-26 17:32:51 +08:00
:deep(.ai-table) {
.el-table {
2023-04-27 16:43:07 +08:00
font-size: 11px;
2023-04-26 17:32:51 +08:00
color: #d0e1e8;
background-color: transparent!important;
th.el-table__cell.is-leaf, .el-table td.el-table__cell {
border: none!important;
}
tr.el-table__row--striped td {
background: rgba(33, 180, 253, 0.1)!important;
}
.el-table__header tr th:first-child .cell {
padding: 0!important;
}
.el-table__body tr td:first-child .cell {
padding: 0!important;
}
&.el-table--enable-row-hover .el-table__body tr:hover > td.el-table__cell {
background-color: rgba(33, 180, 253, 0.1)!important;
}
th.el-table__cell {
background-color: transparent;
}
tr {
background-color: transparent;
}
.el-table__cell {
padding: 7px 0;
color: #d0e1e8;
}
.el-table__header tr .cell {
color: #02FEFF!important;
}
}
.ai-table__header {
background: rgba(33, 180, 253, 0.1)!important;
}
}
2023-04-23 17:50:29 +08:00
::-webkit-scrollbar {
width: 5px;
height: 14px;
}
::-webkit-scrollbar-corner {
background: transparent;
}
::-webkit-scrollbar-thumb {
min-height: 20px;
background-clip: content-box;
box-shadow: 0 0 0 5px rgba(116, 148, 170, 0.5) inset;
}
::-webkit-scrollbar-track {
box-shadow: 1px 1px 5px rgba(116, 148, 170, 0.5) inset;
}
* {
box-sizing: border-box;
}
& > .right {
display: flex;
flex: 1;
2023-04-27 14:38:57 +08:00
overflow: hidden;
2023-04-23 17:50:29 +08:00
.right-left {
width: 500px;
.right-left__middle {
display: flex;
.left {
width: 245px;
margin-right: 12px;
}
.right {
flex: 1;
}
}
.right-left__bottom {
display: flex;
div {
flex: 1;
&:first-child {
margin-right: 12px;
}
}
}
}
.right-middle {
2023-04-27 16:58:44 +08:00
width: 542px;
2023-04-27 16:43:07 +08:00
margin: 0 14px;
2023-04-23 17:50:29 +08:00
.right-middle__middle {
display: flex;
justify-content: space-between;
margin-bottom: 16px;
}
}
.right-right {
2023-04-24 10:34:41 +08:00
display: flex;
flex-direction: column;
2023-04-27 16:16:21 +08:00
// flex: 1;
2023-04-27 16:58:44 +08:00
width: 570px;
2023-04-27 16:16:21 +08:00
overflow: hidden;
2023-04-23 17:50:29 +08:00
2023-04-24 10:34:41 +08:00
.bottom {
padding-top: 16px;
overflow: hidden;
}
2023-04-23 17:50:29 +08:00
.right-right__top {
display: flex;
margin-bottom: 16px;
& > div {
flex: 1;
&:first-child {
margin-right: 12px;
}
}
}
}
}
& > .left {
display: flex;
align-items: center;
flex-direction: column;
2023-04-27 16:43:07 +08:00
width: 230px;
margin-right: 10px;
2023-04-23 17:50:29 +08:00
.left-list {
flex: 1;
overflow-y: auto;
2023-04-25 10:38:06 +08:00
width: 100%;
2023-04-23 17:50:29 +08:00
.left-item {
position: relative;
width: 100%;
2023-04-26 11:05:44 +08:00
cursor: pointer;
2023-04-23 17:50:29 +08:00
margin-bottom: 10px;
padding: 30px 14px 14px;
2023-04-26 11:05:44 +08:00
background-image: linear-gradient(0deg, rgba(40, 182, 253, 0.08) 1%, rgba(0, 102, 154, 0.2) 100%);
2023-04-23 17:50:29 +08:00
border-radius: 6px;
2023-04-26 14:14:29 +08:00
box-shadow: inset 0 -1px 0 0 transparent;
2023-04-26 11:05:44 +08:00
transition: all ease 0.3s;
&:hover {
opacity: 0.7;
}
&.active {
background-image: linear-gradient(0deg, #28b6fd24 0%, #00669aa6 99%);
box-shadow: inset 0 -1px 0 0 #23B2C7;
&:hover {
opacity: 1;
}
}
2023-04-23 17:50:29 +08:00
i {
position: absolute;
left: 0;
top: 0;
width: 22px;
height: 21px;
line-height: 21px;
text-align: center;
font-weight: 600;
font-style: normal;
font-size: 14px;
color: #FFFFFF;
background-image: linear-gradient(177deg, #02eeee66 0%, #0190d866 100%);
border-radius: 6px 0 6px 0;
}
.left-item__bottom {
display: flex;
align-items: center;
justify-content: space-between;
span {
color: #fff;
font-weight: 600;
font-size: 12px;
}
}
.left-item__top {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 10px;
.el-select {
width: 100px;
}
h2 {
font-weight: 600;
font-size: 14px;
color: #FFFFFF;
}
}
}
}
}
}
</style>