Commit b94f9aa7 authored by xulili's avatar xulili

大屏

parent 35d58fdb
......@@ -1726,6 +1726,16 @@
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"cacache": {
"version": "13.0.1",
"resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz",
......@@ -1752,6 +1762,53 @@
"unique-filename": "^1.1.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
......@@ -1768,6 +1825,16 @@
"minipass": "^3.1.1"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"terser-webpack-plugin": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz",
......@@ -1784,6 +1851,18 @@
"terser": "^4.6.12",
"webpack-sources": "^1.4.3"
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.2.0",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.2.0.tgz",
"integrity": "sha512-TitGhqSQ61RJljMmhIGvfWzJ2zk9m1Qug049Ugml6QP3t0e95o0XJjk29roNEiPKJQBEi8Ord5hFuSuELzSp8Q==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
}
}
}
},
......@@ -11857,87 +11936,6 @@
}
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.1.2",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
"integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"vue-router": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.1.tgz",
......
This diff is collapsed.
<template>
<div class="list-of-area">
<triangle>
<slot>
<div class="list-of-area-title common-title">
<img class="icon-title" src="/images/screen/boardsDemand.png" alt="">
<span class="title">{{title}}</span>
<img class="bg" src="/images/screen/title00_bg.png" alt="">
</div>
<div class="list-of-body">
<ul class="body-title">
<li class="f5">地区名称</li>
<li class="f3">播放量(次)</li>
<li class="f2">展板数量</li>
</ul>
<div class="body-content" id="areaContent">
<div id="area1">
<ul class="body-item" v-for="(item,index) in list" :key="index">
<li class="f5">{{item.city}}</li>
<li class="f3">{{item.play}}</li>
<li class="f2">{{item.num}}</li>
</ul>
</div>
<div id="area2"></div>
<div id="area3">></div>
</div>
</div>
</slot>
</triangle>
</div>
<div class="list-of-area">
<triangle>
<slot>
<div class="list-of-area-title common-title">
<img
class="icon-title"
src="/images/screen/boardsDemand.png"
alt=""
/>
<span class="title">{{ title }}</span>
<img class="bg" src="/images/screen/title00_bg.png" alt="" />
</div>
<div class="list-of-body">
<ul class="body-title">
<li class="f5">地区名称</li>
<li class="f3">播放量(次)</li>
<li class="f2">展板数量</li>
</ul>
<div class="body-content" id="areaContent">
<div id="area1">
<ul class="body-item" v-for="(item, index) in list" :key="index">
<li class="f5">{{ item.areaName }}</li>
<li class="f3">{{ item.playNumber }}</li>
<li class="f2">{{ item.boardCnt }}</li>
</ul>
</div>
<div id="area2"></div>
<div id="area3"></div>
<div id="area4"></div>
</div>
</div>
</slot>
</triangle>
</div>
</template>
<script>
import triangle from '../components/slot/triangle'
export default {
name: 'areas',
data() {
return {
title:'地区展板播放统计',
timer:null,
speed:50,
box:null,
area1:null,
list:[
{ city:'山西省',play:'10000', num:'24'},
{ city:'湖南省',play:'8878', num:'22'},
{ city:'海南省',play:'5934', num:'21'},
{ city:'贵州省',play:'5899', num:'18'},
{ city:'云南省',play:'5523', num:'16'},
{ city:'甘肃省',play:'4678', num:'12'},
{ city:'四川省',play:'4224', num:'6'},
{ city:'湖南省',play:'3023', num:'4'},
{ city:'江西省',play:'2412', num:'2'},
{ city:'黑龙江省',play:'2258', num:'2'},
{ city:'湖北省',play:'2198', num:'2'},
{ city:'安徽省',play:'2158', num:'2'},
{ city:'新疆维吾尔自治区',play:'2258', num:'2'},
{ city:'广西壮族自治区',play:'1588', num:'2'},
{ city:'西藏自治区',play:'1258', num:'2'},
]
import triangle from "../components/slot/triangle";
export default {
name: "areas",
data() {
return {
title: "地区展板播放统计",
timer: null,
speed: 50,
box: null,
area1: null,
list: [],
};
},
components: { triangle },
mounted() {
this.getList();
},
methods: {
initScroll() {
let _this = this;
this.box = document.getElementById("areaContent");
this.con1 = document.getElementById("area1");
let con2 = document.getElementById("area2");
let con3 = document.getElementById("area3");
let con4 = document.getElementById("area4");
con2.innerHTML = this.con1.innerHTML;
con3.innerHTML = this.con1.innerHTML;
con4.innerHTML = this.con1.innerHTML;
this.timer = setInterval(_this.scrollUp, _this.speed);
},
scrollUp() {
if (this.box.scrollTop >= this.con1.scrollHeight) {
this.box.scrollTop = 0;
} else {
this.box.scrollTop++;
}
},
components:{triangle},
mounted() {
setTimeout(()=>{
this.initScroll()
},1000)
getList() {
let _this = this;
let requestparams = {};
requestparams._index = 1;
requestparams._size = 10;
this.$https(
{
method: "post",
url: "tBoardStatistic/getBoardDistrictPageList",
},
requestparams
)
.then((res) => {
if (res.status == 200) {
if (res.data.resultCode == 200) {
this.list = res.data.data.records;
this.$nextTick(()=>{
_this.initScroll();
})
} else {
this.list = [];
}
} else {
this.list = [];
}
})
.catch((err) => {
this.$message.error(err.message);
});
},
methods: {
initScroll() {
let _this = this
this.box = document.getElementById("areaContent");
this.con1 = document.getElementById("area1");
let con2 = document.getElementById("area2");
let con3 = document.getElementById("area3");
con2.innerHTML = this.con1.innerHTML;
con3.innerHTML = this.con1.innerHTML;
this.timer = setInterval(_this.scrollUp, _this.speed);
},
scrollUp() {
if (this.box.scrollTop >= this.con1.scrollHeight) {
this.box.scrollTop = 0;
} else{
this.box.scrollTop++;
}
},
}
}
},
};
</script>
<style lang=scss>
</style>
<template>
<div class="dashbord-list">
<ul>
<li v-for="(item, index) in list">
<img :src="'/images/screen/'+ item.urlName+ '.png'" alt="">
<div class="title">
<div class="title-name">{{item.label}}</div>
<span>
<a class="num">{{item.num}}</a>
<a class="unit">{{item.unit}}</a>
</span>
</div>
</li>
</ul>
</div>
<div class="dashbord-list">
<ul>
<li v-for="(item, index) in list" :key="index">
<img :src="'/images/screen/' + item.urlName + '.png'" alt="" />
<div class="title">
<div class="title-name">{{ item.label }}</div>
<span>
<a class="num">{{ item.num }}</a>
<a class="unit">{{ item.unit }}</a>
</span>
</div>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'nums',
data() {
return {
list:[
{label:'总播放量',num: 1000, unit: '次',urlName:'play'},
{label:'单位组织',num: 688, unit: '家',urlName:'org'},
{label:'展板总量',num: 20, unit: '个',urlName:'boardsTotal'},
{label:'互动总量',num: 899, unit: '次',urlName:'interaction'},
]
}
},
mounted() {
this.initData()
export default {
name: "nums",
data() {
return {
data: [
{
label: "总播放量",
num: 0,
unit: "次",
urlName: "play",
feild: "playCnt",
},
{
label: "单位组织",
num: 0,
unit: "家",
urlName: "org",
feild: "orgCnt",
},
{
label: "展板总量",
num: 0,
unit: "个",
urlName: "boardsTotal",
feild: "boardCnt",
},
{
label: "互动总量",
num: 0,
unit: "次",
urlName: "interaction",
feild: "interactionCnt",
},
],
list: []
};
},
mounted() {
this.getList();
},
methods: {
getList() {
this.$https({
method: "post",
url: "tBoardStatistic/getBoardSurvey",
authType: this.backToken,
})
.then((res) => {
if (res.status == 200) {
if (res.data.resultCode == 200) {
let resData = res.data.data;
this.list = [...this.data].map((v) => {
v["num"] = resData[v["feild"]];
return v;
});
} else {
this.list = [...this.data];
}
} else {
this.list = [...this.data];
}
})
.catch((err) => {
this.$message.error(err.message);
});
},
methods: {
initData(){
const _this = this
setInterval(()=>{
let num = Math.floor(Math.random()*4)
num = num > 2 ? 3:0
_this.$set(_this.list[num],'num', ++_this.list[num]['num'] )
},3000)
}
}
}
},
};
</script>
<style lang=scss>
.dashbord-list{
width: 100%;
position: absolute;
top: -0.3rem;
ul{
display: flex;
font-size: 0;
justify-content: space-around;
li{
position: relative;
}
img{
width: 1.76rem;
}
.title{
position: absolute;
right: 0.2rem;
bottom: 0;
color: rgba(78,255,253,1);
p{
margin: 0;
padding: 0;
}
.title-name{
font-size: 0.18rem;
margin-bottom: 0.13rem;
}
.num{
font-size: 0.28rem;
}
.unit{
font-size: 0.16rem;
margin-left: 0.05rem;
}
}
.dashbord-list {
width: 100%;
position: absolute;
top: -0.3rem;
ul {
display: flex;
font-size: 0;
justify-content: space-around;
li {
position: relative;
}
img {
width: 1.76rem;
}
.title {
position: absolute;
right: 0.2rem;
bottom: 0;
color: rgba(78, 255, 253, 1);
p {
margin: 0;
padding: 0;
}
.title-name {
font-size: 0.18rem;
margin-bottom: 0.13rem;
}
.num {
font-size: 0.28rem;
}
.unit {
font-size: 0.16rem;
margin-left: 0.05rem;
}
}
}
}
</style>
<template>
<div class="demand ">
<triangle>
<slot>
<div class="common-title">
<img class="icon-title" src="/images/screen/boardsDemand.png" alt="">
<span class="title">{{title}}</span>
<img class="bg" src="/images/screen/title02_bg.png" alt="">
</div>
<div id="barDemand" @click="echartsClick"></div>
</slot>
</triangle>
</div>
<div class="demand">
<triangle>
<slot>
<div class="common-title">
<img
class="icon-title"
src="/images/screen/boardsDemand.png"
alt=""
/>
<span class="title">{{ title }}</span>
<img class="bg" src="/images/screen/title02_bg.png" alt="" />
</div>
<div id="barDemand" @click="echartsClick"></div>
</slot>
</triangle>
</div>
</template>
<script>
import triangle from '../components/slot/triangle'
export default {
name: 'demand',
data() {
return {
title:'互动频次'
}
},
components:{triangle},
mounted() {
setTimeout(()=>{
this.init()
},100)
import triangle from "../components/slot/triangle";
export default {
name: "demand",
data() {
return {
title: "互动频次",
};
},
components: { triangle },
props: {
data: {
type: Object,
default: () => {
return {};
},
},
methods: {
init(){
let option = {
tooltip: {
trigger: 'axis'
},
mounted() {
},
methods: {
init() {
let option = {
tooltip: {
trigger: "axis",
},
grid: {
top: 20,
left: "0%",
right: "2%",
bottom: "15%",
containLabel: true,
},
// dataZoom: [{
// type: "slider",
// show: true,
// bottom: '20',
// start: 0,
// end: 100,
// height: 18,
// handleStyle: {
// color: "#d3dee5",
// },
// textStyle: {
// color: "#fff",
// fontSize: "10px"
// },
// }
// ],
xAxis: {
type: "category",
boundaryGap: true, //坐标轴两边留白
data: this.data.xAxisData,
axisLabel: {
//坐标轴刻度标签的相关设置。
interval: 0,
textStyle: {
color: "#FFFFFF",
fontStyle: "normal",
fontFamily: "微软雅黑",
fontSize: 14,
},
formatter: function (value, index) {
if (value.length > 4) {
return value.slice(0, 4) + "...";
} else {
return value;
}
},
},
axisTick: {
//坐标轴刻度相关设置。
show: false,
},
grid: {
top:20,
left: '0%',
right: '2%',
bottom: '15%',
containLabel: true
axisLine: {
//坐标轴轴线相关设置
lineStyle: {
color: "rgba(98,186,255,0.6)",
type: "solid",
},
},
// dataZoom: [{
// type: "slider",
// show: true,
// bottom: '20',
// start: 0,
// end: 100,
// height: 18,
// handleStyle: {
// color: "#d3dee5",
// },
// textStyle: {
// color: "#fff",
// fontSize: "10px"
// },
// }
// ],
xAxis: {
type: 'category',
boundaryGap: true,//坐标轴两边留白
data: [
'北京市政府', '天津市政府', '呼和浩特市政府', '石家庄市政府', '合肥市政府', '哈尔滨市政府', '廊坊市政府', '临沂市政府','忻州市政府', '黑龙江市政府',
],
axisLabel: { //坐标轴刻度标签的相关设置。
interval:0,
splitLine: {
//坐标轴在 grid 区域中的分隔线。
show: false,
},
},
yAxis: [
{
type: "value",
name: "单位/次",
splitNumber: 5,
max: 100,
axisLabel: {
textStyle: {
color: '#FFFFFF',
fontStyle: 'normal',
fontFamily: '微软雅黑',
fontSize: 14,
color: "#FFFFFFFF",
fontStyle: "normal",
fontFamily: "微软雅黑",
fontSize: 12,
},
formatter: function (value, index) {
if(value.length > 4){
return value.slice(0,4)+ '...'
}else {
return value
}
}
interval: "auto",
},
axisTick:{//坐标轴刻度相关设置。
axisLine: {
show: false,
},
axisLine:{//坐标轴轴线相关设置
lineStyle:{
color:'rgba(98,186,255,0.6)',
type:'solid'
}
},
splitLine: { //坐标轴在 grid 区域中的分隔线。
axisTick: {
show: false,
}
},
yAxis: [
{
type: 'value',
name:'单位/次',
splitNumber: 5,
max:100,
axisLabel: {
textStyle: {
color: '#FFFFFFFF',
fontStyle: 'normal',
fontFamily: '微软雅黑',
fontSize: 12,
},
interval:'auto'
},
axisLine:{
show: false
},
axisTick:{
show: false
},
splitLine: {
show: true,
lineStyle: {
color: 'rgba(98,186,255,0.6)',
type:'dashed'
}
}
}
],
series: [
{
type: 'bar',
barWidth: 16, // 柱子宽度
itemStyle:{
barBorderRadius: 120, // 圆角(左上、右上、右下、左下)
},
splitLine: {
show: true,
lineStyle: {
color: "rgba(98,186,255,0.6)",
type: "dashed",
},
},
},
],
series: [
{
type: "bar",
barWidth: 16, // 柱子宽度
itemStyle: {
barBorderRadius: 120, // 圆角(左上、右上、右下、左下)
},
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
'rgba(78,255,253,1)', 'rgba(255,74,83,1)'
].map((color, offset) => ({
color,
offset
}))), // 渐变
data: [ 25, 30,40, 52, 56,63, 73, 75, 83, 85,90].reverse()
}
]
};
let echartsDiv = this.$echarts.init(document.getElementById('barDemand'))
echartsDiv.setOption(option)
},
// 点击事件
echartsClick(){
this.$emit('itemClick',{type:1,title:this.title})
}
}
}
color: new this.$echarts.graphic.LinearGradient(
0,
0,
0,
1,
["rgba(78,255,253,1)", "rgba(255,74,83,1)"].map(
(color, offset) => ({
color,
offset,
})
)
), // 渐变
data: this.data.yAxisData,
},
],
};
let echartsDiv = this.$echarts.init(document.getElementById("barDemand"));
echartsDiv.setOption(option);
},
// 点击事件
echartsClick() {
this.$emit("itemClick", { type: 1, title: this.title });
},
},
};
</script>
<style lang=scss>
#barDemand{
width: 100%;
height: calc(100% - 0.6rem);
margin-top: 0.6rem;
}
#barDemand {
width: 100%;
height: calc(100% - 0.6rem);
margin-top: 0.6rem;
}
</style>
......@@ -10,10 +10,13 @@
title:'互动频次'
}
},
props:{
data:{
type:Object,
default:()=>{return {}}
}
},
mounted() {
setTimeout(()=>{
this.init()
},100)
},
methods: {
init(){
......@@ -31,9 +34,7 @@
xAxis: {
type: 'category',
boundaryGap: true,//坐标轴两边留白
data: [
'北京市政府', '天津市政府', '呼和浩特市政府', '石家庄市政府', '合肥市政府', '哈尔滨市政府', '廊坊市政府', '临沂市政府','忻州市政府', '黑龙江市政府',
],
data: this.data.xAxisData,
axisLabel: { //坐标轴刻度标签的相关设置。
interval:0,
textStyle: {
......@@ -108,7 +109,7 @@
color,
offset
}))), // 渐变
data: [ 25, 30,40, 52, 56,63, 73, 75, 83, 85,90].reverse()
data: this.data.yAxisData
}
]
};
......
<template>
<div id="dialogTends"></div>
<div id="dialogTends"></div>
</template>
<script>
export default {
name: 'interaction',
name: "interaction",
data() {
return {
title:'展板点播趋势图'
}
title: "展板点播趋势图",
};
},
props: {
data: {
type: Object,
default: () => {
return {};
},
},
},
mounted() {
setTimeout(()=>{
this.init()
},100)
},
methods: {
init(){
init() {
let option = {
tooltip: {
trigger: 'axis'
trigger: "axis",
},
grid: {
top:20,
left: '2%',
top: 20,
left: "2%",
right: 20,
bottom: '15%',
containLabel: true
bottom: "15%",
containLabel: true,
},
dataZoom: [{
type: "slider",
show: true,
bottom: '0',
start: 0,
end: 100,
height: 18,
handleStyle: {
color: "#d3dee5",
},
textStyle: {
color: "#fff",
fontSize: "10px"
dataZoom: [
{
type: "slider",
show: true,
bottom: "0",
start: 0,
end: 100,
height: 18,
handleStyle: {
color: "#d3dee5",
},
textStyle: {
color: "#fff",
fontSize: "10px",
},
},
}],
],
xAxis: {
type: 'category',
boundaryGap: false,//坐标轴两边留白
data: [
'2021/01/01', '2021/01/02', '2021/01/03', '2021/01/04', '2021/01/05', '2021/01/06', '2021/01/07', '2021/01/08','2021/01/09', '2021/01/10',
'2021/01/11', '2021/01/12', '2021/01/13', '2021/01/14', '2021/01/15', '2021/01/16', '2021/01/17', '2021/01/18','2021/01/19', '2021/01/20',
'2021/01/21', '2021/01/22', '2021/01/23', '2021/01/24', '2021/01/25', '2021/01/26', '2021/01/27', '2021/01/28','2021/01/29', '2021/01/30','2021/01/31'],
axisLabel: { //坐标轴刻度标签的相关设置。
type: "category",
boundaryGap: false, //坐标轴两边留白
data: this.data.xAxisData,
axisLabel: {
//坐标轴刻度标签的相关设置。
textStyle: {
color: '#FFFFFF',
fontStyle: 'normal',
fontFamily: '微软雅黑',
color: "#FFFFFF",
fontStyle: "normal",
fontFamily: "微软雅黑",
fontSize: 14,
},
},
axisTick:{//坐标轴刻度相关设置。
axisTick: {
//坐标轴刻度相关设置。
show: false,
},
axisLine:{//坐标轴轴线相关设置
lineStyle:{
color:'rgba(98,186,255,0.6)',
type:'solid'
}
axisLine: {
//坐标轴轴线相关设置
lineStyle: {
color: "rgba(98,186,255,0.6)",
type: "solid",
},
},
splitLine: { //坐标轴在 grid 区域中的分隔线。
splitLine: {
//坐标轴在 grid 区域中的分隔线。
show: false,
}
},
},
yAxis: [
{
type: 'value',
type: "value",
splitNumber: 5,
max:100,
max: 100,
axisLabel: {
textStyle: {
color: '#FFFFFFFF',
fontStyle: 'normal',
fontFamily: '微软雅黑',
color: "#FFFFFFFF",
fontStyle: "normal",
fontFamily: "微软雅黑",
fontSize: 12,
},
interval:'auto'
interval: "auto",
},
axisLine:{
show: false
axisLine: {
show: false,
},
axisTick:{
show: false
axisTick: {
show: false,
},
splitLine: {
show: true,
lineStyle: {
color: 'rgba(98,186,255,0.6)',
type:'dashed'
}
}
}
color: "rgba(98,186,255,0.6)",
type: "dashed",
},
},
},
],
series: [
{
type: 'line',
smooth:true,
type: "line",
smooth: true,
itemStyle: {
normal: {
color:'rgba(255,74,83,1)',
color: "rgba(255,74,83,1)",
lineStyle: {
color: "rgba(78,255,253,1)",
width:1
width: 1,
},
areaStyle: {
color: new this.$echarts.graphic.LinearGradient(0, 1, 0, 0, [{
offset: 0,
color: 'rgba(255,74,83,0.4)'
}, {
offset: 1,
color: 'rgba(78,255,253,0.4)'
}]),
}
}
color: new this.$echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0,
color: "rgba(255,74,83,0.4)",
},
{
offset: 1,
color: "rgba(78,255,253,0.4)",
},
]),
},
},
},
data: [ 18, 19, 22, 23, 25, 26, 28, 30, 36, 38,
40, 42, 45, 44, 46, 47, 49, 52, 56, 59,
63, 66, 68, 69, 73, 75, 78, 80, 83, 85,90
]
}
]
data: this.data.yAxisData
},
],
};
let echartsDiv = this.$echarts.init(document.getElementById('dialogTends'))
echartsDiv.setOption(option)
let echartsDiv = this.$echarts.init(
document.getElementById("dialogTends")
);
echartsDiv.setOption(option);
},
}
}
},
};
</script>
<style lang="scss">
#dialogTends{
#dialogTends {
width: 100%;
height: 16vh;
margin-top: 0.6rem;
......
......@@ -3,9 +3,13 @@
<triangle>
<slot>
<div class="common-title">
<img class="icon-title" src="/images/screen/boardsDemand.png" alt="">
<span class="title">{{title}}</span>
<img class="bg" src="/images/screen/title02_bg.png" alt="">
<img
class="icon-title"
src="/images/screen/boardsDemand.png"
alt=""
/>
<span class="title">{{ title }}</span>
<img class="bg" src="/images/screen/title02_bg.png" alt="" />
</div>
<div id="tends" @click="echartsClick"></div>
</slot>
......@@ -14,33 +18,42 @@
</template>
<script>
import triangle from '../components/slot/triangle'
import triangle from "../components/slot/triangle";
export default {
name: 'interaction',
name: "interaction",
data() {
return {
title:'展板点播趋势图'
}
title: "展板点播趋势图",
};
},
components: { triangle },
props: {
data: {
type: Object,
default: () => {
return {};
},
},
},
components:{triangle},
mounted() {
setTimeout(()=>{
this.init()
},100)
// setTimeout(() => {
// this.init();
// }, 100);
},
methods: {
init(){
init() {
let option = {
tooltip: {
trigger: 'axis'
trigger: "axis",
},
grid: {
top:20,
left: '2%',
top: 20,
left: "2%",
right: 20,
bottom: '15%',
containLabel: true
bottom: "15%",
containLabel: true,
},
// dataZoom: [{
// type: "slider",
......@@ -59,105 +72,105 @@ export default {
// }
// ],
xAxis: {
type: 'category',
boundaryGap: false,//坐标轴两边留白
data: [
'2021/01/01', '2021/01/02', '2021/01/03', '2021/01/04', '2021/01/05', '2021/01/06', '2021/01/07', '2021/01/08','2021/01/09', '2021/01/10',
'2021/01/11', '2021/01/12', '2021/01/13', '2021/01/14', '2021/01/15', '2021/01/16', '2021/01/17', '2021/01/18','2021/01/19', '2021/01/20',
'2021/01/21', '2021/01/22', '2021/01/23', '2021/01/24', '2021/01/25', '2021/01/26', '2021/01/27', '2021/01/28','2021/01/29', '2021/01/30','2021/01/31'],
axisLabel: { //坐标轴刻度标签的相关设置。
type: "category",
boundaryGap: false, //坐标轴两边留白
data: this.data.xAxisData,
axisLabel: {
//坐标轴刻度标签的相关设置。
textStyle: {
color: '#FFFFFF',
fontStyle: 'normal',
fontFamily: '微软雅黑',
color: "#FFFFFF",
fontStyle: "normal",
fontFamily: "微软雅黑",
fontSize: 14,
},
},
axisTick:{//坐标轴刻度相关设置。
axisTick: {
//坐标轴刻度相关设置。
show: false,
},
axisLine:{//坐标轴轴线相关设置
lineStyle:{
color:'rgba(98,186,255,0.6)',
type:'solid'
}
axisLine: {
//坐标轴轴线相关设置
lineStyle: {
color: "rgba(98,186,255,0.6)",
type: "solid",
},
},
splitLine: { //坐标轴在 grid 区域中的分隔线。
splitLine: {
//坐标轴在 grid 区域中的分隔线。
show: false,
}
},
},
yAxis: [
{
type: 'value',
type: "value",
splitNumber: 5,
max:100,
max: 100,
axisLabel: {
textStyle: {
color: '#FFFFFFFF',
fontStyle: 'normal',
fontFamily: '微软雅黑',
color: "#FFFFFFFF",
fontStyle: "normal",
fontFamily: "微软雅黑",
fontSize: 12,
},
interval:'auto'
interval: "auto",
},
axisLine:{
show: false
axisLine: {
show: false,
},
axisTick:{
show: false
axisTick: {
show: false,
},
splitLine: {
show: true,
lineStyle: {
color: 'rgba(98,186,255,0.6)',
type:'dashed'
}
}
}
color: "rgba(98,186,255,0.6)",
type: "dashed",
},
},
},
],
series: [
{
type: 'line',
smooth:true,
type: "line",
smooth: true,
itemStyle: {
normal: {
color:'rgba(255,74,83,1)',
color: "rgba(255,74,83,1)",
lineStyle: {
color: "rgba(78,255,253,1)",
width:1
width: 1,
},
areaStyle: {
color: new this.$echarts.graphic.LinearGradient(0, 1, 0, 0, [{
offset: 0,
color: 'rgba(255,74,83,0.4)'
}, {
offset: 1,
color: 'rgba(78,255,253,0.4)'
}]),
}
}
color: new this.$echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0,
color: "rgba(255,74,83,0.4)",
},
{
offset: 1,
color: "rgba(78,255,253,0.4)",
},
]),
},
},
},
data: [ 18, 19, 22, 23, 25, 26, 28, 30, 36, 38,
40, 42, 45, 44, 46, 47, 49, 52, 56, 59,
63, 66, 68, 69, 73, 75, 78, 80, 83, 85,90
]
}
]
data: this.data.yAxisData
},
],
};
let echartsDiv = this.$echarts.init(document.getElementById('tends'))
echartsDiv.setOption(option)
let echartsDiv = this.$echarts.init(document.getElementById("tends"));
echartsDiv.setOption(option);
},
// 点击事件
echartsClick(){
this.$emit('itemClick',{type:2,title:this.title})
}
}
}
echartsClick() {
this.$emit("itemClick", { type: 2, title: this.title });
},
},
};
</script>
<style lang="scss">
#tends{
#tends {
width: 100%;
height: calc(100% - 0.6rem);
margin-top: 0.6rem;
......
<template>
<div id="mapDiv">
</div>
<div id="mapDiv"></div>
</template>
<script>
import 'echarts/map/js/china'
var dataList = [{
name: '安徽',value: 5498
}, {
name: '澳门',value: 0
}, {
name: '北京',value: 0
}, {
name: '福建',value: 4111
}, {
name: '甘肃',value: 59
}, {
name: '广东',value: 1928
}, {
name: '广西',value: 4
}, {
name: '贵州',value: 52
}, {
name: '海南',value: 1284
}, {
name: '河北',value: 3151
}, {
name: '河南',value: 3814
}, {
name: '黑龙江',value: 316
}, {
name: '湖北',value: 1724
}, {
name: '湖南',value: 33378
}, {
name: '吉林',value: 520
}, {
name: '江苏',value: 113
}, {
name: '江西',value: 961
}, {
name: '辽宁',value: 139
}, {
name: '内蒙古',value: 0
}, {
name: '宁夏',value: 60
}, {
name: '青海',value: 0
}, {
name: '山东',value: 106
}, {
name: '山西',value: 0
}, {
name: '陕西',value: 114
}, {
name: '上海',value: 1321
}, {
name: '四川',value: 7867
}, {
name: '台湾',value: 0
}, {
name: '天津',value: 1157
}, {
name: '西藏',value: 14
}, {
name: '香港',value: 0
}, {
name: '新疆',value: 115
}, {
name: '云南',value: 3811
}, {
name: '浙江',value: 0
}, {
name: '重庆',value: 886
}
];
export default {
name: 'maps',
data() {
return {
}
},
mounted() {
setTimeout(()=>{
this.init()
},100)
},
methods: {
init(){
let option = {
tooltip: {
triggerOn: "click",
formatter: function(e, t, n) {
return .5 == e.value ? e.name + ":播放量" : e.seriesName + "<br />" + e.name + ":" + e.value
import "echarts/map/js/china";
export default {
name: "maps",
data() {
return {
dataList: [],
};
},
mounted() {
this.getList();
},
methods: {
getList() {
this.$https({
method: "post",
url: "tBoardStatistic/getBoardProvincePlayTotalList",
authType: this.backToken,
})
.then((res) => {
if (res.status == 200) {
if (res.data.resultCode == 200) {
this.dataList = res.data.data;
} else {
this.dataList = [];
}
} else {
this.dataList = [];
}
this.init();
})
.catch((err) => {
this.$message.error(err.message);
this.init();
});
},
init() {
let option = {
tooltip: {
triggerOn: "click",
formatter: function (e, t, n) {
return 0.5 == e.value
? e.name + ":播放量"
: e.seriesName + "<br />" + e.name + ":" + e.value;
},
visualMap: [{
},
visualMap: [
{
dimension: 0,
left: '8%',
bottom:20,
left: "8%",
bottom: 20,
itemWidth: 16,
orient:'horizontal',
text: ['播放量', '由低到高'],
backgroundColor:'rgba(0,19,45,0.4)',
padding:16,
orient: "horizontal",
text: ["播放量", "由低到高"],
backgroundColor: "rgba(0,19,45,0.4)",
padding: 16,
textStyle: {
color: 'gba(255,255,255,1)'
color: "gba(255,255,255,1)",
},
inRange: {
color: ['rgba(161,255,255,1)', 'rgba(91,214,255,1)', 'rgba(38,157,255,1)', 'rgba(0,72,149,1)']
}
}],
geo: {
map: "china",
roam: !1,
scaleLimit: {
min: 1,
max: 2
color: [
"rgba(161,255,255,1)",
"rgba(91,214,255,1)",
"rgba(38,157,255,1)",
"rgba(0,72,149,1)",
],
},
},
],
geo: {
map: "china",
roam: !1,
scaleLimit: {
min: 1,
max: 2,
},
roam: true, //是否开启平游或缩放
scaleLimit: { //滚轮缩放的极限控制
min: 1,
max: 2
},
roam: true, //是否开启平游或缩放
scaleLimit: {
//滚轮缩放的极限控制
min: 1,
max: 2,
},
zoom: 1.2,
top: 51,
label: {
normal: {
show: !0,
fontSize: "12",
color: "#fff"
}
zoom: 1.2,
top: 51,
label: {
normal: {
show: !0,
fontSize: "12",
color: "#fff",
},
itemStyle: {
normal: {
borderColor: "rgba(0, 0, 0, 0.2)"
},
emphasis: {
areaColor: "#f2d5ad",
shadowOffsetX: 0,
shadowOffsetY: 0,
borderWidth: 0
}
},
itemStyle: {
normal: {
borderColor: "rgba(0, 0, 0, 0.2)",
},
emphasis: {
areaColor: "#f2d5ad",
shadowOffsetX: 0,
shadowOffsetY: 0,
borderWidth: 0,
},
regions: [
{
name: "南海诸岛",
itemStyle: {
// 隐藏地图
normal: {
opacity: 0, // 为 0 时不绘制该图形
}
},
label: {
show: false // 隐藏文字
}
}
]
},
series: [{
regions: [
{
name: "南海诸岛",
itemStyle: {
// 隐藏地图
normal: {
opacity: 0, // 为 0 时不绘制该图形
},
},
label: {
show: false, // 隐藏文字
},
},
],
},
series: [
{
name: "播放量",
type: "map",
geoIndex: 0,
data: dataList
}]
};
let echartsDiv = this.$echarts.init(document.getElementById('mapDiv'))
echartsDiv.setOption(option)
}
}
}
data:this.dataList,
},
],
};
let echartsDiv = this.$echarts.init(document.getElementById("mapDiv"));
echartsDiv.setOption(option);
},
},
};
</script>
<style lang=scss>
#mapDiv{
width: 100%;
height: 100%;
}
#mapDiv {
width: 100%;
height: 100%;
}
</style>
<template>
<div class="list-of-top10">
<triangle>
<slot>
<div class="list-of-top10-title common-title">
<img class="icon-title" src="/images/screen/boardsDemand.png" alt="">
<span class="title">{{title}}</span>
<img class="bg" src="/images/screen/title01_bg.png" alt="">
</div>
<div class="list-of-body">
<ul class="body-title">
<li class="f1">排名</li>
<li class="f7">展板名称</li>
<li class="f2">播放量</li>
</ul>
<div class="body-content" id="bodyContent">
<div id="con1">
<ul class="body-item" v-for="(item,index) in list">
<li class="f1">{{index%10 + 1}}</li>
<li class="f7">
<div class="title" :title="item.name">{{item.name}}</div>
</li>
<li class="f2">{{item.num}}</li>
</ul>
</div>
<div id="con2"></div>
</div>
</div>
</slot>
</triangle>
</div>
<div class="list-of-top10">
<triangle>
<slot>
<div class="list-of-top10-title common-title">
<img
class="icon-title"
src="/images/screen/boardsDemand.png"
alt=""
/>
<span class="title">{{ title }}</span>
<img class="bg" src="/images/screen/title01_bg.png" alt="" />
</div>
<div class="list-of-body">
<ul class="body-title">
<li class="f1">排名</li>
<li class="f7">展板名称</li>
<li class="f2">播放量</li>
</ul>
<div class="body-content" id="bodyContent">
<div id="con1">
<ul class="body-item" v-for="(item, index) in list" :key="index">
<li class="f1">{{ (index % 10) + 1 }}</li>
<li class="f7">
<div class="title" :title="item.boardName">{{ item.boardName }}</div>
</li>
<li class="f2">{{ item.playNumber }}</li>
</ul>
</div>
<div id="con2"></div>
</div>
</div>
</slot>
</triangle>
</div>
</template>
<script>
import triangle from '../components/slot/triangle'
export default {
name: 'top10',
data() {
return {
title:'全国2021年3月展板点播TOP10',
timer:null,
speed:50,
box:null,
con1:null,
list:[
{ name:'中国沦为半殖民地半封建社会', num:'11902' },
{ name:'抗日战争取得伟大胜利', num:'59876' },
{ name:'筹建新中国', num:'68902' },
{ name:'中华人民共和国成立', num:'368902' },
{ name:'伟大成就', num:'78902' },
{ name:'完善和落实中国特色社会主义事业总体布局', num:'58902' },
{ name:'中国特色社会主义进入新时代', num:'88902'},
{ name:'开创中国特色社会主义新局面', num:'78902'},
{ name:'社会主义文化强国建设迈出坚实步伐', num:'108902'},
{ name:'坚决打赢脱贫攻坚战', num:'188902'},
// { name:'蒋介石背叛革命 建立独裁统治', num:'20300' },
// { name:'开辟农村包围城市武装夺取政权道路', num:'50780' },
// { name:'坚持党的基本路线不动摇', num:'68902' },
// { name:'港澳回归', num:'68902' },
// { name:'让人民群众共享改革发展成果', num:'48902'},
// { name:'“一带一路”倡议推进对外开放向纵深拓展', num:'8902'},
// { name:'生态保护与修复力度持续加大', num:'7902'},
// { name:'大力践行外交为民', num:'9902'},
]
}
import triangle from "../components/slot/triangle";
import { getCurDate } from './util.time.js'
export default {
name: "top10",
data() {
return {
title: "全国2021年3月展板点播TOP10",
timer: null,
speed: 50,
box: null,
con1: null,
list: [],
};
},
components: { triangle },
mounted() {
this.title = this.getTitle();
this.getList()
},
methods: {
getTitle() {
let curTime = getCurDate();
return `全国${curTime.year}${curTime.month}月展板点播TOP10`;
},
components:{triangle},
mounted() {
this.list.sort((a,b)=>{
return b.num - a.num
})
this.list = [...this.list,...this.list]
setTimeout(()=>{
this.initScroll()
},1000)
initScroll() {
let _this = this;
this.box = document.getElementById("bodyContent");
this.con1 = document.getElementById("con1");
let con2 = document.getElementById("con2");
con2.innerHTML = this.con1.innerHTML;
this.timer = setInterval(_this.scrollUp, _this.speed);
},
methods: {
initScroll() {
let _this = this
this.box = document.getElementById("bodyContent");
this.con1 = document.getElementById("con1");
let con2 = document.getElementById("con2");
con2.innerHTML = this.con1.innerHTML;
this.timer = setInterval(_this.scrollUp, _this.speed);
},
scrollUp() {
if (this.box.scrollTop >= this.con1.scrollHeight) {
this.box.scrollTop = 0;
} else{
this.box.scrollTop++;
}
},
Ups() {
let _this = this
this.timer = setInterval(_this.scrollUp, _this.speed);
},
Stops() {
clearInterval(this.timer);
scrollUp() {
if (this.box.scrollTop >= this.con1.scrollHeight) {
this.box.scrollTop = 0;
} else {
this.box.scrollTop++;
}
},
Ups() {
let _this = this;
this.timer = setInterval(_this.scrollUp, _this.speed);
},
Stops() {
clearInterval(this.timer);
},
getList() {
let _this = this
let requestparams = {};
requestparams._index = 1;
requestparams._size = 10;
this.$https(
{
method: "post",
url: "tBoardStatistic/getBoardRankPageList",
authType: this.backToken,
},
requestparams
)
.then((res) => {
if (res.status == 200) {
if (res.data.resultCode == 200) {
this.list = res.data.data.records;
this.$nextTick(()=>{
_this.initScroll();
})
} else {
this.list = [];
}
} else {
this.list = [];
}
})
.catch((err) => {
this.$message.error(err.message);
});
}
}
},
};
</script>
<style lang=scss>
</style>
export function getCurDate() {
let date = new Date()
let year = date.getFullYear();
let month = date.getMonth() + 1;
let dates = date.getDate()
return {
year: year,
month: month > 9 ? month : `0${month}`,
date: dates > 9 ? dates : `0${dates}`
};
}
\ No newline at end of file
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const routes= [
const routes = [
{
path: '/',
redirect: '/commit',
......@@ -41,38 +41,38 @@ const routes= [
{
path: '/commit',
name: 'commit',
component:() => import('@/views/user/commit.vue')
},
{
component: () => import('@/views/user/commit.vue')
},
{
path: '/learn',
name: 'learn',
component: () => import('@/views/user/learn.vue')
},
{
},
{
path: '/admin',
name: 'admin',
component: () => import('@/views/user/admin.vue')
},
{
},
{
path: '/editPsd',
name: 'editPsd',
component: () => import('@/views/user/editPsd.vue')
},
{
path: '/learnContent',
name: 'learnContent',
component: () => import('@/views/user/components/learnContent.vue')
},
{
path: '/learnDetail',
name: 'learnDetail',
component: () => import('@/views/user/components/learnDetail.vue')
},
{
path: '/adminInfo',
name: 'adminInfo',
component: () => import('@/views/user/components/adminInfo.vue')
},
},
{
path: '/learnContent',
name: 'learnContent',
component: () => import('@/views/user/components/learnContent.vue')
},
{
path: '/learnDetail',
name: 'learnDetail',
component: () => import('@/views/user/components/learnDetail.vue')
},
{
path: '/adminInfo',
name: 'adminInfo',
component: () => import('@/views/user/components/adminInfo.vue')
},
]
const router = new VueRouter({
......@@ -81,12 +81,17 @@ const router = new VueRouter({
})
router.beforeEach((to, from, next) => {
let user = localStorage.getItem("token");
if (!user && to.path !=='/login' && to.path !=='/success') { // 通过vuex state获取当前的token是否存在
next({
path: '/login',
})
}else {
if (to.path !== '/screen') {
if (!user && to.path !== '/login' && to.path !== '/success') { // 通过vuex state获取当前的token是否存在
next({
path: '/login',
})
} else {
next();
}
} else {
next();
}
})
export default router
export default router
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment