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.
1490 lines
57 KiB
1490 lines
57 KiB
<template>
|
|
<!-- 村级大屏 -->
|
|
<div class="eb-container" ref="appRef">
|
|
<MainTitle class="title" :title="title"></MainTitle>
|
|
<div class="main">
|
|
<div class="left-box">
|
|
<div class="content-one">
|
|
<div class="title-box-samll">
|
|
<span>基本概况</span>
|
|
</div>
|
|
<div class="content-info">
|
|
<div
|
|
class="base-item"
|
|
v-for="(item, index) in baseInfoList"
|
|
:key="index"
|
|
>
|
|
<img
|
|
:src="item.icon"
|
|
style="width: 60px; height: 60px"
|
|
/>
|
|
<div class="base-data-box">
|
|
<div class="base-data-title">
|
|
{{ item.label }}
|
|
</div>
|
|
<div class="base-data-text">
|
|
<CountTo
|
|
:startVal="0"
|
|
:endVal="Number(item.value)"
|
|
:duration="2000"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="content-two">
|
|
<div class="title-box-samll">
|
|
<span>民生服务</span>
|
|
</div>
|
|
<div class="content-info">
|
|
<div
|
|
style="
|
|
width: 100%;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
"
|
|
>
|
|
<div
|
|
class="data-item-box"
|
|
v-for="(item, index) in swNumList"
|
|
:key="index"
|
|
>
|
|
<div class="data-item-icon">
|
|
<img
|
|
:src="item.icon"
|
|
style="width: 56px; height: 50px"
|
|
/>
|
|
</div>
|
|
<div class="data-item-desc">
|
|
<div
|
|
class="data-item-title"
|
|
style="font-weight: bolder"
|
|
>
|
|
{{ item.name }}
|
|
</div>
|
|
<div class="data-item-number">
|
|
<CountTo
|
|
:startVal="0"
|
|
:endVal="item.number"
|
|
:duration="2000"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="mini-title-box">
|
|
<div class="point"></div>
|
|
<div class="title-text">事件上报数据统计</div>
|
|
</div>
|
|
<div class="alarm-info-box">
|
|
<div
|
|
class="alarm-item"
|
|
v-for="(item, index) in alarmInfoList"
|
|
:key="index"
|
|
>
|
|
<div style="margin-top: 2px">
|
|
<img
|
|
:src="item.icon"
|
|
style="width: 48px; height: 50px"
|
|
/>
|
|
</div>
|
|
<div class="alarm-data-box">
|
|
<div
|
|
class="alarm-data-title"
|
|
:style="{ color: item.color }"
|
|
>
|
|
{{ item.name }}
|
|
</div>
|
|
<div class="alarm-data-text">
|
|
<CountTo
|
|
:startVal="0"
|
|
:endVal="item.number"
|
|
:duration="2000"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="chart2" id="chart2"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="center-box">
|
|
<div class="title-box-medium" style="width: 100%">
|
|
<span>宣传一览</span>
|
|
</div>
|
|
<div class="video-box" v-if="urlType == '0'">
|
|
<commonLivePlayer
|
|
:videoUrl="videoUrl"
|
|
:loop="true"
|
|
:muted="false"
|
|
></commonLivePlayer>
|
|
</div>
|
|
<Carousel v-else v-model="imgIndex" style="width: 880px; height: 495px;" loop>
|
|
<CarouselItem>
|
|
<img v-for="(item, index) in videoUrl" :key="index" :src="item" style="width: 880px; height: 495px;" />
|
|
</CarouselItem>
|
|
</Carousel>
|
|
<div class="center-bottom">
|
|
<div class="center-bottom-box">
|
|
<div class="title-box-samll" style="width: 100%">
|
|
<span>人员结构</span>
|
|
</div>
|
|
<div class="content-info" id="chart3"></div>
|
|
</div>
|
|
<div class="center-bottom-box">
|
|
<div class="title-box-samll" style="width: 100%">
|
|
<span>特殊人群</span>
|
|
</div>
|
|
<div class="content-info" id="chart4"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="right-box">
|
|
<div class="content-three">
|
|
<div class="title-box-samll">
|
|
<span>组织概况</span>
|
|
</div>
|
|
<div class="content-info">
|
|
<vue-seamless-scroll
|
|
:data="leaderList"
|
|
:class-option="leaderOption"
|
|
style="width: 100%; height: 100%; overflow: hidden"
|
|
>
|
|
<div style="height: 100%; display: flex">
|
|
<div
|
|
class="data-item"
|
|
v-for="(item, index) in leaderList"
|
|
:key="index"
|
|
>
|
|
<img :src="item.image" />
|
|
<div class="info-box">
|
|
<span>姓名:</span>
|
|
<span>{{ item.name }}</span>
|
|
<span>职务:</span>
|
|
<span>{{ item.job }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</vue-seamless-scroll>
|
|
</div>
|
|
</div>
|
|
<div class="content-four">
|
|
<div class="title-box-samll">
|
|
<span>产业发展</span>
|
|
</div>
|
|
<div class="content-info">
|
|
<div class="info-item">
|
|
<div class="item-value">
|
|
<countTo
|
|
class="number"
|
|
:startVal="startVal"
|
|
:endVal="
|
|
parseFloat(baseInfo.specialtyCatering)
|
|
"
|
|
:decimals="2"
|
|
:duration="2000"
|
|
></countTo>
|
|
</div>
|
|
<div>
|
|
<img
|
|
:src="
|
|
require('@/assets/largeScreen/nysc.png')
|
|
"
|
|
style="width: 75px"
|
|
/>
|
|
</div>
|
|
<div class="item-name">农业总产值(亿元)</div>
|
|
</div>
|
|
<div class="info-item">
|
|
<div class="item-value">
|
|
<countTo
|
|
class="number"
|
|
:startVal="startVal"
|
|
:endVal="
|
|
parseFloat(baseInfo.featuredHomestays)
|
|
"
|
|
:decimals="2"
|
|
:duration="2000"
|
|
></countTo>
|
|
</div>
|
|
<div>
|
|
<img
|
|
:src="
|
|
require('@/assets/largeScreen/gysc.png')
|
|
"
|
|
style="width: 75px"
|
|
/>
|
|
</div>
|
|
<div class="item-name">工业总产值(亿元)</div>
|
|
</div>
|
|
<div class="info-item">
|
|
<div class="item-value">
|
|
<countTo
|
|
class="number"
|
|
:startVal="startVal"
|
|
:decimals="2"
|
|
:endVal="parseFloat(baseInfo.scenicSpots)"
|
|
:duration="2000"
|
|
></countTo>
|
|
</div>
|
|
<div>
|
|
<img
|
|
:src="
|
|
require('@/assets/largeScreen/sysc.png')
|
|
"
|
|
style="width: 75px"
|
|
/>
|
|
</div>
|
|
<div class="item-name">商业总产值(亿元)</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="content-five">
|
|
<div class="title-box-samll">
|
|
<span>最新公告</span>
|
|
</div>
|
|
<div class="content-info" @click="openContent($event)">
|
|
<vue-seamless-scroll
|
|
:data="newContentList"
|
|
:class-option="contentOption"
|
|
style="width: 100%; height: 100%; overflow: hidden"
|
|
>
|
|
<div
|
|
style="
|
|
width: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
"
|
|
>
|
|
<div
|
|
class="list-item"
|
|
v-for="(item, index) in newContentList"
|
|
:data-obj="index"
|
|
:key="index"
|
|
>
|
|
<img :src="item.coverImage" />
|
|
<div class="info-box">
|
|
<span class="title">{{
|
|
item.title
|
|
}}</span>
|
|
<span class="time">{{
|
|
item.publishTime
|
|
}}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</vue-seamless-scroll>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="page-bottom-bg"></div>
|
|
<div class="page-left-bg"></div>
|
|
<div class="page-right-bg"></div>
|
|
<commonModal
|
|
v-model="detailModal"
|
|
:title="detailInfo.title"
|
|
@close="detailModal = false"
|
|
:width="1000"
|
|
>
|
|
<div class="content-box">
|
|
<!-- <div class="content-title">{{detailInfo.title}}</div>-->
|
|
<div style="display: flex">
|
|
<div style="font-size: 16px; margin-right: 20px">
|
|
发布时间:{{ detailInfo.publishTime }}
|
|
</div>
|
|
<div style="font-size: 16px">
|
|
发布单位:{{ detailInfo.createBy }}
|
|
</div>
|
|
</div>
|
|
<div style="width: 100%" v-if="detailInfo.contentType == '0'">
|
|
<span
|
|
style="
|
|
display: inline-block;
|
|
font-size: 16px;
|
|
margin-top: 20px;
|
|
"
|
|
>简介:</span
|
|
>
|
|
<div class="content-desc" v-html="detailInfo.content"></div>
|
|
</div>
|
|
<div style="width: 100%" v-if="detailInfo.contentType == '1'">
|
|
<span
|
|
style="
|
|
display: inline-block;
|
|
font-size: 16px;
|
|
margin-top: 20px;
|
|
"
|
|
>图集:</span
|
|
>
|
|
<Carousel
|
|
style="width: 100%; height: 540px"
|
|
autoplay
|
|
v-model="imgListIndex"
|
|
loop
|
|
>
|
|
<CarouselItem
|
|
v-for="(item, index) in detailInfo.imageList"
|
|
:key="index"
|
|
>
|
|
<img
|
|
:src="item"
|
|
alt=""
|
|
style="width: 100%; height: 540px"
|
|
/>
|
|
</CarouselItem>
|
|
</Carousel>
|
|
</div>
|
|
<div style="width: 100%" v-if="detailInfo.contentType == '2'">
|
|
<span
|
|
style="
|
|
display: inline-block;
|
|
font-size: 16px;
|
|
margin-top: 20px;
|
|
"
|
|
>视频:</span
|
|
>
|
|
<LivePlayer
|
|
:videoUrl="detailInfo.mediaUrl"
|
|
autoplay
|
|
:muted="false"
|
|
></LivePlayer>
|
|
</div>
|
|
</div>
|
|
</commonModal>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { useIndex } from "../../utils/utilsDramAdmin";
|
|
import MainTitle from "./components/MainTitle.vue";
|
|
import vueSeamlessScroll from "vue-seamless-scroll";
|
|
import LivePlayer from "@liveqing/liveplayer";
|
|
import commonModal from "@/views/common-components/common-modal.vue";
|
|
import commonLivePlayer from "@/views/common-components/common-live-player.vue";
|
|
|
|
import * as echarts from "echarts";
|
|
import { echartsFocus, echartsClear } from "@/utils/autoEcharts";
|
|
|
|
import countTo from "vue-count-to";
|
|
|
|
export default {
|
|
name: "VillageScreen",
|
|
components: {
|
|
MainTitle,
|
|
vueSeamlessScroll,
|
|
LivePlayer,
|
|
countTo,
|
|
commonModal,
|
|
commonLivePlayer
|
|
},
|
|
data() {
|
|
return {
|
|
title: "示范村信息服务",
|
|
detailModal: false,
|
|
detailInfo: {},
|
|
areaCode: window.$localStorage.getItem("areaCode"),
|
|
videoUrl: "",
|
|
startVal: 0,
|
|
baseInfoList: [],
|
|
baseIconList: [
|
|
{
|
|
icon: require("@/assets/xczl/xczl-icon1.png"),
|
|
},
|
|
{
|
|
icon: require("@/assets/xczl/gdmj-icon.png"),
|
|
},
|
|
{
|
|
icon: require("@/assets/xczl/zhs-icon.png"),
|
|
},
|
|
{
|
|
icon: require("@/assets/xczl/zrk-icon.png"),
|
|
},
|
|
{
|
|
icon: require("@/assets/xczl/hjrk-icon.png"),
|
|
},
|
|
{
|
|
icon: require("@/assets/xczl/czrk-icon.png"),
|
|
},
|
|
{
|
|
icon: require("@/assets/xczl/rjnsr-icon.png"),
|
|
},
|
|
],
|
|
swNumList: [
|
|
{
|
|
icon: require("@/assets/largeScreen/dwgk.png"),
|
|
name: "党务公开",
|
|
number: 0,
|
|
},
|
|
{
|
|
icon: require("@/assets/largeScreen/cunwgk.png"),
|
|
name: "村务公开",
|
|
number: 0,
|
|
},
|
|
{
|
|
icon: require("@/assets/largeScreen/caiwgk.png"),
|
|
name: "财务公开",
|
|
number: 0,
|
|
},
|
|
],
|
|
alarmInfoList: [
|
|
{
|
|
icon: require("@/assets/largeScreen/ycl.png"),
|
|
color: "green",
|
|
name: "已办理(项)",
|
|
number: "0",
|
|
},
|
|
{
|
|
icon: require("@/assets/largeScreen/wcl.png"),
|
|
color: "red",
|
|
name: "未办理(项)",
|
|
number: "0",
|
|
},
|
|
],
|
|
leaderList: [],
|
|
baseInfo: {
|
|
specialtyCatering: "0",
|
|
featuredHomestays: "0",
|
|
scenicSpots: "0",
|
|
},
|
|
newContentList: [],
|
|
leaderOption: {
|
|
step: 0.3, // 数值越大速度滚动越快
|
|
limitMoveNum: 3, // 开始无缝滚动的数据量 this.dataList.length
|
|
hoverStop: true, // 是否开启鼠标悬停stop
|
|
direction: 2, // 0向下 1向上 2向左 3向右
|
|
openWatch: true, // 开启数据实时监控刷新dom
|
|
singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
|
|
singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
|
|
waitTime: 1000, // 单步运动停止的时间(默认值1000ms)
|
|
},
|
|
contentOption: {
|
|
step: 0.3, // 数值越大速度滚动越快
|
|
limitMoveNum: 3, // 开始无缝滚动的数据量 this.dataList.length
|
|
hoverStop: true, // 是否开启鼠标悬停stop
|
|
direction: 1, // 0向下 1向上 2向左 3向右
|
|
openWatch: true, // 开启数据实时监控刷新dom
|
|
singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
|
|
singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
|
|
waitTime: 1000, // 单步运动停止的时间(默认值1000ms)
|
|
},
|
|
urlType: "0",
|
|
imgIndex: 0
|
|
};
|
|
},
|
|
computed: {},
|
|
created() {
|
|
let query = this.$route.query;
|
|
if (query) {
|
|
this.areaCode = query.areaCode;
|
|
this.title = query.areaName + "信息服务";
|
|
}
|
|
},
|
|
mounted() {
|
|
const { calcRate, windowDraw } = useIndex(this.$refs.appRef);
|
|
calcRate();
|
|
windowDraw();
|
|
this.getThreeOpenInfo();
|
|
// 获取基本信息
|
|
this.initDataInfo("villageBaseInfo", (data) => {
|
|
this.baseInfoList = data.map((item, index) => {
|
|
item.icon = this.baseIconList[index].icon;
|
|
return item;
|
|
});
|
|
});
|
|
// 获取产业发展
|
|
this.initDataInfo("villageDevlopment", (data) => {
|
|
if (data && data.length > 0) {
|
|
this.baseInfo.specialtyCatering = data[0].value;
|
|
this.baseInfo.featuredHomestays = data[1].value;
|
|
this.baseInfo.scenicSpots = data[2].value;
|
|
}
|
|
});
|
|
// 获取人员结构
|
|
this.initDataInfo("villagePerson", (data) => {
|
|
if (data && data.length > 0) {
|
|
let xdata = data.map((item) => item.label);
|
|
let ydata = data.map((item) => Number(item.value));
|
|
this.initChart3(xdata, ydata);
|
|
}
|
|
});
|
|
// 获取特殊人群
|
|
this.initDataInfo("villagePersonSpecial", (data) => {
|
|
if (data && data.length > 0) {
|
|
let xdata = data.map((item) => item.label);
|
|
let ydata = data.map((item) => {
|
|
return {
|
|
name: item.label,
|
|
value: Number(item.value),
|
|
};
|
|
});
|
|
let total = 0;
|
|
data.forEach((item) => {
|
|
total += Number(item.value);
|
|
});
|
|
this.initChart4(xdata, ydata, total);
|
|
}
|
|
});
|
|
this.getEventNum();
|
|
this.queryLeaderInfo();
|
|
this.queryContentInfo();
|
|
this.queryVideoInfo()
|
|
},
|
|
beforeDestroy() {
|
|
echartsClear();
|
|
},
|
|
methods: {
|
|
getVillOpen() {
|
|
let xdata = ["2024-07", "2024-08", "2024-09"];
|
|
let ydata1 = [10, 12, 11];
|
|
let ydata2 = [10, 12, 11];
|
|
let ydata3 = [10, 12, 11];
|
|
this.initChart2(xdata, ydata1, ydata2, ydata3);
|
|
},
|
|
getPersonData() {
|
|
let xdata = ["0-6岁", "7-17岁", "18-45岁", "46-59岁", "60岁及以上"];
|
|
let ydata = [100, 110, 200, 400, 300];
|
|
this.initChart3(xdata, ydata);
|
|
},
|
|
getSpecialPerson() {
|
|
let data = [
|
|
{
|
|
name: "优抚对象",
|
|
value: 337,
|
|
},
|
|
{
|
|
name: "城市地保人员",
|
|
value: 121,
|
|
},
|
|
{
|
|
name: "特困人员",
|
|
value: 280,
|
|
},
|
|
{
|
|
name: "一级残疾",
|
|
value: 213,
|
|
},
|
|
{
|
|
name: "低保人员",
|
|
value: 1077,
|
|
},
|
|
{
|
|
name: "二级残疾",
|
|
value: 391,
|
|
},
|
|
];
|
|
this.initChart4(data);
|
|
},
|
|
initChart2(xdata, ydata1, ydata2, ydata3) {
|
|
let myChart = echarts.init(document.getElementById("chart2"));
|
|
let option = {
|
|
tooltip: {
|
|
trigger: "axis",
|
|
axisPointer: {
|
|
// 坐标轴指示器,坐标轴触发有效
|
|
type: "shadow", // 默认为直线,可选为:'line' | 'shadow'
|
|
},
|
|
},
|
|
grid: {
|
|
left: "2%",
|
|
right: "4%",
|
|
bottom: "4%",
|
|
top: "16%",
|
|
containLabel: true,
|
|
},
|
|
legend: {
|
|
data: ["党务", "财务", "村务"],
|
|
right: 1,
|
|
top: 1,
|
|
textStyle: {
|
|
color: "#99A8BD",
|
|
fontSize: 12,
|
|
},
|
|
itemWidth: 14,
|
|
itemHeight: 10,
|
|
},
|
|
xAxis: {
|
|
type: "category",
|
|
data: xdata,
|
|
axisLine: {
|
|
lineStyle: {
|
|
show: false,
|
|
lineStyle: {
|
|
color: "#6A989E",
|
|
},
|
|
},
|
|
},
|
|
axisLabel: {
|
|
textStyle: {
|
|
fontFamily: "Microsoft YaHei",
|
|
color: "#ffffff", // x轴颜色
|
|
fontWeight: "normal",
|
|
fontSize: 12,
|
|
},
|
|
},
|
|
},
|
|
yAxis: {
|
|
type: "value",
|
|
minInterval: 1,
|
|
axisLine: {
|
|
show: false,
|
|
},
|
|
splitLine: {
|
|
show: true,
|
|
lineStyle: {
|
|
color: "rgba(135,140,147,1)", //左侧显示线
|
|
type: "dashed",
|
|
width: 0.5,
|
|
},
|
|
},
|
|
axisLabel: {
|
|
formatter: "{value}",
|
|
color: "#ffffff",
|
|
fontSize: 12,
|
|
},
|
|
},
|
|
series: [
|
|
{
|
|
name: "党务",
|
|
type: "bar",
|
|
barWidth: "14",
|
|
itemStyle: {
|
|
normal: {
|
|
opacity: 0.7,
|
|
color: new echarts.graphic.LinearGradient(
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
[
|
|
{
|
|
offset: 0,
|
|
color: "blue",
|
|
},
|
|
{
|
|
offset: 1,
|
|
color: "#7EC0EE",
|
|
},
|
|
]
|
|
),
|
|
barBorderRadius: 0,
|
|
},
|
|
},
|
|
label: {
|
|
show: false,
|
|
position: ["-18", "-18"],
|
|
color: "#00f8ff",
|
|
fontSize: 12,
|
|
},
|
|
data: ydata1,
|
|
},
|
|
{
|
|
name: "财务",
|
|
type: "bar",
|
|
barWidth: "14",
|
|
itemStyle: {
|
|
normal: {
|
|
opacity: 0.7,
|
|
color: new echarts.graphic.LinearGradient(
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
[
|
|
{
|
|
offset: 0,
|
|
color: "#FF2246",
|
|
},
|
|
{
|
|
offset: 1,
|
|
color: "#FFC0CB",
|
|
},
|
|
]
|
|
),
|
|
barBorderRadius: 0,
|
|
},
|
|
},
|
|
label: {
|
|
show: false,
|
|
position: ["18", "-18"],
|
|
color: "#00f8ff",
|
|
fontSize: 12,
|
|
},
|
|
data: ydata2,
|
|
},
|
|
{
|
|
name: "村务",
|
|
type: "bar",
|
|
barWidth: "14",
|
|
itemStyle: {
|
|
normal: {
|
|
opacity: 0.7,
|
|
color: new echarts.graphic.LinearGradient(
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
[
|
|
{
|
|
offset: 0,
|
|
color: "#efbe0a",
|
|
},
|
|
{
|
|
offset: 1,
|
|
color: "#fff9c0",
|
|
},
|
|
]
|
|
),
|
|
barBorderRadius: 0,
|
|
},
|
|
},
|
|
data: ydata3,
|
|
},
|
|
],
|
|
};
|
|
myChart.setOption(option);
|
|
echartsFocus(myChart, xdata.length);
|
|
},
|
|
initChart3(xdata, ydata) {
|
|
let myChart = echarts.init(document.getElementById("chart3"));
|
|
let option = {
|
|
color: ["#3398DB"],
|
|
tooltip: {
|
|
trigger: "axis",
|
|
axisPointer: {
|
|
type: "shadow",
|
|
},
|
|
formatter: function (params) {
|
|
return (
|
|
params[0].axisValue +
|
|
"<br/>人数:" +
|
|
params[0].data +
|
|
"人"
|
|
);
|
|
},
|
|
},
|
|
grid: {
|
|
left: "2%",
|
|
right: "5%",
|
|
bottom: "5%",
|
|
top: "7%",
|
|
containLabel: true,
|
|
z: 22,
|
|
},
|
|
xAxis: [
|
|
{
|
|
type: "value",
|
|
splitLine: {
|
|
show: true,
|
|
lineStyle: {
|
|
color: "rgba(135,140,147,0.8)", //左侧显示线
|
|
type: "dashed",
|
|
width: 0.5,
|
|
},
|
|
},
|
|
axisLine: {
|
|
show: false,
|
|
},
|
|
axisLabel: {
|
|
show: true,
|
|
color: "#ffffff",
|
|
},
|
|
},
|
|
],
|
|
yAxis: {
|
|
type: "category",
|
|
gridIndex: 0,
|
|
data: xdata,
|
|
inverse: true,
|
|
splitLine: {
|
|
show: false,
|
|
},
|
|
axisTick: {
|
|
show: false,
|
|
},
|
|
axisLabel: {
|
|
color: "#ffffff",
|
|
formatter: "{value}",
|
|
},
|
|
},
|
|
series: [
|
|
{
|
|
name: "人数",
|
|
type: "bar",
|
|
barWidth: "12",
|
|
itemStyle: {
|
|
normal: {
|
|
barBorderRadius: 30,
|
|
color: new echarts.graphic.LinearGradient(
|
|
1,
|
|
0,
|
|
0,
|
|
0,
|
|
[
|
|
{
|
|
offset: 0,
|
|
color: "rgba(35, 165, 255, 1)",
|
|
},
|
|
{
|
|
offset: 0.5,
|
|
color: "rgba(35, 165, 255, 0.8)",
|
|
},
|
|
{
|
|
offset: 1,
|
|
color: "transparent",
|
|
},
|
|
]
|
|
),
|
|
},
|
|
},
|
|
data: ydata,
|
|
},
|
|
],
|
|
};
|
|
myChart.setOption(option);
|
|
echartsFocus(myChart, xdata.length);
|
|
},
|
|
initChart4(xdata, ydata, total) {
|
|
let myChart = echarts.init(document.getElementById("chart4"));
|
|
let option = {
|
|
tooltip: {
|
|
trigger: "item",
|
|
axisPointer: {
|
|
// 坐标轴指示器,坐标轴触发有效
|
|
type: "shadow", // 默认为直线,可选为:'line' | 'shadow'
|
|
},
|
|
},
|
|
title: {
|
|
text: total + "人",
|
|
subtext: "总计",
|
|
textAlign: "center",
|
|
textVerticalAlign: "center",
|
|
x: "50%",
|
|
y: "55%",
|
|
textStyle: {
|
|
color: "#fff",
|
|
fontSize: 26,
|
|
fontWeight: "normal",
|
|
},
|
|
subtextStyle: {
|
|
color: "#99A8BD",
|
|
fontSize: 20,
|
|
fontWeight: "normal",
|
|
align: "center",
|
|
},
|
|
},
|
|
legend: {
|
|
show: true,
|
|
textStyle: {
|
|
color: "#fff",
|
|
fontSize: 14,
|
|
},
|
|
icon: "circle",
|
|
top: "5%",
|
|
itemGap: 15,
|
|
data: xdata,
|
|
},
|
|
series: [
|
|
{
|
|
type: "pie",
|
|
center: ["50%", "60%"],
|
|
radius: ["50%", "65%"],
|
|
hoverAnimation: false,
|
|
color: [
|
|
"#FEE449",
|
|
"#00FFFF",
|
|
"#00FFA8",
|
|
"#9F17FF",
|
|
"#FFE400",
|
|
"#F76F01",
|
|
"#01A4F7",
|
|
"#FE2C8A",
|
|
],
|
|
label: {
|
|
show: false,
|
|
},
|
|
data: ydata,
|
|
},
|
|
{
|
|
type: "pie",
|
|
center: ["50%", "60%"],
|
|
radius: ["43%", "45%"],
|
|
hoverAnimation: false,
|
|
label: {
|
|
show: false,
|
|
},
|
|
data: [
|
|
{
|
|
value: 78,
|
|
name: "人数",
|
|
itemStyle: {
|
|
normal: {
|
|
color: {
|
|
x: 0,
|
|
y: 0,
|
|
x2: 1,
|
|
y2: 0,
|
|
type: "linear",
|
|
global: false,
|
|
colorStops: [
|
|
{
|
|
offset: 0,
|
|
color: "#9F17FF",
|
|
},
|
|
{
|
|
offset: 0.2,
|
|
color: "#01A4F7",
|
|
},
|
|
{
|
|
offset: 0.5,
|
|
color: "#FE2C8A",
|
|
},
|
|
{
|
|
offset: 0.8,
|
|
color: "#FEE449",
|
|
},
|
|
{
|
|
offset: 1,
|
|
color: "#00FFA8",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
],
|
|
};
|
|
myChart.setOption(option);
|
|
echartsFocus(myChart, xdata.length);
|
|
},
|
|
// 获取三务公开统计图数据
|
|
getThreeOpenInfo() {
|
|
let params = {
|
|
areaCode: this.areaCode,
|
|
monthLength: 3,
|
|
typeCodeList: ["PARTY", "WEALTH", "OUTDOOR"],
|
|
};
|
|
this.$http
|
|
.post(
|
|
"content/getContentNumberByType",
|
|
this.common.request(params)
|
|
)
|
|
.then((res) => {
|
|
if (res.data.code == 200) {
|
|
let data = res.data.data;
|
|
if (data && data.length > 0) {
|
|
this.getThreeOpenNumber(data);
|
|
}
|
|
this.renderChartData(data);
|
|
}
|
|
});
|
|
},
|
|
getThreeOpenNumber(data) {
|
|
if (data) {
|
|
data.forEach((monthData) => {
|
|
if (monthData.list && monthData.list.length > 0) {
|
|
monthData.list.forEach((item) => {
|
|
if (item.typeCode == "PARTY") {
|
|
this.swNumList[0].number += parseInt(
|
|
item.number
|
|
);
|
|
} else if (item.typeCode == "WEALTH") {
|
|
this.swNumList[1].number += parseInt(
|
|
item.number
|
|
);
|
|
} else if (item.typeCode == "OUTDOOR") {
|
|
this.swNumList[2].number += parseInt(
|
|
item.number
|
|
);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
renderChartData(data) {
|
|
if (data) {
|
|
let xdata = new Array(data.length).fill(""),
|
|
ydata1 = new Array(data.length).fill(0),
|
|
ydata2 = new Array(data.length).fill(0),
|
|
ydata3 = new Array(data.length).fill(0);
|
|
for (let i = 0; i < data.length; i++) {
|
|
let item = data[i];
|
|
xdata[i] = item.name;
|
|
for (
|
|
let dataIndex = 0;
|
|
dataIndex < item.list.length;
|
|
dataIndex++
|
|
) {
|
|
let dataItem = item.list[dataIndex];
|
|
if ("PARTY" == dataItem.typeCode) {
|
|
ydata1[i] = dataItem.number ? dataItem.number : 0;
|
|
} else if ("WEALTH" == dataItem.typeCode) {
|
|
ydata2[i] = dataItem.number ? dataItem.number : 0;
|
|
} else if ("OUTDOOR" == dataItem.typeCode) {
|
|
ydata3[i] = dataItem.number ? dataItem.number : 0;
|
|
}
|
|
}
|
|
}
|
|
this.initChart2(xdata, ydata1, ydata2, ydata3);
|
|
}
|
|
},
|
|
getEventNum() {
|
|
let params = {
|
|
areaCode: this.areaCode,
|
|
tagType: "event"
|
|
};
|
|
this.$http
|
|
.post("event/getHandleNum", this.common.request(params))
|
|
.then((res) => {
|
|
if (res.data.code == 200) {
|
|
let data = res.data.data;
|
|
if (data) {
|
|
this.alarmInfoList[0].number = data.handleNum;
|
|
this.alarmInfoList[1].number = data.unHandleNum;
|
|
}
|
|
}
|
|
});
|
|
},
|
|
// 获取数据
|
|
initDataInfo(type, callback) {
|
|
let params = {
|
|
page: 1,
|
|
pageSize: 100,
|
|
areaCode: this.areaCode,
|
|
type,
|
|
};
|
|
this.$http
|
|
.post("screen/getScreenSurveyPage", this.common.request(params))
|
|
.then((res) => {
|
|
if (res.data.code === 200) {
|
|
let data = res.data.data.records;
|
|
callback(data);
|
|
}
|
|
});
|
|
},
|
|
// 查询领导班子信息
|
|
queryLeaderInfo() {
|
|
let params = {
|
|
areaCode: this.areaCode,
|
|
page: 1,
|
|
pageSize: 10,
|
|
};
|
|
this.$http
|
|
.post(
|
|
"/screen/queryLeaderInfoPage",
|
|
this.common.request(params)
|
|
)
|
|
.then((res) => {
|
|
if (res.data.code === 200) {
|
|
this.leaderList = res.data.data.records;
|
|
} else {
|
|
this.$Message.error("查询领导班子数据有误");
|
|
}
|
|
});
|
|
},
|
|
queryContentInfo() {
|
|
this.$http
|
|
.post(
|
|
"/content/queryContentInfo",
|
|
this.common.request({
|
|
areaCode: this.areaCode,
|
|
hasParent: "0",
|
|
page: 1,
|
|
typeCode: "VILLAGEINFO",
|
|
pageSize: 100,
|
|
})
|
|
)
|
|
.then((res) => {
|
|
if (res.data.code === 200) {
|
|
this.newContentList = res.data.data.records;
|
|
}
|
|
});
|
|
},
|
|
openContent(e) {
|
|
if (e.target.className != "list-item") return;
|
|
let index = e.target.dataset.obj;
|
|
let data = this.newContentList[index];
|
|
if (data.contentType == "3") {
|
|
this.common.openWindow(data);
|
|
} else {
|
|
this.detailInfo = data;
|
|
this.detailModal = true;
|
|
}
|
|
},
|
|
// 获取视频数据
|
|
queryVideoInfo() {
|
|
let params = {
|
|
areaCode: this.areaCode,
|
|
type: "village",
|
|
state: "0",
|
|
};
|
|
this.$http
|
|
.post("screen/getScreenVideoList", this.common.request(params))
|
|
.then((res) => {
|
|
if (res.data.code === 200) {
|
|
let data = res.data.data;
|
|
if (data && data.length > 0) {
|
|
let item = data[0];
|
|
if (item.urlType == 1) {
|
|
this.videoUrl = JSON.parse(item.urlList);
|
|
this.urlType = item.urlType;
|
|
} else {
|
|
this.videoUrl = item.urlList;
|
|
this.urlType = item.urlType;
|
|
}
|
|
} else {
|
|
this.$Message.warning("视频信息暂未配置");
|
|
}
|
|
} else {
|
|
this.$Message.error("查询视频信息有误");
|
|
}
|
|
});
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="less" scoped>
|
|
@import "../../styles/pbStyle.less";
|
|
.eb-container {
|
|
width: 1920px;
|
|
height: 1080px;
|
|
transform: scale(var(--scale)) translate(-50%, -50%);
|
|
transform-origin: 0 0;
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 50%;
|
|
background-image: url("../../assets/largeScreen/page-bg.png");
|
|
background-size: 100%;
|
|
|
|
.main {
|
|
width: 1820px;
|
|
height: 920px;
|
|
position: fixed;
|
|
top: 100px;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
display: flex;
|
|
justify-content: space-between;
|
|
|
|
.left-box {
|
|
width: 458px;
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
.content-one {
|
|
width: 100%;
|
|
height: 388px;
|
|
.content-info {
|
|
.content-pub-style(100%, calc(100% - 42px));
|
|
padding: 10px;
|
|
display: grid;
|
|
grid-template-columns: repeat(2, 49%);
|
|
gap: 10px 2%;
|
|
grid-template-rows: repeat(auto-fill, 70px);
|
|
|
|
.base-item {
|
|
width: 100%;
|
|
height: 100%;
|
|
display: flex;
|
|
padding: 0 10px;
|
|
flex-direction: row;
|
|
align-items: center;
|
|
|
|
.base-data-box {
|
|
margin-left: 5px;
|
|
flex: 1;
|
|
color: #fff;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
.base-data-title {
|
|
font-size: 16px;
|
|
line-height: 22px;
|
|
}
|
|
|
|
.base-data-text {
|
|
font-size: 22px;
|
|
line-height: 29px;
|
|
text-shadow: 0px 0px 4px #33c2ff;
|
|
font-weight: 400;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.content-two {
|
|
width: 100%;
|
|
height: 532px;
|
|
.content-info {
|
|
.content-pub-style(100%, calc(100% - 42px));
|
|
padding: 10px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
.data-item-box {
|
|
width: 33%;
|
|
height: 70px;
|
|
display: flex;
|
|
flex-direction: row;
|
|
padding: 5px;
|
|
color: #ffffff;
|
|
|
|
.data-item-icon {
|
|
height: 70px;
|
|
padding-top: 7px;
|
|
}
|
|
|
|
.data-item-desc {
|
|
margin-left: 5px;
|
|
|
|
.data-item-title {
|
|
font-size: 14px;
|
|
line-height: 30px;
|
|
}
|
|
|
|
.data-item-number {
|
|
font-size: 26px;
|
|
line-height: 40px;
|
|
color: #ffd15c;
|
|
font-family: Furore;
|
|
}
|
|
}
|
|
}
|
|
|
|
.mini-title-box {
|
|
display: flex;
|
|
flex-direction: row;
|
|
height: 24px;
|
|
margin-top: 10px;
|
|
|
|
.point {
|
|
width: 8px;
|
|
height: 8px;
|
|
margin-top: 8px;
|
|
border-radius: 4px;
|
|
background: linear-gradient(
|
|
90deg,
|
|
#01ffff 0%,
|
|
#01a4ff 100%
|
|
);
|
|
box-shadow: 0px 0px 2px #1e85ff;
|
|
}
|
|
|
|
.title-text {
|
|
margin-left: 8px;
|
|
font-size: 18px;
|
|
line-height: 24px;
|
|
font-family: YouSheBiaoTiHei;
|
|
color: #ffffff;
|
|
}
|
|
}
|
|
.alarm-info-box {
|
|
width: 100%;
|
|
display: flex;
|
|
flex-direction: row;
|
|
justify-content: space-between;
|
|
margin-top: 5px;
|
|
padding: 0 10px;
|
|
|
|
.alarm-item {
|
|
width: 180px;
|
|
height: 60px;
|
|
display: flex;
|
|
flex-direction: row;
|
|
justify-content: space-between;
|
|
|
|
.alarm-data-box {
|
|
margin-left: 5px;
|
|
width: 240px;
|
|
height: 60px;
|
|
|
|
.alarm-data-title {
|
|
margin-top: 3px;
|
|
font-size: 14px;
|
|
line-height: 22px;
|
|
letter-spacing: 1px;
|
|
}
|
|
|
|
.alarm-data-text {
|
|
font-size: 20px;
|
|
line-height: 29px;
|
|
text-shadow: 0px 0px 4px #33c2ff;
|
|
font-weight: 400;
|
|
color: #ffffff;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.chart2 {
|
|
margin-top: 10px;
|
|
flex: 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.center-box {
|
|
width: 880px;
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
|
|
.video-box {
|
|
width: 880px;
|
|
}
|
|
.center-bottom {
|
|
flex: 1;
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
grid-template-rows: 100%;
|
|
column-gap: 10px;
|
|
|
|
.center-bottom-box {
|
|
width: 100%;
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
|
|
.content-info {
|
|
.content-pub-style(100%, calc(100% - 42px));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.right-box {
|
|
width: 458px;
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
|
|
.content-three {
|
|
width: 100%;
|
|
height: 194px;
|
|
.content-info {
|
|
.content-pub-style(100%, calc(100% - 42px));
|
|
padding: 10px;
|
|
.data-item {
|
|
margin-right: 20px;
|
|
width: 170px;
|
|
height: 126px;
|
|
display: flex;
|
|
|
|
img {
|
|
height: 100%;
|
|
width: 90px;
|
|
}
|
|
.info-box {
|
|
margin-left: 5px;
|
|
height: 100%;
|
|
color: #ffffff;
|
|
font-size: 14px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.content-four {
|
|
width: 100%;
|
|
height: 194px;
|
|
.content-info {
|
|
.content-pub-style(100%, calc(100% - 42px));
|
|
padding: 10px 20px;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
|
|
.info-item {
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
|
|
.item-value {
|
|
font-family: "YouSheBiaoTiHei";
|
|
font-style: normal;
|
|
font-weight: 400;
|
|
font-size: 24px;
|
|
|
|
background: linear-gradient(
|
|
180deg,
|
|
#ecf4fe 100%,
|
|
#5982b5 100%
|
|
);
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
text-fill-color: transparent;
|
|
}
|
|
|
|
.item-name {
|
|
font-family: "YouSheBiaoTiHei";
|
|
font-style: normal;
|
|
font-weight: 400;
|
|
font-size: 14px;
|
|
|
|
background: linear-gradient(
|
|
180deg,
|
|
#ecf4fe 100%,
|
|
#5982b5 100%
|
|
);
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
text-fill-color: transparent;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.content-five {
|
|
width: 100%;
|
|
height: 532px;
|
|
.content-info {
|
|
.content-pub-style(100%, calc(100% - 42px));
|
|
padding: 10px;
|
|
|
|
.list-item {
|
|
width: 100%;
|
|
height: 100px;
|
|
margin-bottom: 10px;
|
|
display: flex;
|
|
|
|
img {
|
|
width: 160px;
|
|
height: 100px;
|
|
border-radius: 5px;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.info-box {
|
|
flex: 1;
|
|
margin-left: 15px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
pointer-events: none;
|
|
color: #ffffff;
|
|
|
|
.title {
|
|
pointer-events: none;
|
|
font-size: 16px;
|
|
}
|
|
.time {
|
|
pointer-events: none;
|
|
font-size: 14px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|
|
|