Browse Source

新增实时进出信息页面

master
[liang] 3 years ago
parent
commit
acf5e6ec22
  1. 44
      README.md
  2. BIN
      src/assets/img/brand/parkIngo.png
  3. 382
      src/components/seamless/index.vue
  4. 17
      src/views/Brand.vue
  5. 1
      vue.config.js

44
README.md

@ -1,38 +1,3 @@
# 前言
* 一个基于Vue前端框架和第三方图表库echarts构建的可视化大数据平台,通过vue项目构建、指令的灵活运用、组件封装、组件之间通信,使内部图表组件库可实现自由替换和组合。
* 项目中部分前端库采用外部CDN引入,可以减少打包文件体积,加快页面渲染。
* 可视化数据大屏展示对前端性能要求高,建议使用谷歌浏览器查看或开发,屏幕尺寸为1920px宽和1080px高是最佳效果。
* 目前制作数据可视化大屏,前端比较流行的第三方库有:Echarts(百度),AntV(阿里),Highcharts(国外公司),D3.js(国外公司)。
* 如果感觉还不错的话,老铁们是不是赏个★Star鼓励一哈,后续会持续更新和优化,也期待大家的交流。
[在线效果演示](https://jackchen0120.github.io/vueDataV/)
## 学习教程分上下篇
* [(上)Vue+Echarts构建可视化大数据平台实战项目分享](https://juejin.cn/post/6844904158181457933)
* [(下)Vue+Echarts构建大数据可视化酷炫展示公司品牌实战项目分享](https://juejin.cn/post/6845166890449371149)
# 效果截图
## 登录界面
<img src="https://github.com/jackchen0120/vueDataV/blob/master/public/img/login_0.png" width="900" alt="登录界面" />
<img src="https://github.com/jackchen0120/vueDataV/blob/master/public/img/login_1.png" width="900" alt="登录界面" />
<img src="https://github.com/jackchen0120/vueDataV/blob/master/public/img/login_2.png" width="900" alt="登录界面" />
## 首页酷屏统计图
<img src="https://github.com/jackchen0120/vueDataV/blob/master/public/img/dataV_1.png" width="900" alt="首页酷屏统计图" />
<img src="https://github.com/jackchen0120/vueDataV/blob/master/public/img/dataV_2.png" width="900" alt="首页酷屏统计图" />
<img src="https://github.com/jackchen0120/vueDataV/blob/master/public/img/dataV_3.png" width="900" alt="首页酷屏统计图" />
<img src="https://github.com/jackchen0120/vueDataV/blob/master/public/img/dataV_4.png" width="900" alt="首页酷屏统计图" />
## 公司品牌介绍
<img src="https://github.com/jackchen0120/vueDataV/blob/master/public/img/brand.png" width="900" alt="炫酷展示公司品牌" />
# 项目架构
```
@ -123,10 +88,8 @@
* 炫酷展示公司品牌
# 下载安装依赖
```
git clone https://github.com/jackchen0120/vueDataV.git
cd vueDataV
npm install 或 yarn
npm install
```
## 开发模式
@ -140,6 +103,3 @@ npm run serve
npm run build
```
#### 获取更多项目实战经验及各种源码资源,请关注作者公众号:懒人码农
<img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly91c2VyLWdvbGQtY2RuLnhpdHUuaW8vMjAyMC81LzEzLzE3MjBlM2U0ZmQ5NDZiZDQ?x-oss-process=image/format,png" width="430" alt="公众号二维码" />

BIN
src/assets/img/brand/parkIngo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

382
src/components/seamless/index.vue

@ -1,201 +1,207 @@
<!--
描述: 新闻无缝滚动
作者: Jack Chen
日期: 2020-04-18
-->
<template>
<div class="wrap-container sn-container">
<div class="sn-content">
<div class="sn-title">新闻无缝滚动</div>
<div class="sn-body">
<div class="wrap-container">
<div class="table">
<table border="0" cellpadding="0" cellspacing="0" class="table-header">
<tbody>
<tr>
<td width="60%">
<span> </span>
</td>
<td width="20%">
<span> </span>
</td>
<td width="20%">
<span> </span>
</td>
</tr>
</tbody>
</table>
<vue-seamless-scroll :data="listData" class="seamless-warp" :class-option="optionSetting">
<table border="0" cellpadding="0" cellspacing="0" class="item">
<tbody>
<tr v-for="(item, index) in listData" :key="index">
<td width="100%" class="title">
<span>{{ item.title }}</span>
</td>
<td width="20%">
<span>{{ item.date }}</span>
</td>
<td width="20%">
<span :class="{colorRed: item.hot > 4999, colorOrange: item.hot < 10}">{{ item.hot }}</span>
</td>
</tr>
</tbody>
</table>
</vue-seamless-scroll>
</div>
</div>
</div>
</div>
</div>
<div class="sn">
<div class="sn-title">实时进出信息</div>
<div class="sn-body">
<div class="table-header">
<span style="width: 2rem">时间</span>
<span style="width: 3rem">停车场</span>
<span style="width: 1rem">出入口</span>
<span style="width: 1rem">车辆类型</span>
<span style="width: 1.2rem">车牌号</span>
<span style="width: 0.8rem">收费金额</span>
<span style="width: 0.8rem">状态</span>
</div>
<vue-seamless-scroll :data="listData" class="seamless-warp" :class-option="optionSetting">
<div class="line" v-for="(item, index) in listData" :key="index"
:class="item.accessType === '入场' ? 'in' : ''">
<span style="width: 2rem">{{ item.createTime }}</span>
<span style="width: 3rem" class='title'>{{ item.parkName }}</span>
<span style="width: 1rem">{{ item.entranceChannel }}</span>
<span style="width: 1rem">{{ item.carType }}</span>
<span style="width: 1.2rem">{{ item.plateNumber }}</span>
<span style="width: 0.8rem">{{ item.orderRealPaidAmout }}</span>
<span style="width: 0.8rem">{{ item.accessType }}</span>
</div>
</vue-seamless-scroll>
</div>
</div>
</template>
<script>
import vueSeamlessScroll from 'vue-seamless-scroll'
export default {
name: "seamless",
components: {
vueSeamlessScroll
},
data() {
return {
listData: [{
title: '钱花哪了?一图带你读懂年轻人的消费观',
date: '2020-05-05',
hot: 2306
}, {
title: '“五一”假期前三天国内旅游收入超350亿元',
date: '2020-05-02',
hot: 5689
}, {
title: '滴滴、美团、哈啰交战,本地生活会是终局?',
date: '2020-05-02',
hot: 9
}, {
title: '“互联网+文化”逆势上行文娱消费云端真精彩',
date: '2020-04-25',
hot: 288
}, {
title: '乐观还是悲观?巴菲特是个现实主义者!',
date: '2020-04-21',
hot: 158
}, {
title: 'B站的后浪,会把爱优腾拍在沙滩上吗?',
date: '2020-04-20',
hot: 889
}, {
title: '华为如何做投资的:先给两亿订单一年上市',
date: '2020-04-01',
hot: 5800
}, {
title: '马斯克:特斯拉股价太高了,我要卖豪宅',
date: '2020-03-25',
hot: 6
}, {
title: '人民日报海外版:云模式巧解“就业难”',
date: '2020-03-16',
hot: 88
}, {
title: '刚刚港股"崩了":狂跌近1000点!',
date: '2020-03-12',
hot: 88
}, {
title: '个人健康信息码国家标准发布',
date: '2020-02-28',
hot: 5
}, {
title: '传软银国际裁员约10%两名管理合伙人离职',
date: '2020-02-15',
hot: 258
}, {
title: '27万个岗位:区块链、人工智能等专场招聘',
date: '2020-02-10',
hot: 198
}, {
title: '一季度电商发展势头迅猛农村电商破1300万家',
date: '2020-02-08',
hot: 19
}]
}
},
computed: {
  optionSetting () {
return {
step: 0.5, //
limitMoveNum: 2, // this.dataList.length
hoverStop: true, // stop
direction: 1, // 0 1 2 3
// autoPlay: false,
openWatch: true, // dom
singleHeight: 0, // (0) direction => 0/1
singleWidth: 0, // (0) direction => 2/3
waitTime: 1000 // (1000ms)
}
}
},
mounted() {
},
methods: {
},
beforeDestroy() {
}
name: "seamless",
components: {
vueSeamlessScroll
},
data() {
return {
rowColor: '/',
listData: [{
"accessType": "出场",
"carType": "临时车",
"parkName": "深圳宝安体育馆停车场",
"createTime": "2022-08-03 18:01:59",
"plateNumber": "粤C3868Z",
"entranceChannel": "前岗入口",
"orderRealPaidAmout": 0
},
{
"accessType": "出场",
"carType": "临时车",
"parkName": "深圳宝安体育馆停车场",
"createTime": "2022-08-03 18:01:54",
"plateNumber": "粤C2R537",
"entranceChannel": "后岗入口",
"orderRealPaidAmout": 0
},
{
"accessType": "入场",
"carType": "临时车",
"parkName": "深圳宝安体育馆停车场",
"createTime": "2022-08-03 18:01:30",
"plateNumber": "粤C11R24",
"entranceChannel": "后岗入口",
"orderRealPaidAmout": 0.0
},
{
"accessType": "出场",
"carType": "临时车",
"parkName": "深圳宝安体育馆停车场",
"createTime": "2022-08-03 18:00:32",
"plateNumber": "粤CSP065",
"entranceChannel": "前岗入口",
"orderRealPaidAmout": 0
},
{
"accessType": "入场",
"carType": "临时车",
"parkName": "深圳宝安体育馆停车场",
"createTime": "2022-08-03 18:00:19",
"plateNumber": "浙G16N8Z",
"entranceChannel": "前岗入口",
"orderRealPaidAmout": 0.0
},
{
"accessType": "出场",
"carType": "临时车",
"parkName": "深圳宝安体育馆停车场",
"createTime": "2022-08-03 17:58:55",
"plateNumber": "粤CYG167",
"entranceChannel": "后岗入口",
"orderRealPaidAmout": 0
},
{
"accessType": "入场",
"carType": "临时车",
"parkName": "深圳宝安体育馆停车场",
"createTime": "2022-08-03 17:58:38",
"plateNumber": "粤CYG167",
"entranceChannel": "后岗入口",
"orderRealPaidAmout": 6.0
},
{
"accessType": "入场",
"carType": "免费车",
"parkName": "深圳宝安体育馆停车场",
"createTime": "2022-08-03 17:57:55",
"plateNumber": "粤C5N501",
"entranceChannel": "前岗入口",
"orderRealPaidAmout": 0.0
},
]
}
},
computed: {
optionSetting() {
return {
step: 0.5, //
limitMoveNum: 2, // this.dataList.length
hoverStop: true, // stop
direction: 1, // 0 1 2 3
// autoPlay: false,
openWatch: true, // dom
singleHeight: 0, // (0) direction => 0/1
singleWidth: 0, // (0) direction => 2/3
waitTime: 1000 // (1000ms)
}
}
},
mounted() {
},
methods: {
},
beforeDestroy() {
}
};
</script>
<style lang="scss" scoped>
.sn-container {
left: 1370px;
top: 110px;
%table-style {
width: 100%;
height: 35px;
table-layout: fixed;
tr {
td {
padding: 10px 5px;
text-align: center;
background-color: transparent;
white-space: nowrap;
overflow: hidden;
color: #E2E5FF;
font-size: 14px;
}
}
}
.table {
.table-header {
@extend %table-style;
}
.seamless-warp {
height: 400px;
overflow: hidden;
visibility: visible;
.colorRed {
color: #FF4669;
}
.colorOrange {
color: #FFC956;
}
.item {
height: auto;
@extend %table-style;
tr {
td {
&.title {
text-overflow: ellipsis;
display: inline-block;
}
}
}
}
}
}
.sn {
position: absolute;
overflow: hidden;
display: block;
width: 9.8rem;
height: 3.55rem;
left: 7.1rem;
top: 9.5375rem;
// top: 3.5375rem;
.sn-title {
box-sizing: border-box;
padding-left: 0.5rem;
height: 0.7rem;
line-height: 0.7rem;
font-size: 0.25rem;
color: #fff;
background: url(../../assets/img/brand/parkIngo.png);
}
.sn-body {
color: #6FA8FF;
background-color: rgba($color: #0d2464, $alpha: 0.2);
.table-header {
height: 0.6rem;
line-height: 0.6rem;
span {
font-size: 0.2rem;
text-align: center;
display: inline-block;
}
}
.seamless-warp {
color: #EF8C62;
height: 400px;
overflow: hidden;
visibility: visible;
.line {
&:nth-child(2n) {
background: rgba(14, 75, 255, 0.1);
}
span {
height: 0.45rem;
line-height: 0.45rem;
font-size: 0.175rem;
text-align: center;
display: inline-block;
}
}
.in {
color: #1BDB7F;
}
}
}
}
</style>

17
src/views/Brand.vue

@ -90,8 +90,8 @@
<span>今日交易金额</span>
</div>
<div class="resume-bd">
<countTo :startVal='startVal' :endVal='82388888' :duration='1500' separator=""></countTo>
<countTo :startVal='startVal' :endVal='65488888' :duration='1500' separator=""></countTo>
<countTo :startVal='startVal' :endVal='8388888' :duration='1500' separator=""></countTo>
<countTo :startVal='startVal' :endVal='6488888' :duration='1500' separator=""></countTo>
</div>
</div>
@ -101,6 +101,10 @@
<div class="map2"></div>
<div class="map3"></div>
</div>
<div class="parkInfo">
<seamless />
</div>
</div>
<div class="item right">
@ -567,7 +571,6 @@ export default {
.wrap {
background: url(../assets/img/brand/bg.png) no-repeat #000;
background-size: cover;
line-height: 1.15;
header {
position: relative;
@ -625,7 +628,7 @@ export default {
.mainbox {
min-width: 1024px;
max-width: 1920px;
padding: 0.47rem 0.125rem 0;
padding: 0.125rem 0.125rem 0;
display: flex;
.item {
@ -633,7 +636,6 @@ export default {
&.center {
flex: 5;
margin: 0 0.125rem 0.1rem;
overflow: hidden;
.resume {
@ -663,7 +665,6 @@ export default {
span {
margin-top: .25rem;
// border: .03rem solid rgba(63, 124, 163, 0.7);
box-shadow: 0rem .02rem .08rem rgba(38, 228, 245, 0.7);
width: 3.535rem;
text-align: center;
@ -696,14 +697,14 @@ export default {
.map {
position: relative;
height: 10.125rem;
height: 8.4rem;
.chart {
position: absolute;
top: 0;
left: 0;
z-index: 5;
height: 10.125rem;
height: 8.4rem;
width: 100%;
}

1
vue.config.js

@ -4,6 +4,7 @@ module.exports = {
productionSourceMap: false, // 生产环境是否生成 sourceMap 文件
lintOnSave: false,
devServer: {
open: true,
port: 8081,
// proxy: {
// "/api": {

Loading…
Cancel
Save