dev_202412
yujialong 10 months ago
parent 4ea4165395
commit 359e02bd47
  1. 8
      public/index.html
  2. 5
      src/layouts/header/index.vue
  3. 417
      src/pages/course/list/index.vue
  4. 2
      src/pages/station/preview/index.vue
  5. 4
      src/setting.js

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

@ -17,6 +17,7 @@
<el-radio-group v-if="isDev && !$store.state.layout.isMobile" class="ip" v-model="ip" @change="ipChange"> <el-radio-group v-if="isDev && !$store.state.layout.isMobile" class="ip" v-model="ip" @change="ipChange">
<el-radio :label="0">刘榕ip</el-radio> <el-radio :label="0">刘榕ip</el-radio>
<el-radio :label="1">陈赓ip</el-radio> <el-radio :label="1">陈赓ip</el-radio>
<el-radio :label="2">测试服ip</el-radio>
</el-radio-group> </el-radio-group>
<!-- pc端 --> <!-- pc端 -->
<div v-if="!$store.state.layout.isMobile" class="inner"> <div v-if="!$store.state.layout.isMobile" class="inner">
@ -442,7 +443,7 @@ $height: 64px;
.ip { .ip {
position: fixed; position: fixed;
top: 25px; top: 8px;
left: 200px; left: 126px;
} }
</style> </style>

@ -3,39 +3,27 @@
<div class="search"> <div class="search">
<h6>精品课程精彩讲解</h6> <h6>精品课程精彩讲解</h6>
<div class="input"> <div class="input">
<img src="@/assets/img/search.png" <img src="@/assets/img/search.png" alt="">
alt=""> <input type="text" placeholder="请输入课程名称" v-model="keyword">
<input type="text"
placeholder="请输入课程名称"
v-model="keyword">
</div> </div>
</div> </div>
<div class="tabs"> <div class="tabs">
<a class="item" <a class="item" v-for="(item, i) in tabs" :key="i" :class="{ active: item.id == active }"
v-for="(item, i) in tabs" @click="tabChange(item)">{{ item.name }}</a>
:key="i"
:class="{active: item.id == active}"
@click="tabChange(item)">{{ item.name }}</a>
</div> </div>
<!-- 课程筛选 --> <!-- 课程筛选 -->
<div class="filter"> <div class="filter">
<div class="wrap-inner" <div class="wrap-inner" style="padding-bottom: 0">
style="padding-bottom: 0">
<dl v-if="active != 2"> <dl v-if="active != 2">
<dt>课程分类</dt> <dt>课程分类</dt>
<dd :class="{active: form.categoryId === ''}" <dd :class="{ active: form.categoryId === '' }" @click="changeCategory('')">不限</dd>
@click="changeCategory('')">不限</dd> <dd v-for="(item, i) in classificationList" :key="i" :class="{ active: form.categoryId === item.id }"
<dd v-for="(item, i) in classificationList" @click="changeCategory(item.id)">{{ item.classificationName }}</dd>
:key="i"
:class="{active: form.categoryId === item.id}"
@click="changeCategory(item.id)">{{ item.classificationName }}</dd>
</dl> </dl>
<dl> <dl>
<dt>课程类型</dt> <dt>课程类型</dt>
<dd v-for="(item, i) in types" <dd v-for="(item, i) in types" :key="i" :class="{ active: form.courseType === item.id }"
:key="i" @click="changeType(item.id)">{{ item.name }}</dd>
:class="{active: form.courseType === item.id}"
@click="changeType(item.id)">{{ item.name }}</dd>
</dl> </dl>
</div> </div>
</div> </div>
@ -44,48 +32,36 @@
<div class="course-bg"></div> <div class="course-bg"></div>
<template v-if="list.length"> <template v-if="list.length">
<ul> <ul>
<li v-for="(item, index) in list" <li v-for="(item, index) in list" :key="index" @click="toDetail(item.id)">
:key="index" <img :src="item.coverUrl" alt="" />
@click="toDetail(item.id)">
<img :src="item.coverUrl"
alt="" />
<div class="title">{{ item.courseName }}</div> <div class="title">{{ item.courseName }}</div>
<div class="desc" <div class="desc" :class="{ ie: core.isIE(), ie: core.isFirefox() }" v-html="item.courseIntroduction"></div>
:class="{ie: core.isIE(),ie: core.isFirefox()}"
v-html="item.courseIntroduction"></div>
<div class="metas"> <div class="metas">
<div class="meta"> <div class="meta">
<i class="el-icon-view"></i> <i class="el-icon-view"></i>
{{ item.pageviews }} {{ item.pageviews }}
</div> </div>
<div class="meta collect" <div class="meta collect" @click.stop="collect(item)">
@click.stop="collect(item)">
<i :class="item.collectionStatus ? 'el-icon-star-on' : 'el-icon-star-off'"></i> <i :class="item.collectionStatus ? 'el-icon-star-on' : 'el-icon-star-off'"></i>
</div> </div>
<div class="meta"> <div class="meta">
<i class="el-icon-user"></i> <i class="el-icon-user"></i>
{{ item.schoolName }} {{ item.schoolName }}
</div> </div>
<span v-if="item.courseType == 0" <span v-if="item.courseType == 0" class="type">{{ item.courseType == 1 ? '付费' : '免费' }}</span>
class="type">{{ item.courseType == 1 ? '付费' : '免费'}}</span>
</div> </div>
</li> </li>
</ul> </ul>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background layout="total, prev, pager, next" :total="total"
layout="total, prev, pager, next" @current-change="handleCurrentChange" :current-page="page" :page-size="pageSize">
:total="total"
@current-change="handleCurrentChange"
:current-page="page"
:page-size="pageSize">
</el-pagination> </el-pagination>
</div> </div>
</template> </template>
<template v-else> <template v-else>
<div class="empty"> <div class="empty">
<div> <div>
<img src="@/assets/img/none.png" <img src="@/assets/img/none.png" alt="">
alt="">
<p>暂无课程</p> <p>暂无课程</p>
</div> </div>
</div> </div>
@ -250,183 +226,210 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.search { .search {
position: relative;
padding: 100px 0 130px;
text-align: center;
background: url(../../../assets/img/course-bg2.png) (73px 50px)/250px auto no-repeat,
url(../../../assets/img/course-bg4.png) (top left) / auto no-repeat,
url(../../../assets/img/course-bg3.png) (top right) / auto no-repeat,
url(../../../assets/img/course-bg1.png) 0 0/100% 100% no-repeat;
h6 {
margin-bottom: 25px;
font-size: 26px;
color: #fff;
}
.input {
position: relative; position: relative;
padding: 100px 0 130px; width: 700px;
margin: 0 auto;
}
img {
position: absolute;
top: 19px;
left: 14px;
}
input {
width: 100%;
height: 62px;
line-height: 62px;
padding: 0 50px;
font-size: 18px;
color: #333;
border: 0;
outline: none;
border-radius: 4px;
}
}
.tabs {
display: flex;
justify-content: center;
align-items: center;
.item {
padding: 0 10px;
margin-right: 16px;
font-size: 17px;
text-align: center; text-align: center;
background: url(../../../assets/img/course-bg2.png) (73px 50px)/250px auto no-repeat, color: #333;
url(../../../assets/img/course-bg4.png) (top left) / auto no-repeat, line-height: 50px;
url(../../../assets/img/course-bg3.png) (top right) / auto no-repeat, border-bottom: 3px solid transparent;
url(../../../assets/img/course-bg1.png) 0 0/100% 100% no-repeat; cursor: pointer;
h6 {
margin-bottom: 25px; &.active {
font-size: 26px; color: #007eff;
color: #fff; border-color: #007eff;
}
.input {
position: relative;
width: 700px;
margin: 0 auto;
}
img {
position: absolute;
top: 19px;
left: 14px;
}
input {
width: 100%;
height: 62px;
line-height: 62px;
padding: 0 50px;
font-size: 18px;
color: #333;
border: 0;
outline: none;
border-radius: 4px;
} }
}
} }
.tabs {
display: flex; .wrap {
justify-content: center; .filter {
align-items: center; width: 100%;
.item { background-color: #fff;
padding: 0 10px;
margin-right: 16px; dl {
font-size: 17px; display: flex;
text-align: center; align-items: center;
margin: 20px 0;
dt {
color: #333; color: #333;
line-height: 50px; font-size: 16px;
border-bottom: 3px solid transparent; font-weight: 600;
white-space: nowrap;
}
dd {
padding: 5px 15px;
color: #6a6a6a;
font-size: 16px;
white-space: nowrap;
cursor: pointer; cursor: pointer;
border-radius: 4px;
&.active { &.active {
color: #007eff; color: $main-color;
border-color: #007eff; background-color: #e6f0ff;
} }
}
} }
} }
.wrap {
.filter { .courses {
width: 100%; position: relative;
background-color: #fff; padding: 10px 0 20px;
dl { background: url(../../../assets/img/course3.png) 0 0 / auto no-repeat;
display: flex;
align-items: center; .course-bg {
margin: 20px 0; position: absolute;
dt { top: 0;
color: #333; right: 0;
font-size: 16px; width: 602px;
font-weight: 600; height: 100%;
white-space: nowrap; background: url(../../../assets/img/course4.png) (0 -100px)/140% 140% no-repeat;
}
dd {
padding: 5px 15px;
color: #6a6a6a;
font-size: 16px;
white-space: nowrap;
cursor: pointer;
border-radius: 4px;
&.active {
color: $main-color;
background-color: #e6f0ff;
}
}
}
} }
.courses {
position: relative; ul {
padding: 10px 0 20px; position: relative;
background: url(../../../assets/img/course3.png) 0 0 / auto no-repeat; display: flex;
.course-bg { flex-wrap: wrap;
position: absolute; width: 90%;
top: 0; margin: 0 auto;
right: 0; }
width: 602px;
height: 100%; li {
background: url(../../../assets/img/course4.png) (0 -100px)/140% 140% no-repeat; width: calc(20% - 20px);
} min-height: 250px;
ul { overflow: hidden;
position: relative; padding: 18px;
display: flex; margin: 10px;
flex-wrap: wrap; cursor: pointer;
width: 90%; border-radius: 8px;
margin: 0 auto; background-color: #fff;
} transition: all 0.3s;
li {
width: calc(20% - 20px); img {
min-height: 250px; width: 100%;
overflow: hidden; height: 165px;
padding: 18px; transition: 0.3s;
margin: 10px; }
cursor: pointer;
border-radius: 8px; .title {
background-color: #fff; margin: 10px 0 5px;
transition: all 0.3s; color: #0b1d30;
img { font-size: 16px;
width: 100%; word-wrap: break-word;
height: 165px; word-break: break-all;
transition: 0.3s; overflow: hidden;
} text-overflow: ellipsis;
.title { white-space: nowrap;
margin: 10px 0 5px; }
color: #0b1d30;
font-size: 16px; .desc span {
word-wrap: break-word; color: #f00;
word-break: break-all; font-size: 14px;
overflow: hidden; background-color: #f00;
text-overflow: ellipsis; }
white-space: nowrap;
} .desc {
.desc span { color: #757f92;
color: #f00; font-size: 14px;
font-size: 14px; display: -webkit-box;
background-color: #f00; -webkit-box-orient: vertical;
} -webkit-line-clamp: 2;
.desc { overflow: hidden;
color: #757f92;
font-size: 14px; &.ie {
display: -webkit-box; height: 80px;
-webkit-box-orient: vertical; text-overflow: ellipsis;
-webkit-line-clamp: 2; white-space: nowrap;
overflow: hidden;
&.ie {
height: 80px;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.type {
display: inline-block;
padding: 2px 10px;
border-radius: 20px;
color: #1cdbb8;
border: 1px solid;
}
.metas {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 10px;
}
.meta {
color: #a9a9a9;
font-size: 12px;
}
.collect {
font-size: 20px;
}
&:hover {
box-shadow: 0px 5px 12px 4px rgba(142, 123, 253, 0.09), 0px 3px 6px 0px rgba(142, 123, 253, 0.12),
0px 1px 2px -2px rgba(142, 123, 253, 0.16);
img {
transform: scale(1.05);
}
}
} }
@media (max-width: 1700px) { }
li {
width: calc(25% - 20px); .type {
} display: inline-block;
padding: 2px 10px;
border-radius: 20px;
color: #1cdbb8;
border: 1px solid;
}
.metas {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 10px;
}
.meta {
color: #a9a9a9;
font-size: 12px;
}
.collect {
font-size: 20px;
}
&:hover {
box-shadow: 0px 5px 12px 4px rgba(142, 123, 253, 0.09), 0px 3px 6px 0px rgba(142, 123, 253, 0.12),
0px 1px 2px -2px rgba(142, 123, 253, 0.16);
img {
transform: scale(1.05);
} }
}
} }
@media (max-width: 1700px) {
li {
width: calc(25% - 20px);
}
}
}
} }
</style> </style>

@ -10,7 +10,7 @@
<template v-if="showMask"> <template v-if="showMask">
<div class="mask" style="top: 0;width:100%;height: 48px;"></div> <div class="mask" style="top: 0;width:100%;height: 48px;"></div>
<div class="mask" style="top: 53px;width:100%;height: 30px;"></div> <div class="mask" style="top: 53px;width:100%;height: 30px;"></div>
<div class="mask" style="bottom: 0;right: 0;width:280px;height: 22px;background-color: #444;"></div> <div class="mask" style="bottom: 0;right: 40px;width:195px;height: 22px;background-color: #444;"></div>
</template> </template>
<template v-if="showMask1"> <template v-if="showMask1">
<div class="word-mask" style="height: 40px;"></div> <div class="word-mask" style="height: 40px;"></div>

@ -29,7 +29,9 @@ if (isDev) {
uploadURL = `http://121.37.12.51/` uploadURL = `http://121.37.12.51/`
host = "http://121.37.12.51/"; // 测试服 host = "http://121.37.12.51/"; // 测试服
// host = 'https://www.occupationlab.com/' // 正式服 // host = 'https://www.occupationlab.com/' // 正式服
host = localStorage.getItem('localIp') == 1 ? 'http://192.168.31.51:9000/' : 'http://192.168.31.217:9000/' const ip = localStorage.getItem('localIp')
const ips = ['http://192.168.31.217:9000/', 'http://192.168.31.51:9000/', 'http://121.37.12.51/']
host = ips[+ip]
} else if (isSq) { } else if (isSq) {
zcPath = `10.20.100.204:8883` zcPath = `10.20.100.204:8883`
} }

Loading…
Cancel
Save