安农大数据看板完成

dev_202412 V2.3.4
yujialong 1 year ago
parent 34ef75bb65
commit 8b4062f917
  1. 15
      public/index.html
  2. BIN
      src/assets/img/screenShow/1.jpg
  3. BIN
      src/assets/img/screenShow/10.jpg
  4. BIN
      src/assets/img/screenShow/2.jpg
  5. BIN
      src/assets/img/screenShow/3.jpg
  6. BIN
      src/assets/img/screenShow/4.jpg
  7. BIN
      src/assets/img/screenShow/5.jpg
  8. BIN
      src/assets/img/screenShow/6.jpg
  9. BIN
      src/assets/img/screenShow/7.jpg
  10. BIN
      src/assets/img/screenShow/8.jpg
  11. BIN
      src/assets/img/screenShow/9.jpg
  12. 712
      src/pages/screenShow/index.vue
  13. 1
      src/pages/screenShow/mapData.json
  14. 7
      src/setting.js
  15. 5
      src/styles/page/screenShow.scss

@ -3,15 +3,24 @@
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="keywords" content="智信云,教学,教育,在线编程" />
<meta name="keywords" content="职站,教学,教育,在线编程" />
<meta
name="description"
content="智信云是一家为高等院校提供实验课程数字化服务的国家级高新技术企业。以区块链、大数据、人工智能等前沿技术在行业领域的运用为支撑,将新技术与经济与管理人才培养深度融合,面向全国高等院校的经济、金融、大数据应用等相关专业提供科研创新、金课建设、实验实训教学软件、实践教学以及学生就业培训为一体的专业建设咨询与技术支持服务。"
content="职站是一款辅助院校教师开展虚拟仿真实验教学的智能云实践平台。平台采用了大数据,云计算等技术,为学校搭建信息化平台提供了基础,可助力院校实现教学智能化升级。职站平台设计遵循着极简、高效的理念,可帮助老师轻松开展实验教学,并支持自定义发布考核和练习,智能统计和检验学生的日常实训练习效果;老师还可以通过可视化图表报告直观查看学生实训成绩,评估教学成果。"
/>
<meta name="baidu-site-verification" content="code-TRfXe8xIkJ" />
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<link rel="stylesheet" href="//at.alicdn.com/t/font_830376_qzecyukz0s.css" />
<title>智信云</title>
<title>职站——为院校打造一站式虚拟仿真实训教学数智云平台</title>
<script>
var _hmt = _hmt || [];
(function () {
var hm = document.createElement('script');
hm.src = 'https://hm.baidu.com/hm.js?72fbad6ebf1d6c705117fe8fe0686a0e';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</head>
<body>
<noscript>

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

@ -109,7 +109,7 @@
</div>
<div class="middle">
<div class="item"
style="height: 620px">
style="height: 500px">
<!--左上边框-->
<div class="t_line_box">
<i class="t_l_line"></i>
@ -142,53 +142,26 @@
您的浏览器不支持 video 标签
</video>
<div class="stat-mask"></div>
<div class="stat-wrap">
<p class="num num1">{{ overview.numberOfPeopleStudy }}</p>
<p class="num num2">{{ overview.courseStudyFrequency }}</p>
<p class="num num3">{{ overview.courseStudyTime }}</p>
<p class="num num4">{{ overview.numberOfExperiments }}</p>
<p class="num num5">{{ overview.cumulativeExperimentTime }}</p>
</div>
<div class="active-number">
<p class="val">{{ overview.currentActivePeople }}</p>
<p class="name">当前活跃人数</p>
</div>
<div id="chart4"
class="chart"
style="height: 100%"></div>
</div>
<div class="item"
style="height: 440px;">
<!--左上边框-->
<div class="t_line_box">
<i class="t_l_line"></i>
<i class="l_t_line"></i>
</div>
<!--右上边框-->
<div class="t_line_box">
<i class="t_r_line"></i>
<i class="r_t_line"></i>
</div>
<!--左下边框-->
<div class="t_line_box">
<i class="l_b_line"></i>
<i class="b_l_line"></i>
</div>
<!--右下边框-->
<div class="t_line_box">
<i class="r_b_line"></i>
<i class="b_r_line"></i>
</div>
style="height: 562px;">
<div class="main_title">
<img src="@/assets/img/screen/t_3.png"
alt="">
绿色食品十大产业图谱
</div>
<!-- <el-carousel height="150px">
<el-carousel class="pics"
height="560px">
<el-carousel-item v-for="item in 10"
:key="item">
<img class="pic"
:src="require('@/assets/img/screenShow/' + item + '.jpg')"
alt="">
</el-carousel-item>
</el-carousel> -->
</el-carousel>
</div>
</div>
<div class="right">
@ -284,6 +257,7 @@
import Util from '@/libs/util'
import * as echarts from 'echarts'
import Setting from '@/setting'
import MapData from './mapData.json'
export default {
data () {
return {
@ -317,7 +291,7 @@ export default {
this.renderChart1()
this.renderChart2()
this.getData()
// this.renderChart()
this.renderMap()
},
methods: {
@ -388,7 +362,7 @@ export default {
endValue: 5 // 6
}
],
color: ['#4388ff', '#f0231c', '#8c2bff', '#2defe2', '#eeac12', '#12c23c'],
color: ['#4388ff', '#e9cc7d', '#8c2bff', '#2defe2', '#e59f6f', '#7baaff'],
xAxis: [
{
type: 'category',
@ -726,6 +700,7 @@ export default {
color: '#fff'
}
},
color: ['#4388ff', '#e9cc7d', '#fb9c80', '#2defe2', '#e59f6f', '#7baaff'],
series: [
{
name: '产品登记数(个)',
@ -1172,590 +1147,111 @@ export default {
this.animateChart(chart, option1, this.provinces)
}, 1500)
},
//
async renderChart () {
const animateChart = (chart, option, data, num = 6) => {
//
if (option.dataZoom[0].endValue == data.length) {
option.dataZoom[0].endValue = num
option.dataZoom[0].startValue = 0
}
else {
option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1
option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1
}
chart.setOption(option)
//
animateChart (chart, option, data, num = 6) {
//
if (option.dataZoom[0].endValue == data.length) {
option.dataZoom[0].endValue = num
option.dataZoom[0].startValue = 0
}
let chart = {}
//
const year = new Date().getFullYear()
const times = []
//
for (let i = 0; i < 6; i++) {
times.push({
startTime: (year - i) + '-02-01',
endTime: (year - i) + '-08-31'
})
times.push({
startTime: (year - i) + '-09-01',
endTime: (year - i + 1) + '-01-31'
})
else {
option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1
option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1
}
this.$post(this.api.studentGradeDistribution, times).then(({ data }) => {
const times = []
const data1 = []
const data2 = []
const data3 = []
const data4 = []
data.map(e => {
times.push(e.time)
data1.push(e.yellow.replace('%', ''))
data2.push(e.green.replace('%', ''))
data3.push(e.blue.replace('%', ''))
data4.push(e.pink.replace('%', ''))
})
const option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
legend: {
top: '10%',
textStyle: {
color: '#fff'
},
},
grid: {
left: '3%',
right: '4%',
top: '30%',
bottom: '3%',
containLabel: true
},
dataZoom: [//
{
xAxisIndex: 0,//X0
show: false,//使
type: 'slider', // dataZoom slider dataZoom
startValue: 0, //
endValue: 5 // 6
}
],
color: ['#4388ff', '#44cfff', '#8c2bff', '#2defe2'],
xAxis: [
{
type: 'category',
data: times,
axisLine: {
lineStyle: {
color: '#fff'
}
},
axisLabel: {
interval: 0,
textStyle: {
color: '#fff',
},
rotate: 60
},
}
],
yAxis: [
{
type: 'value',
axisLine: {
lineStyle: {
color: '#fff'
}
},
axisLabel: {
margin: 10,
textStyle: {
fontSize: 12,
color: '#fff'
},
formatter: '{value}%'
},
}
],
series: [
{
name: '60以下',
type: 'bar',
stack: 'Ad',
emphasis: {
focus: 'series'
},
data: data1
},
{
name: '60-69',
type: 'bar',
stack: 'Ad',
emphasis: {
focus: 'series'
},
data: data2
},
{
name: '70-89',
type: 'bar',
stack: 'Ad',
emphasis: {
focus: 'series'
},
data: data3
},
{
name: '90-100',
type: 'bar',
stack: 'Ad',
emphasis: {
focus: 'series'
},
data: data4
},
]
}
chart[0] = echarts.init(document.querySelector(`#chart2`))
chart[0].setOption(option)
setInterval(function () {
animateChart(chart[0], option, data, 5)
}, 3000)
}).catch(res => { })
//
const colors = [
{
color1: '#0184d5',
color2: 'rgba(1, 132, 213, 0.4)'
},
{
color1: '#00d887',
color2: 'rgba(0, 216, 135, 0.4)'
},
{
color1: '#e71872',
color2: 'rgba(40, 147, 189, 0.4)'
},
{
color1: '#f9d437',
color2: 'rgba(50, 234, 144, 0.4)'
},
{
color1: '#912892',
color2: 'rgba(31, 24, 153, 0.4)'
},
{
color1: '#f21259',
color2: 'rgba(40, 176, 97, 0.4)'
},
{
color1: '#7343fe',
color2: 'rgba(50, 240, 140, 0.4)'
},
{
color1: '#ea7321',
color2: 'rgba(65, 94, 123, 0.4)'
},
{
color1: '#934ea2',
color2: 'rgba(32, 123, 223, 0.4)'
},
{
color1: '#672313',
color2: 'rgba(156, 40, 100, 0.4)'
},
{
color1: '#0184d5',
color2: 'rgba(60, 132, 60, 0.4)'
},
{
color1: '#00d887',
color2: 'rgba(60, 42, 244, 0.4)'
},
{
color1: '#e71872',
color2: 'rgba(90, 147, 180, 0.4)'
},
{
color1: '#f9d437',
color2: 'rgba(150, 20, 144, 0.4)'
},
]
//
const cousrseRes = await this.$post(this.api.listOfGoods, {
pageNum: 1,
pageSize: 1000,
sort: 0,
isShelves: 0,
hotTag: 1,
})
if (cousrseRes) {
const courseList = cousrseRes.page.records
const ids = courseList.map(e => e.mallId)
times.map(e => {
e.mallId = ids
})
const courseData = {}
this.$post(this.api.studentAssessSchievement, times).then(({ data }) => {
const xData = data.map(e => e.time)
const len = xData.length
courseList.map(e => {
courseData[e.productName] = new Array(len).fill(0, 0)
})
const series = []
data.map((e, i) => {
e.assesScoreRespList.map(n => {
const item = courseList.find(j => j.mallId == n.mallId)
if (item) {
const name = item.productName
if (courseData[name]) {
courseData[name][i] = +n.avgScore
}
}
})
})
let index = 0
// series
for (const i in courseData) {
series.push({
name: i,
type: 'line',
// smooth: true,
symbol: 'circle',
symbolSize: 5,
lineStyle: {
normal: {
color: colors[index].color1,
width: 2
}
},
itemStyle: {
normal: {
color: colors[index].color1,
borderWidth: 8
}
},
data: courseData[i]
})
++index
if (index > 9) index = 0
chart.setOption(option)
},
//
renderMap () {
echarts.registerMap('AH', MapData);
const option = {
visualMap: {
// min: 1111,
// max: 333332,
// left: '50%',
// bottom: 20,
symbolSize: 300,
realtime: false,
calculable: true,
inRange: {
color: ['#6395ed', '#f3a64b', '#6b5de9']
}
const option = {
tooltip: {
trigger: 'axis',
axisPointer: {
lineStyle: {
color: '#dddc6b'
}
}
},
legend: {
top: '8%',
data: courseList.map(e => e.productName),
textStyle: {
color: 'rgba(255,255,255,.5)',
fontSize: '12',
}
},
dataZoom: [//
{
xAxisIndex: 0,//X0
show: false,//使
type: 'slider', // dataZoom slider dataZoom
startValue: 0, //
endValue: 6 // 6
}
],
grid: {
left: '30',
top: '45%',
right: '10',
bottom: '5%',
containLabel: true
},
xAxis: {
type: 'category',
boundaryGap: false,
axisLabel: {
interval: 0,
textStyle: {
color: "rgba(255,255,255,.9)",
fontSize: 12,
},
},
axisLine: {
lineStyle: {
color: 'rgba(255,255,255,.2)'
}
},
data: xData
},
yAxis: [{
type: 'value',
name: '平均分',
min: 0,
max: 100,
interval: 10,
splitNumber: 10,
nameTextStyle: {
color: '#fff'
},
axisTick: { show: false },
axisLine: {
lineStyle: {
color: 'rgba(255,255,255,.1)'
}
},
axisLabel: {
textStyle: {
color: "rgba(255,255,255,.9)",
fontSize: 12,
},
},
splitLine: {
lineStyle: {
color: 'rgba(255,255,255,.1)'
}
}
}],
series
},
// geo: {
// map: 'AH',
// roam: false,
// zoom: 1.1,
// label: {
// emphasis: {
// show: false
// }
// },
// itemStyle: {
// borderColor: 'transparent',
// areaColor: 'transparent'
// }
// },
title: {
text: '2021年绿色食品十大产业全产业链产值(亿元) ',
top: 10,
left: 10,
textStyle: {
color: '#fff'
}
chart[1] = echarts.init(document.querySelector(`#chart5`))
chart[1].setOption(option)
// setInterval(function () {
// animateChart(chart[1], option, times)
// }, 5000)
}).catch(res => { })
}
// 线
const date = new Date()
date.setMonth(date.getMonth() + 1)
const months = []
// 12
for (let i = 0; i < 12; i++) {
date.setMonth(date.getMonth() - 1)
const pre = date.getFullYear() + '-' + Util.formateTime(date.getMonth() + 1) + '-'
months.push({
startTime: pre + '01',
endTime: pre + new Date(new Date(date.getFullYear(), date.getMonth() + 1, 1).getTime() - 1000 * 60 * 60 * 24).getDate()
})
}
this.$post(this.api.monthlyAverageOnlineTime, months).then(({ data }) => {
const option = {
title: {
text: ''
},
tooltip: {
trigger: 'axis'
},
xAxis: {
type: 'category',
axisLine: {
lineStyle: {
color: '#fff'
}
},
axisLabel: {
interval: 0,
textStyle: {
color: '#fff',
},
rotate: 60
},
data: data.map(e => e.time)
},
dataZoom: [//
{
xAxisIndex: 0,//X0
show: false,//使
type: 'slider', // dataZoom slider dataZoom
startValue: 0, //
endValue: 7 // 6
}
],
yAxis: {
type: 'value',
axisLine: {
lineStyle: {
color: '#fff'
}
},
axisLabel: {
margin: 10,
textStyle: {
fontSize: 12,
color: '#fff'
},
formatter: '{value}'
},
tooltip: {},
series: [
{
name: '广西地图',
type: 'map',
top: 60,
map: 'AH',// registerMap''
roam: true,
zoom: 1.1,
label: {
show: true
},
},
color: ['#4BF0FF', '#44AFF0', '#4E82FF', '#584BFF', '#BE4DFF', '#F845F1'],
legend: {
data: ['月人均在线学习时长情况'],
textStyle: {
color: '#fff'
},
top: '8%'
},
grid: {
top: '20%',
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
series: [
{
data: data.map(e => e.averageDuration),
type: 'bar',
barWidth: 11,
itemStyle: {
normal: {
barBorderRadius: [10, 10, 0, 0],
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
offset: 0,
color: "#4033F9"
}, {
offset: 0.8,
color: "#516fff"
}], false),
shadowColor: 'rgba(0, 0, 0, 0.1)',
}
},
showBackground: true,
backgroundStyle: {
color: 'rgba(180, 180, 180, 0.2)'
}
}
]
}
chart[2] = echarts.init(document.querySelector(`#chart3`))
chart[2].setOption(option)
setInterval(function () {
animateChart(chart[2], option, data)
}, 1500)
}).catch(res => { })
//
this.$get(this.api.platformLoginStatistics, {
platform: Setting.platformId
}).then(({ data }) => {
const option = {
tooltip: {
trigger: 'axis',
},
grid: {
left: '12%',
right: '5%',
top: '15%',
bottom: '30%'
},
dataZoom: [//
{
xAxisIndex: 0,//X0
show: false,//使
type: 'slider', // dataZoom slider dataZoom
startValue: 0, //
endValue: 3 // 6
}
],
xAxis: [{
type: 'category',
axisLine: {
lineStyle: {
color: '#57617B'
}
},
axisLabel: {
interval: 0,
textStyle: {
color: '#fff',
},
rotate: 60
},
data: data.map(e => e.today)
}],
yAxis: [{
type: 'value',
axisTick: {
show: false
},
axisLine: {
lineStyle: {
color: '#57617B'
}
//
itemStyle: {
areaColor: 'rgba(78, 130, 255, 1)', // visualMapareaColor
borderWidth: 0.5, // 线 0
borderColor: '#000', // color
borderType: 'solid' // 线 'solid', 'dashed', 'dotted'
},
axisLabel: {
margin: 10,
textStyle: {
fontSize: 12,
color: '#fff'
//
emphasis: {
label: {
show: true, //
color: '#fff' // 'auto'
},
formatter: '{value}'
},
splitLine: {
show: true,
lineStyle: {
type: 'dashed',
color: ['#25CEF3']
}
}
}],
series: [{
name: '平台登录人数',
type: 'bar',
barWidth: 8,
itemStyle: {
normal: {
barBorderRadius: [10, 10, 0, 0],
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
offset: 0,
color: "#009AFD"
}, {
offset: 0.8,
color: "#33DAFF"
}], false),
shadowColor: 'rgba(0, 0, 0, 0.1)',
itemStyle: {
areaColor: '#c5aff9' //
}
},
data: data.map(e => e.quantity)
}
]
}
chart[3] = echarts.init(document.querySelector(`#chart4`))
chart[3].setOption(option)
setInterval(function () {
animateChart(chart[3], option, data, 3)
}, 1500)
}).catch(res => { })
// resizechart
window.addEventListener('resize', () => {
this.examChart && this.examChart.resize()
for (let i = 0; i < 4; i++) {
chart[i] && chart[i].resize()
}
})
},
//
animateChart (chart, option, data, num = 6) {
//
if (option.dataZoom[0].endValue == data.length) {
option.dataZoom[0].endValue = num
option.dataZoom[0].startValue = 0
}
else {
option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1
option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1
data: [
{ name: '合肥市', value: 787.40 },
{ name: '淮北市', value: 236.25 },
{ name: '宿州市', value: 865.93 },
{ name: '亳州市', value: 1225.56 },
{ name: '蚌埠市', value: 765.68 },
{ name: '阜阳市', value: 1007.61 },
{ name: '淮南市', value: 482.81 },
{ name: '滁州市', value: 871.85 },
{ name: '六安市', value: 1232.31 },
{ name: '马鞍山市', value: 288.30 },
{ name: '芜湖市', value: 508.64 },
{ name: '宣城市', value: 792.02 },
{ name: '铜陵市', value: 142.32 },
{ name: '池州市', value: 279.26 },
{ name: '安庆市', value: 757.88 },
{ name: '黄山市', value: 555.09 },
]
},
]
}
chart.setOption(option)
echarts.init(document.querySelector(`#chart4`)).setOption(option)
},
//
scrollTable () {

File diff suppressed because one or more lines are too long

@ -8,13 +8,16 @@ const isCH = url.includes("124.71.12.62"); //是否巢湖版本
const isPro = url.includes("occupationlab.com"); //是否职站生产
const isTest = url.includes('121.37.12.51'); //是否中台测试服
const isZxy = url.includes('izhixinyun'); //是否是智信云
// const isZxy = true //是否是智信云
const isSq = url.includes('10.20.100.204'); // 商丘
let zcPath = `120.78.139.126:8879` // 众筹
let systemPath = `${location.origin}/banksystem`
let sandPath = `${location.origin}/sandbox` // 沙盘地址
let host = `${location.origin}/`
// let host = `https://izhixinyun.com/`
let uploadURL = `${location.origin}/`
// let uploadURL = `https://izhixinyun.com/`
let title = isZxy ?
'智信云' :
(isHh || isCH) ?
@ -32,7 +35,7 @@ if (isPro) {
uploadURL = `http://121.37.12.51/`
host = "http://121.37.12.51/"; // 测试服
// host = 'https://www.occupationlab.com/' // 正式服
host = "http://192.168.31.217:9000/"; // 榕
// host = "http://192.168.31.217:9000/"; // 榕
// host = "http://192.168.31.51:9000/"; // 赓
} else if (isSq) {
zcPath = `10.20.100.204:8883`
@ -68,7 +71,7 @@ const Setting = {
/**
* 路由白名单
* */
whiteList: ['/login', '/index/list', '/index/zxy', '/product', '/cityPartner/list', '/devPlatform/list', '/log/list', '/touristMatch/list', '/touristMatch/details', '/touristMatch/noticeDetail', '/preCourse/list', '/preCourse/details', '/preInfo/list', '/preInfo/details', '/screen'],
whiteList: ['/login', '/index/list', '/index/zxy', '/product', '/cityPartner/list', '/devPlatform/list', '/log/list', '/touristMatch/list', '/touristMatch/details', '/touristMatch/noticeDetail', '/preCourse/list', '/preCourse/details', '/preInfo/list', '/preInfo/details', '/screen', '/screenShow'],
/**
* 平台列表
* */

@ -302,11 +302,10 @@ $height: 344px;
.left,
.right {
min-width: 300px;
width: 24%;
width: 30%;
}
.middle {
width: 913px;
min-width: 913px;
min-width: calc((40% - 60px));
margin: 0 30px;
overflow: hidden;
}

Loading…
Cancel
Save