车场大数据大屏第二版
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.
 
 
 
 
 

1036 lines
29 KiB

<template>
<div class="brand-container">
<div class="wrap">
<header>
<div class="showTime">
<span class="time">{{ nowTime }}</span>
<span class="date">
<span>{{ date }}</span>
<span>{{ week }}</span>
</span>
</div>
<h2>智慧云停车大数据平台</h2>
<div class="welcome">欢迎使用本系统</div>
</header>
<section class="mainbox">
<div class="item left">
<!-- <div class="panel">
<h2>业务范围</h2>
<business />
<div class="panel-footer"></div>
</div> -->
<div class="left-top">
<div class="topBg">今日收费TOP5</div>
<table class="table">
<thead class="thead">
<td class="td">排行</td>
<td class="td">停车场名称</td>
<td class="td">收费金额</td>
</thead>
<tbody class="tbody">
<tr class="tr" v-for="(item, index) in rankData" :key="index">
<td class="td" v-if="index == 0"><img src="/img/img3.png" alt=""></td>
<td class="td" v-if="index == 1"><img src="/img/img4.png" alt=""></td>
<td class="td" v-if="index == 2"><img src="/img/img5.png" alt=""></td>
<td class="td" v-if="index == 3"><img src="/img/img6.png" alt=""></td>
<td class="td" v-if="index == 4"><img src="/img/img7.png" alt=""></td>
<td class="td">{{ item.parkingInfoName }}</td>
<td class="td">{{ item.totalAmount }} 元</td>
</tr>
</tbody>
</table>
</div>
<div class="left-top">
<div class="topBg">
支付统计
</div>
<talent :chart-data="payData" />
<div class="panel-footer"></div>
</div>
<div class="left-top">
<div class="topBg">
收费车辆统计
</div>
<business :chart-data="payDataCar" />
<div class="panel-footer"></div>
</div>
</div>
<div class="item center">
<div class="resume">
<div class="resume-hd">
<span>今日交易笔数</span>
<span>今日交易金额</span>
</div>
<div class="resume-bd">
<countTo :startVal="startNumber" :endVal="endNumber" :prefix="numberPrefix" :duration="1500" separator="">
</countTo>
<countTo :startVal="startAmount" :endVal="endAmount" :prefix="amountPrefix" :duration="1500" separator="">
</countTo>
</div>
</div>
<div class="map">
<div class="chart" id="chart_map"></div>
<div class="map1"></div>
<div class="map2"></div>
<div class="map3"></div>
</div>
<div class="parkInfo">
<seamless :listData="realTimeInOutRecord" />
</div>
</div>
<div class="item right">
<div class="left-top">
<div class="topBg2">
24小时车流统计
</div>
<scrollArc :chart-data="todayTraffic" />
<div class="panel-footer"></div>
</div>
<div class="left-top">
<div class="topBg">车辆使用统计</div>
<div class="carFlex">
<div class="let">
<div class="item">
<p class="p1">总车位(个)</p>
<p class="p2">{{ useCarCon.parkingPlaceTotalNums }}</p>
</div>
<div class="item">
<p class="p1">周转率</p>
<p class="p2"> <span v-if="useCarCon.parkingPlaceTurnover">{{ parseInt(useCarCon.parkingPlaceTurnover * 100)}}%</span>
<span v-else>0%</span>
</p>
</div>
</div>
<ringPie :chart-data="useCarCon" />
<div class="rig">
<div class="item">
<p class="p1">已使用车位(个)</p>
<p class="p2">{{ useCarCon.parkingPlaceUseNums }}</p>
</div>
<div class="item">
<p class="p1">剩余车位(个)</p>
<p class="p2">{{ useCarCon.parkingPlaceSurplusNums }}</p>
</div>
</div>
</div>
<div class="panel-footer"></div>
</div>
<div class="left-top">
<div class="topBg">
24小时车位使用统计
</div>
<szBar :chart-data="todayCarUse" />
<div class="panel-footer"></div>
</div>
</div>
</section>
</div>
</div>
</template>
<script>
import { BiApi } from "@/api/form";
import "@/assets/js/flexible";
import "@/assets/js/china";
import countTo from "vue-count-to";
const paramsArr = window.location.href.split('?')
let authCode = ''
if (paramsArr.length > 1) {
authCode = paramsArr[1].split('=')[1]; //获取授权号
}
export default {
name: "Brand",
components: {
countTo,
},
data() {
return {
// 车场排行数据
rankData: [],
// 支付统计数据
payData: {},
// 收费车辆统计
payDataCar: {},
// 开放统计-24小时车流统计
todayTraffic: {},
// 开放统计-24小时车辆使用统计
todayCarUse: [],
// 开放统计-车辆使用统计
useCarCon: {},
nowTime: '',
week: '',
date: '',
timer: null,
startNumber: 0,
startAmount: 0,
endNumber: 0,
endAmount: 0,
numberPrefix: '00000', // 前面补零
amountPrefix: '00000', // 前面补零
realTimeInOutRecord: [],//实时进出信息
heartTimes: 0, //心跳次数
geoCoordMap: {},
XAData: [
],
XNData: [
[{ name: "长沙" }, { name: "西宁", value: 100 }],
[{ name: "长沙" }, { name: "拉萨", value: 100 }],
[{ name: "长沙" }, { name: "哈尔滨", value: 100 }],
[{ name: "长沙" }, { name: "成都", value: 100 }],
[{ name: "长沙" }, { name: "重庆", value: 100 }],
],
YCData: [
[{ name: "北京" }, { name: "长沙", value: 100 }],
[{ name: "北京" }, { name: "贵阳", value: 100 }],
[{ name: "北京" }, { name: "杭州", value: 100 }],
],
};
},
computed: {},
created() {
},
mounted() {
if (authCode && typeof +authCode === 'number') {
// this.$showLoading();
this.heart();
setTimeout(() => {
this.getEchart();
}, 800);
// loading
// setTimeout(() => {
// this.$hideLoading();
// }, 900);
} else {
// console.log('授权码为空', authCode);
alert('授权码为空,请从系统调用页面!')
this.$router.push({
path: '/404'
})
return
}
},
methods: {
/**
* 格式化时钟函数
*/
formatNowTimes() {
let dayjs = this.dayjs();
let weeks = ["日", "一", "二", "三", "四", "五", "六"];
this.week = `星期${weeks[dayjs.day()]}`;
this.date = dayjs.format("YYYY-MM-DD");
this.nowTime = dayjs.format("HH:mm:ss");
},
/**
* 心跳回调函数,获取数据的函数可以放这里
*/
heartCallBack() {
this.heartTimes += 1;
this.formatNowTimes(); //放外面就每一秒执行一次
if (this.heartTimes === 1 || this.heartTimes % 10 === 0) { // 首次加载和每10秒执行一次
this.getData();
}
},
getData() {
// 今日交易金额-笔数数据
BiApi.getTodayTrade({ authCode }).then((res) => {
// console.log(res);
if (res && res.code === 200) {
const { totalAmount, totalNum } = res.data
this.startNumber = this.endNumber;
this.startAmount = this.endAmount;
this.endNumber = +totalNum || 0;
this.endAmount = +totalAmount || 0;
this.numberPrefix = '00000'.substr(0, (6 - `${this.endNumber}`.length));
this.amountPrefix = '00000'.substr(0, (6 - `${this.endAmount}`.length));
}
});
// 实时进出信息
BiApi.getRealTimeInOutRecord({ authCode, pageNum: 1, pageSize: 10 }).then((res) => {
if (res && res.code === 200) {
this.realTimeInOutRecord = res.rows
}
});
// 开放统计-车场排行
BiApi.getParkingRanking({ authCode }).then((res) => {
if (res && res.code === 200) this.rankData = res.data
})
// 开放统计-支付统计
BiApi.paymentStatistics({ authCode }).then((res) => {
if (res && res.code === 200) this.payData = res.data
})
// 开放统计-收费车辆统计
BiApi.amountCartStatistics({ authCode }).then((res) => {
if (res && res.code === 200) this.payDataCar = res.data
})
// 开放统计-24小时车流统计
BiApi.todayTrafficStatistics({ authCode }).then((res) => {
if (res && res.code === 200) this.todayTraffic = res.data
})
// 开放统计-24小时车辆使用统计
BiApi.todayCarUseStatistics({ authCode }).then((res) => {
if (res && res.code === 200) this.todayCarUse = res.data
})
BiApi.useCarStatistics({ authCode }).then((res) => {
if (res && res.code === 200) this.useCarCon = res.data
})
BiApi.parkingCarNum({ authCode }).then((res) => {
this.geoCoordMap = {
上海: [121.4648, 31.2891],
东莞: [113.8953, 22.901],
东营: [118.7073, 37.5513],
中山: [113.4229, 22.478],
临汾: [111.4783, 36.1615],
临沂: [118.3118, 35.2936],
丹东: [124.541, 40.4242],
丽水: [119.5642, 28.1854],
乌鲁木齐: [87.9236, 43.5883],
佛山: [112.8955, 23.1097],
保定: [115.0488, 39.0948],
兰州: [103.5901, 36.3043],
包头: [110.3467, 41.4899],
北京: [116.4551, 40.2539],
北海: [109.314, 21.6211],
南京: [118.8062, 31.9208],
南宁: [108.479, 23.1152],
南昌: [116.0046, 28.6633],
南通: [121.1023, 32.1625],
厦门: [118.1689, 24.6478],
台州: [121.1353, 28.6688],
合肥: [117.29, 32.0581],
呼和浩特: [111.4124, 40.4901],
咸阳: [108.4131, 34.8706],
哈尔滨: [127.9688, 45.368],
唐山: [118.4766, 39.6826],
嘉兴: [120.9155, 30.6354],
大同: [113.7854, 39.8035],
大连: [122.2229, 39.4409],
天津: [117.4219, 39.4189],
太原: [112.3352, 37.9413],
威海: [121.9482, 37.1393],
宁波: [121.5967, 29.6466],
宝鸡: [107.1826, 34.3433],
宿迁: [118.5535, 33.7775],
常州: [119.4543, 31.5582],
广州: [113.5107, 23.2196],
廊坊: [116.521, 39.0509],
延安: [109.1052, 36.4252],
张家口: [115.1477, 40.8527],
徐州: [117.5208, 34.3268],
德州: [116.6858, 37.2107],
惠州: [114.6204, 23.1647],
成都: [103.9526, 30.7617],
扬州: [119.4653, 32.8162],
承德: [117.5757, 41.4075],
拉萨: [91.1865, 30.1465],
无锡: [120.3442, 31.5527],
日照: [119.2786, 35.5023],
昆明: [102.9199, 25.4663],
杭州: [119.5313, 29.8773],
枣庄: [117.323, 34.8926],
柳州: [109.3799, 24.9774],
株洲: [113.5327, 27.0319],
武汉: [114.3896, 30.6628],
汕头: [117.1692, 23.3405],
江门: [112.6318, 22.1484],
沈阳: [123.1238, 42.1216],
沧州: [116.8286, 38.2104],
河源: [114.917, 23.9722],
泉州: [118.3228, 25.1147],
泰安: [117.0264, 36.0516],
泰州: [120.0586, 32.5525],
济南: [117.1582, 36.8701],
济宁: [116.8286, 35.3375],
海口: [110.3893, 19.8516],
淄博: [118.0371, 36.6064],
淮安: [118.927, 33.4039],
深圳: [114.5435, 22.5439],
清远: [112.9175, 24.3292],
温州: [120.498, 27.8119],
渭南: [109.7864, 35.0299],
湖州: [119.8608, 30.7782],
湘潭: [112.5439, 27.7075],
滨州: [117.8174, 37.4963],
潍坊: [119.0918, 36.524],
烟台: [120.7397, 37.5128],
玉溪: [101.9312, 23.8898],
珠海: [113.7305, 22.1155],
盐城: [120.2234, 33.5577],
盘锦: [121.9482, 41.0449],
石家庄: [114.4995, 38.1006],
福州: [119.4543, 25.9222],
秦皇岛: [119.2126, 40.0232],
绍兴: [120.564, 29.7565],
聊城: [115.9167, 36.4032],
肇庆: [112.1265, 23.5822],
舟山: [122.2559, 30.2234],
苏州: [120.6519, 31.3989],
莱芜: [117.6526, 36.2714],
菏泽: [115.6201, 35.2057],
营口: [122.4316, 40.4297],
葫芦岛: [120.1575, 40.578],
衡水: [115.8838, 37.7161],
衢州: [118.6853, 28.8666],
西宁: [101.4038, 36.8207],
西安: [109.1162, 34.2004],
贵阳: [106.6992, 26.7682],
连云港: [119.1248, 34.552],
邢台: [114.8071, 37.2821],
邯郸: [114.4775, 36.535],
郑州: [113.4668, 34.6234],
鄂尔多斯: [108.9734, 39.2487],
重庆: [107.7539, 30.1904],
金华: [120.0037, 29.1028],
铜川: [109.0393, 35.1947],
银川: [106.3586, 38.1775],
镇江: [119.4763, 31.9702],
长春: [125.8154, 44.2584],
长沙: [113.0823, 28.2568],
长治: [112.8625, 36.4746],
阳泉: [113.4778, 38.0951],
青岛: [120.4651, 36.3373],
韶关: [113.7964, 24.7028],
};
// this.useCarCon = res.data
for (var i = 0; i < res.data.length; i++) {
// 宝安体育馆停车场: [113.884791, 22.560888],
this.geoCoordMap[res.data[i].lngY, res.data[i].parkName] = [res.data[i].lngY, res.data[i].latX]
this.XAData.push(
[{ name: "长沙" }, { name: res.data[i].parkName, value: res.data[i].useCarNum }]
)
}
// console.log(this.geoCoordMap)
})
},
/**
* 心跳函数,每秒执行一次
*/
heart() {
this.clear();
this.heartCallBack() // 首次加载
this.timer = setInterval(this.heartCallBack, 1000);
},
clear() {
clearInterval(this.timer);
this.timer = null;
this.heartTimes = 0;
},
convertData(data) {
// 地图数据转换
let res = [];
for (let i = 0; i < data.length; i++) {
let dataItem = data[i];
let fromCoord = this.geoCoordMap[dataItem[0].name];
let toCoord = this.geoCoordMap[dataItem[1].name];
if (fromCoord && toCoord) {
res.push({
fromName: dataItem[0].name,
toName: dataItem[1].name,
coords: [fromCoord, toCoord],
value: dataItem[1].value,
});
}
}
return res;
},
getEchart() {
// 初始化地图数据
// eslint-disable-next-line no-undef
let myChart = echarts.init(document.getElementById("chart_map"));
// let planePath =
// "path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z";
let color = ["#fff", "#fff", "#fff"]; //航线的颜色
let series = [];
[
["长沙", this.XAData],
// ["长沙", this.XNData],
// ["北京", this.YCData],
].forEach((item, i) => {
series.push(
// {
// name: item[0] + " Top3",
// type: "lines",
// zlevel: 1,
// effect: {
// show: true,
// period: 6,
// trailLength: 0.7,
// color: "red", //arrow箭头的颜色
// symbolSize: 3
// },
// // lineStyle: {
// // normal: {
// // color: color[i],
// // width: 0,
// // curveness: 0.2
// // }
// // },
// data: this.convertData(item[1])
// },
// {
// name: item[0] + " Top3",
// type: "lines",
// zlevel: 2,
// symbol: ["none", "arrow"],
// symbolSize: 10,
// effect: {
// show: true,
// period: 6,
// trailLength: 0,
// symbol: planePath,
// symbolSize: 15
// },
// lineStyle: {
// normal: {
// color: color[i],
// width: 1,
// opacity: 0.6,
// curveness: 0.2
// }
// },
// data: this.convertData(item[1])
// },
{
name: item[0] + " Top3",
type: "effectScatter",
coordinateSystem: "geo",
zlevel: 2,
rippleEffect: {
brushType: "stroke",
},
label: {
normal: {
show: true,
position: "right",
formatter: "{b}",
},
},
symbolSize: (val) => {
return val[2] / 8;
},
itemStyle: {
normal: {
color: color[i],
},
emphasis: {
areaColor: "#2B91B7",
},
},
data: item[1].map((dataItem) => {
return {
name: dataItem[1].name,
value: this.geoCoordMap[dataItem[1].name].concat([
dataItem[1].value,
]),
};
}),
}
);
});
let option = {
tooltip: {
trigger: "item",
// eslint-disable-next-line no-unused-vars
formatter: (params, ticket, callback) => {
if (params.seriesType == "effectScatter") {
return "车位数量:" + params.data.name + " " + params.data.value[2] + "个";
} else if (params.seriesType == "lines") {
return (
params.data.fromName +
">" +
params.data.toName +
"<br />" +
params.data.value
);
} else {
return params.name;
}
},
},
geo: {
map: "china",
label: {
emphasis: {
show: true,
color: "#fff",
},
},
roam: false,
// 放大我们的地图
zoom: 1,
itemStyle: {
normal: {
areaColor: "rgba(43, 196, 243, 0.42)",
borderColor: "rgba(43, 196, 243, 1)",
borderWidth: 1,
},
emphasis: {
areaColor: "#2B91B7",
},
},
},
series: series,
};
myChart.setOption(option, true);
// eslint-disable-next-line no-undef
var dataList = echarts.getMap("china").geoJson.features;
// console.log("dataList:", dataList);
// 鼠标事件
myChart.on("click", function (res) {
console.log("click city:", res.name);
dataList.forEach((element) => {
if (element.properties.name == res.name) {
console.log("city code:", element.id);
}
});
});
window.addEventListener("resize", () => {
myChart.resize();
});
},
clickGoNext() {
},
},
beforeDestroy() {
this.clear();
},
};
</script>
<style lang="scss" scoped>
.carFlex {
display: flex;
color: #fff;
justify-content: center;
align-items: center;
.item {
display: flex;
flex-direction: column;
justify-content: center;
width: 2rem;
text-align: center;
height: 1.3rem;
background: url(/img/img12.png) no-repeat;
background-size: contain;
margin-top: 0.3rem;
.p1 {
font-size: 0.2rem;
margin-bottom: 0.1rem;
}
.p2 {
font-size: 0.3rem;
}
}
}
.topBg {
height: 0.7rem;
background: url(/img/img1.png) no-repeat;
background-size: contain;
display: flex;
align-items: center;
padding-left: 0.5rem;
color: #aeceff;
font-size: 0.21rem;
}
.topBg2 {
height: 0.7rem;
background: url(/img/img11.png) no-repeat;
background-size: contain;
display: flex;
align-items: center;
padding-left: 0.5rem;
color: #aeceff;
font-size: 0.21rem;
}
.left-top {
height: 3.5rem;
position: relative;
background: url(/img/img2.png) no-repeat;
background-size: cover;
margin-bottom: 0.5rem;
}
.tbody .tr:nth-child(odd) {
background: #06184b;
}
//奇数行
.table {
width: 100%;
border-spacing: 0;
border-color: transparent;
.thead {
background: #061131;
width: 100%;
height: 0.575rem;
line-height: 0.575rem;
font-size: 0.2rem;
.td {
color: #6fa8ff;
text-align: center;
border: none;
font-size: 0.2rem;
}
}
.tbody {
.td {
color: #fff;
text-align: center;
border: none;
font-size: 0.14rem;
img {
width: 0.4rem;
display: block;
margin: 0 auto;
height: 0.4rem;
}
}
.tr {
height: 0.5rem;
line-height: 0.5rem;
}
}
}
.brand-container {
position: absolute;
width: 100%;
height: 100%;
background: #000;
.wrap {
background: url(../assets/img/brand/bg.png) no-repeat #000;
background-size: cover;
header {
position: relative;
height: 1.35rem;
background: url(../assets/img/brand/head_bg.png) no-repeat top center;
background-size: 100% 100%;
h2 {
height: 1.175rem;
color: #fff;
font-size: 0.475rem;
text-align: center;
line-height: 1.175rem;
letter-spacing: 0.05rem;
padding-top: 0.175rem;
font-weight: 400;
}
.showTime {
position: absolute;
left: 0.625rem;
top: 0.45rem;
color: #fff;
display: flex;
.time {
top: 0.45rem;
font-size: 0.4rem;
margin-right: 0.18rem;
}
.date {
top: 0.45rem;
span {
line-height: 0.45rem;
font-size: 0.2rem;
padding-right: 0.1rem;
}
}
}
.welcome {
position: absolute;
right: 0.625rem;
top: 0.45rem;
height: 0.35rem;
color: #fff;
font-size: 0.25rem;
text-align: center;
line-height: 0.35rem;
}
}
.mainbox {
min-width: 1024px;
max-width: 1920px;
padding: 0.125rem 0.125rem 0;
display: flex;
.item {
flex: 3;
&.center {
flex: 5;
overflow: hidden;
.resume {
.resume-hd {
display: flex;
justify-content: space-around;
span {
display: block;
box-sizing: border-box;
width: 3.535rem;
background: url(../assets/img/brand/resume-hd-item.png) no-repeat;
height: 0.3125rem;
line-height: 0.5rem;
text-align: left;
font-size: 0.1625rem;
color: rgba(255, 255, 255, 0.9);
padding-left: 0.3rem;
}
}
.resume-bd {
display: flex;
justify-content: space-around;
span {
margin-top: 0.25rem;
// box-shadow: 0rem 0.02rem 0.08rem rgba(38, 228, 245, 0.7);
width: 3.535rem;
text-align: right;
height: 0.725rem;
line-height: 0.725rem;
font-size: 0.45rem;
color: #fff;
font-family: "LCD";
letter-spacing: 0.28rem;
text-shadow: 0.02rem 0.02rem 0.04rem #000;
box-sizing: border-box;
padding-left: .1rem;
background-image: url(../assets/img/brand/numberBg.png);
background-repeat: repeat-y space;
background-size: 0.6rem 0.725rem
}
}
}
}
%map-style {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 6.475rem;
height: 6.475rem;
background: url(../assets/img/brand/map.png) no-repeat;
background-size: 100% 100%;
opacity: 0.3;
}
.map {
position: relative;
height: 8rem;
.chart {
position: absolute;
top: -0.5rem;
left: 0;
z-index: 5;
height: 8rem;
width: 100%;
}
.map1 {
@extend %map-style;
}
.map2 {
@extend %map-style;
width: 8.0375rem;
height: 8.0375rem;
background-image: url(../assets/img/brand/lbx.png);
opacity: 0.6;
-webkit-animation: rotate 15s linear infinite;
animation: rotate 15s linear infinite;
z-index: 2;
}
.map3 {
@extend %map-style;
width: 7.075rem;
height: 7.075rem;
background-image: url(../assets/img/brand/jt.png);
-webkit-animation: rotate1 10s linear infinite;
animation: rotate1 10s linear infinite;
}
}
.panel {
position: relative;
height: 3.875rem;
border: 1px solid rgba(25, 186, 139, 0.17);
background: rgba(255, 255, 255, 0.04) url(../assets/img/brand/line.png);
padding: 0 0.1875rem 0;
margin-bottom: 0.1875rem;
&:before {
position: absolute;
top: 0;
left: 0;
content: "";
width: 10px;
height: 10px;
border-top: 2px solid #02a6b5;
border-left: 2px solid #02a6b5;
}
&:after {
position: absolute;
top: 0;
right: 0;
content: "";
width: 10px;
height: 10px;
border-top: 2px solid #02a6b5;
border-right: 2px solid #02a6b5;
}
.panel-footer {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
&:before {
position: absolute;
bottom: 0;
left: 0;
content: "";
width: 10px;
height: 10px;
border-bottom: 2px solid #02a6b5;
border-left: 2px solid #02a6b5;
}
&:after {
position: absolute;
bottom: 0;
right: 0;
content: "";
width: 10px;
height: 10px;
border-bottom: 2px solid #02a6b5;
border-right: 2px solid #02a6b5;
}
}
h2 {
height: 0.6rem;
line-height: 0.6rem;
text-align: center;
color: #fff;
font-size: 0.225rem;
font-weight: 400;
a {
margin: 0 0.1875rem;
color: #fff;
text-decoration: none;
}
}
.chart {
height: 3rem;
}
}
}
}
}
}
@-webkit-keyframes rotate {
from {
transform: translate(-50%, -50%) rotate(0deg);
}
to {
transform: translate(-50%, -50%) rotate(360deg);
}
}
@keyframes rotate {
from {
transform: translate(-50%, -50%) rotate(0deg);
}
to {
transform: translate(-50%, -50%) rotate(360deg);
}
}
@-webkit-keyframes rotate1 {
from {
transform: translate(-50%, -50%) rotate(0deg);
}
to {
transform: translate(-50%, -50%) rotate(-360deg);
}
}
@keyframes rotate1 {
from {
transform: translate(-50%, -50%) rotate(0deg);
}
to {
transform: translate(-50%, -50%) rotate(-360deg);
}
}
@media screen and (max-width: 1024px) {
html {
font-size: 42px !important;
}
}
@media screen and (min-width: 1920) {
html {
font-size: 80px !important;
}
}
</style>