登录前页面的自适应

dev_202412
yujialong 9 months ago
parent d792fcf846
commit 4d203b67f4
  1. 4
      public/index-occupationlab.html
  2. 4
      public/index-zxy.html
  3. 4
      public/index.html
  4. 27
      src/pages/course/list/index.vue
  5. 1838
      src/pages/index/zxy/index.vue
  6. 368
      src/pages/info/list/index.vue
  7. 222
      src/pages/log/list/index.vue
  8. 807
      src/pages/touristMatch/list/index.vue
  9. 2
      src/setting.js
  10. 25
      src/styles/common.scss

@ -9,8 +9,8 @@
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>

@ -9,8 +9,8 @@
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>

@ -9,8 +9,8 @@
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>

@ -356,6 +356,7 @@ export default {
img { img {
width: 100%; width: 100%;
height: 165px; height: 165px;
object-fit: cover;
transition: 0.3s; transition: 0.3s;
} }
@ -432,4 +433,30 @@ export default {
} }
} }
} }
@media (max-width: 1280px) {
.main {
.wrap-inner {
min-width: 0;
padding: 0 20px;
}
}
}
@media (max-width: 640px) {
.search {
.input {
width: 90%;
}
}
.wrap {
.courses {
li {
width: 100%;
}
}
}
}
</style> </style>

File diff suppressed because it is too large Load Diff

@ -5,53 +5,42 @@
<div class="center-wrap"> <div class="center-wrap">
<div class="nav"> <div class="nav">
<p class="column-name">{{ $route.query.name }}</p> <p class="column-name">{{ $route.query.name }}</p>
<el-menu v-if="menuList.length" <el-menu v-if="menuList.length" unique-opened :default-active="defaultIndex" @select="initData">
unique-opened <menuTree v-if="menuRefresh" :menuList="menuList"></menuTree>
:default-active="defaultIndex"
@select="initData">
<menuTree v-if="menuRefresh"
:menuList="menuList"></menuTree>
</el-menu> </el-menu>
</div> </div>
<div class="list-wrap"> <div class="list-wrap">
<div class="list"> <div class="list">
<template v-if="listData.length"> <template v-if="listData.length">
<ul> <ul>
<li v-for="(item,index) in listData" <li v-for="(item, index) in listData" :key="index" @click="toArticle(item.id)">
:key="index" <img :src="item.coverUrl" alt="">
@click="toArticle(item.id)">
<img :src="item.coverUrl"
alt="">
<div class="text"> <div class="text">
<div class="title">{{item.title}}</div> <div class="title">{{ item.title }}</div>
<div class="metas"> <div class="metas">
<span>作者{{item.author}}</span> <span>作者{{ item.author }}</span>
<i class="spe">|</i> <i class="spe">|</i>
<span>{{item.date.replace(' 00:00:00','')}}</span> <span>{{ item.date.replace(' 00:00:00', '') }}</span>
<i class="spe">|</i> <i class="spe">|</i>
<span>浏览量{{item.viewCount}}</span> <span>浏览量{{ item.viewCount }}</span>
</div> </div>
<div class="desc" <div class="desc"
:class="{ie: core.isIE() || core.isEdge(),firefox: core.isFirefox() || core.isEdge()}" :class="{ ie: core.isIE() || core.isEdge(), firefox: core.isFirefox() || core.isEdge() }"
v-html="item.content"></div> v-html="item.content"></div>
<a class="detail">查看详情 ></a> <a class="detail">查看详情 ></a>
</div> </div>
</li> </li>
</ul> </ul>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background layout="total, prev, pager, next" :total="totals"
layout="total, prev, pager, next" @current-change="handleCurrentChange" :current-page="page">
:total="totals"
@current-change="handleCurrentChange"
:current-page="page">
</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>
@ -214,148 +203,209 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.wrap { .wrap {
.banner { .banner {
height: 350px; height: 350px;
padding: 100px 0 0 180px; padding: 100px 0 0 180px;
background: url(../../../assets/img/info-bg6.png) (0 0) / auto no-repeat, background: url(../../../assets/img/info-bg6.png) (0 0) / auto no-repeat,
url(../../../assets/img/info-bg7.png) (25% 110px)/400px auto no-repeat, url(../../../assets/img/info-bg7.png) (25% 110px)/400px auto no-repeat,
url(../../../assets/img/info-bg4.png) (top right) / auto no-repeat, url(../../../assets/img/info-bg4.png) (top right) / auto no-repeat,
url(../../../assets/img/info-bg5.png) (80% 20px) / auto no-repeat, url(../../../assets/img/info-bg3.png) 0 0/100% 100% no-repeat; url(../../../assets/img/info-bg5.png) (80% 20px) / auto no-repeat, url(../../../assets/img/info-bg3.png) 0 0/100% 100% no-repeat;
} }
} }
.main { .main {
min-height: calc(100vh - 524px); min-height: calc(100vh - 524px);
background: url(../../../assets/img/info-bg1.png) (0px 179px)/ (190px 171px) no-repeat, background: url(../../../assets/img/info-bg1.png) (0px 179px)/ (190px 171px) no-repeat,
url(../../../assets/img/info-bg2.png) (bottom right)/ (407px 273px) no-repeat; url(../../../assets/img/info-bg2.png) (bottom right)/ (407px 273px) no-repeat;
.center-wrap {
display: flex; .center-wrap {
justify-content: center; display: flex;
align-items: flex-start; justify-content: center;
} align-items: flex-start;
.column-name { }
padding: 14px 0;
margin-bottom: 10px; .column-name {
padding: 14px 0;
margin-bottom: 10px;
font-size: 16px;
text-align: center;
color: #fff;
background-color: #007eff;
border-radius: 8px;
}
.nav {
width: 156px;
overflow: hidden;
.el-menu {
border-right: 0;
.el-submenu__icon-arrow {
display: none;
}
.el-submenu__title {
padding-right: 40px;
color: #1182f5;
background-color: #c6e7ff;
.el-submenu__title {
padding-right: 60px;
}
}
.el-menu-item {
min-width: auto;
padding: 0 24px !important;
font-size: 16px; font-size: 16px;
text-align: center; color: #666;
color: #fff; border-bottom: 2px solid #f3f6fa;
background-color: #007eff; border-right: 2px solid transparent;
border-radius: 8px;
&:before {
content: '';
display: inline-block;
width: 3px;
height: 3px;
margin-right: 10px;
vertical-align: middle;
border-radius: 50%;
background-color: #666;
}
&.is-active {
color: $main-color;
border-right-color: $main-color;
&:before {
background-color: $main-color;
}
}
}
}
}
.list-wrap {
width: calc(100% - 180px);
margin-left: 24px;
}
.list {
li {
display: flex;
margin-bottom: 12px;
cursor: pointer;
transition: all 0.3s;
background-color: #fff;
border-radius: 6px;
overflow: hidden;
} }
img {
width: 260px;
height: 195px;
border: 0;
}
.text {
position: relative;
width: calc(100% - 260px);
padding: 20px 24px;
}
.title {
font-size: 20px;
color: #0b1d30;
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.metas {
display: inline-flex;
align-items: center;
width: 100%;
margin: 10px 0;
font-size: 12px;
color: rgba(0, 0, 0, 0.45);
.spe {
margin: 0 10px;
}
}
.desc {
font-size: 14px;
color: #333;
line-height: 24px;
display: -webkit-box;
display: -moz-box;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
-webkit-line-clamp: 2;
-moz-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
&.ie {
height: 80px;
text-overflow: ellipsis;
white-space: nowrap;
}
&.firefox {
height: 76px;
}
}
.detail {
position: absolute;
bottom: 24px;
font-size: 14px;
color: $main-color;
}
}
}
@media (max-width: 1000px) {
.main {
.center-wrap {
flex-direction: column;
width: 95%;
}
.nav { .nav {
width: 156px; width: 100%;
overflow: hidden;
.el-menu {
border-right: 0;
.el-submenu__icon-arrow {
display: none;
}
.el-submenu__title {
padding-right: 40px;
color: #1182f5;
background-color: #c6e7ff;
.el-submenu__title {
padding-right: 60px;
}
}
.el-menu-item {
min-width: auto;
padding: 0 24px !important;
font-size: 16px;
color: #666;
border-bottom: 2px solid #f3f6fa;
border-right: 2px solid transparent;
&:before {
content: '';
display: inline-block;
width: 3px;
height: 3px;
margin-right: 10px;
vertical-align: middle;
border-radius: 50%;
background-color: #666;
}
&.is-active {
color: $main-color;
border-right-color: $main-color;
&:before {
background-color: $main-color;
}
}
}
}
} }
.list-wrap { .list-wrap {
width: calc(100% - 180px); width: 100%;
margin-left: 24px; margin: 20px 0 0;
.list {
li {
display: flex;
margin-bottom: 12px;
cursor: pointer;
transition: all 0.3s;
background-color: #fff;
border-radius: 6px;
overflow: hidden;
img {
width: 260px;
height: 195px;
border: 0;
}
.text {
position: relative;
width: calc(100% - 260px);
padding: 20px 24px;
.title {
font-size: 20px;
color: #0b1d30;
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.metas {
display: inline-flex;
align-items: center;
width: 100%;
margin: 10px 0;
font-size: 12px;
color: rgba(0, 0, 0, 0.45);
.spe {
margin: 0 10px;
}
}
.desc {
font-size: 14px;
color: #333;
line-height: 24px;
display: -webkit-box;
display: -moz-box;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
-webkit-line-clamp: 2;
-moz-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
&.ie {
height: 80px;
text-overflow: ellipsis;
white-space: nowrap;
}
&.firefox {
height: 76px;
}
}
.detail {
position: absolute;
bottom: 24px;
font-size: 14px;
color: $main-color;
}
}
}
}
} }
}
} }
</style>
@media (max-width: 640px) {
.main {
.list {
li {
flex-direction: column;
align-items: center;
}
.text {
width: 100%;
}
.detail {
right: 24px;
}
}
}
}
</style>

@ -1,114 +1,160 @@
<template> <template>
<div class="wrap"> <div class="wrap">
<div class="top"> <div class="top">
<img width="450" src="@/assets/img/update.png" alt=""> <img src="@/assets/img/update.png" alt="">
<p>给用户带来更好的服务与体验是我们不断优化和迭代产品的动力</p> <p>给用户带来更好的服务与体验是我们不断优化和迭代产品的动力</p>
</div>
<log-list></log-list>
</div> </div>
<log-list></log-list>
</div>
</template> </template>
<script> <script>
import logList from '@/components/log' import logList from '@/components/log'
export default { export default {
name: 'log', name: 'log',
data() { data () {
return { return {
}
},
components: {
logList
},
mounted() {
},
methods: {
} }
},
components: {
logList
},
mounted () {
},
methods: {
}
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.wrap { .wrap {
padding: 50px 0 20px; padding: 50px 0 20px;
background-color: #000; background-color: #000;
.top {
margin-bottom: 100px; .top {
text-align: center; margin-bottom: 100px;
img { text-align: center;
margin: 30px 0;
} img {
p { width: 450px;
color: #e9e9e9; margin: 30px 0;
} }
p {
color: #e9e9e9;
} }
}
} }
/deep/.timeline { /deep/.timeline {
display: flex;
flex-direction: column;
width: 1000px;
margin: 0 auto;
.item {
display: flex; display: flex;
flex-direction: column; justify-content: center;
width: 1000px; margin-bottom: 30px;
margin: 0 auto; }
.item {
display: flex; .date {
justify-content: center; width: 300px;
margin-bottom: 30px; margin-right: 100px;
text-align: right;
color: #cbcbcb;
font-size: 14px;
}
.right {
flex: 1;
color: #fff;
}
h6 {
margin-bottom: 15px;
font-size: 18px;
line-height: 1;
}
.cover {
max-width: 400px;
margin: 10px 0 20px;
}
.detail {
li {
margin-bottom: 20px;
} }
.name {
display: flex;
align-items: center;
margin-bottom: 5px;
font-size: 14px;
color: #fff;
img {
width: 20px;
margin-right: 8px;
}
}
.val {
font-size: 15px;
line-height: 1.8;
white-space: pre-wrap;
p {
position: relative;
color: #a3a3a3;
&:before {
content: '';
display: inline-block;
width: 5px;
height: 5px;
margin: 0 15px 0 8px;
vertical-align: middle;
border-radius: 20px;
background-color: $main-color;
}
}
}
}
}
@media (max-width: 1000px) {
/deep/.timeline {
width: 95%;
.date { .date {
width: 300px; width: 100px;
margin-right: 100px; margin-right: 30px;
text-align: right;
color: #cbcbcb;
font-size: 14px;
} }
.right { }
flex: 1; }
color: #fff;
@media (max-width: 480px) {
.wrap {
.top {
img {
width: 100%;
}
} }
h6 { }
margin-bottom: 15px;
font-size: 18px; /deep/.timeline {
line-height: 1; .date {
margin-right: 20px;
} }
.cover { .cover {
max-width: 400px; max-width: 100%;
margin: 10px 0 20px;
}
.detail {
li {
margin-bottom: 20px;
}
.name {
display: flex;
align-items: center;
margin-bottom: 5px;
font-size: 14px;
color: #fff;
img {
width: 20px;
margin-right: 8px;
}
}
.val {
font-size: 15px;
line-height: 1.8;
white-space: pre-wrap;
p {
position: relative;
color: #a3a3a3;
&:before {
content: '';
display: inline-block;
width: 5px;
height: 5px;
margin: 0 15px 0 8px;
vertical-align: middle;
border-radius: 20px;
background-color: $main-color;
}
}
}
} }
}
} }
</style> </style>

@ -3,61 +3,42 @@
<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="filter"> <div class="filter">
<div class="center-wrap" <div class="center-wrap" style="padding: 0;margin: 0 auto;">
style="padding: 0;margin: 0 auto;">
<dl> <dl>
<dt>比赛范围</dt> <dt>比赛范围</dt>
<dd v-for="(item, i) in scopes" <dd v-for="(item, i) in scopes" :key="i" :class="{ active: form.competitionScope == item.id }"
:key="i" @click="changeScope(item.id)">{{ item.name }}</dd>
:class="{active: form.competitionScope == item.id}"
@click="changeScope(item.id)">{{ item.name }}</dd>
<template v-if="form.competitionScope === 2"> <template v-if="form.competitionScope === 2">
<div class="select-wrap"> <div class="select-wrap">
<span class="label">省份</span> <span class="label">省份</span>
<el-select size="small" <el-select size="small" v-model="form.provinceId" clearable @change="getCity">
v-model="form.provinceId" <el-option label="请选择" value=""></el-option>
clearable <el-option v-for="(item, index) in provinces" :key="index" :label="item.provinceName"
@change="getCity"> :value="item.provinceId"></el-option>
<el-option label="请选择"
value=""></el-option>
<el-option v-for="(item,index) in provinces"
:key="index"
:label="item.provinceName"
:value="item.provinceId"></el-option>
</el-select> </el-select>
</div> </div>
<div class="select-wrap"> <div class="select-wrap">
<span class="label">城市</span> <span class="label">城市</span>
<el-select size="small" <el-select size="small" v-model="form.cityId" clearable @change="initData">
v-model="form.cityId" <el-option label="请选择" value=""></el-option>
clearable <el-option v-for="(item, index) in cities" :key="index" :label="item.cityName"
@change="initData"> :value="item.cityId"></el-option>
<el-option label="请选择"
value=""></el-option>
<el-option v-for="(item,index) in cities"
:key="index"
:label="item.cityName"
:value="item.cityId"></el-option>
</el-select> </el-select>
</div> </div>
</template> </template>
</dl> </dl>
<dl> <dl>
<dt>筛选排序</dt> <dt>筛选排序</dt>
<dd v-for="(item, i) in sorts" <dd v-for="(item, i) in sorts" :key="i" :class="{ active: form.sequence == item.id }"
:key="i" @click="changeSort(item.id)">{{
:class="{active: form.sequence == item.id}" item.name }}</dd>
@click="changeSort(item.id)">{{ item.name }}</dd>
</dl> </dl>
</div> </div>
</div> </div>
@ -68,64 +49,60 @@
<div class="list"> <div class="list">
<template v-if="listData.length"> <template v-if="listData.length">
<ul> <ul>
<li v-for="(item,index) in listData" <li v-for="(item, index) in listData" :key="index" :id="item.id" @click="toDetail(item)">
:key="index"
:id="item.id"
@click="toDetail(item)">
<div class="left"> <div class="left">
<el-button v-if="item.status === 2 || item.curStage" <el-button v-if="item.status === 2 || item.curStage"
:class="['stage-label', {playing: item.curStage}]" :class="['stage-label', { playing: item.curStage }]" type="primary">{{ item.status === 2 ? '报名中' :
type="primary">{{ item.status === 2 ? '报名中' : item.curStage ? '竞赛中' : '' }}</el-button> item.curStage ? '竞赛中' : '' }}</el-button>
<div class="cover"> <div class="cover">
<img :src="item.coverUrl || 'https://huoran.oss-cn-shenzhen.aliyuncs.com/20220623/png/1539857403162943488.png'" <img
alt=""> :src="item.coverUrl || 'https://huoran.oss-cn-shenzhen.aliyuncs.com/20220623/png/1539857403162943488.png'"
alt="">
</div> </div>
<div class="info"> <div class="info">
<div class="title">{{ item.competitionName }}</div> <div class="title">{{ item.competitionName }}</div>
<div class="metas"> <div class="metas">
<div :class="{'flex-top': item.sponsor.split(',').length > 1}"> <div class="meta" :class="{ 'flex-top': item.sponsor.split(',').length > 1 }">
<span class="label">主办方&emsp;</span> <span class="label">主办方&emsp;</span>
<span class="val">{{ item.sponsor }}</span> <span class="val">{{ item.sponsor }}</span>
</div> </div>
<div> <div class="meta">
<span class="label">报名时间</span><span class="val">{{ item.signUpStartTime}} ~ {{ item.signUpEndTime }}</span> <span class="label">报名时间</span><span class="val">{{ item.signUpStartTime }} ~ {{
item.signUpEndTime }}</span>
</div> </div>
<div> <div class="meta">
<span class="label">比赛时间</span><span class="val">{{ item.playStartTime}} ~ {{ item.playEndTime }}</span> <span class="label">比赛时间</span><span class="val">{{ item.playStartTime }} ~ {{
item.playEndTime }}</span>
</div> </div>
<div :title="item.locations || item.range"> <div class="meta" :title="item.locations || item.range">
<span class="label">比赛范围</span><span class="val">{{ item.locations || item.range }}</span> <span class="label">比赛范围</span><span class="val">{{ item.locations || item.range }}</span>
</div> </div>
<div> <div class="meta">
<span class="label">比赛类型</span><span class="val">{{ item.competitionType ? '团体赛' : '个人赛' }}</span> <span class="label">比赛类型</span><span class="val">{{ item.competitionType ? '团体赛' : '个人赛'
}}</span>
</div> </div>
<div v-if="item.curStage"> <div v-if="item.curStage" class="meta">
<span class="label">当前阶段</span><span class="val">{{ item.curStage.stageName }}</span> <span class="label">当前阶段</span><span class="val">{{ item.curStage.stageName }}</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="right"> <div class="right">
<el-dropdown v-if="item.playingStages && item.playingStages.length > 1" <el-dropdown v-if="item.playingStages && item.playingStages.length > 1" class="m-l-10"
class="m-l-10" @command="e => chooseStage(e, item)">
@command="e => chooseStage(e, item)"> <el-button type="primary" style="background-color: #f96d6d;border: 0;">
<el-button type="primary"
style="background-color: #f96d6d;border: 0;">
选择竞赛<i class="el-icon-arrow-down el-icon--right"></i> 选择竞赛<i class="el-icon-arrow-down el-icon--right"></i>
</el-button> </el-button>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="(stage, i) in item.playingStages" <el-dropdown-item v-for="(stage, i) in item.playingStages" :key="i" :command="stage">进入{{
:key="i" stage.stageName }}</el-dropdown-item>
:command="stage">进入{{ stage.stageName }}</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
<p class="status" <p class="status" v-else-if="item.status != 4 || (item.status == 4 && item.curStage)"
v-else-if="item.status != 4 || (item.status == 4 && item.curStage)" :class="{ wait: item.status == 0, signing: item.status == 2, signed: item.status == 1, playing: item.status == 4 && item.curStage, finish: item.status == 3 || item.status == 5 }"
:class="{wait: item.status == 0,signing: item.status == 2,signed: item.status == 1,playing: item.status == 4 && item.curStage,finish: item.status == 3 || item.status == 5}" :title="item.status == 4 ? item.stageName : statusList[item.status]" @click.stop="signup(item)">{{
:title="item.status == 4 ? item.stageName : statusList[item.status]" item.status == 4 ? item.stageName : statusList[item.status] }}</p>
@click.stop="signup(item)">{{ item.status == 4 ? item.stageName : statusList[item.status] }}</p> <p class="end-text" v-if="item.end">
<p class="end-text"
v-if="item.end">
距离{{ item.status == 4 ? item.endText : endList[item.status] }}还有 距离{{ item.status == 4 ? item.endText : endList[item.status] }}还有
<em>{{ item.end }}</em> <em>{{ item.end }}</em>
</p> </p>
@ -133,19 +110,16 @@
</li> </li>
</ul> </ul>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background layout="total, prev, pager, next"
layout="total, prev, pager, next" :pager-count="$store.state.layout.isMobile ? 3 : 7" :total="totals"
:total="totals" @current-change="handleCurrentChange" :current-page="page">
@current-change="handleCurrentChange"
:current-page="page">
</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>
@ -155,95 +129,56 @@
</div> </div>
</div> </div>
<el-dialog title="报名" <el-dialog title="报名" :visible.sync="peopleSignupVisible" :close-on-click-modal="false" width="300px">
:visible.sync="peopleSignupVisible"
:close-on-click-modal="false"
width="300px">
<el-form class="dia-form"> <el-form class="dia-form">
<el-form-item> <el-form-item>
<el-input placeholder="请输入4位数大赛邀请码" <el-input placeholder="请输入4位数大赛邀请码" maxlength="4"
maxlength="4" v-model="peopleSignupForm.registrationInvitationCode"></el-input>
v-model="peopleSignupForm.registrationInvitationCode"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" <span slot="footer" class="dialog-footer">
class="dialog-footer"> <el-button size="small" type="primary" @click="peopleSignupSubmit">报名</el-button>
<el-button size="small" <el-button size="small" @click="peopleSignupVisible = false">取消</el-button>
type="primary"
@click="peopleSignupSubmit">报名</el-button>
<el-button size="small"
@click="peopleSignupVisible = false">取消</el-button>
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="报名" <el-dialog title="报名" :visible.sync="enterVisible" :close-on-click-modal="false" width="300px">
:visible.sync="enterVisible"
:close-on-click-modal="false"
width="300px">
<el-form class="dia-form"> <el-form class="dia-form">
<p style="margin-bottom: 5px">请选择要加入的团队</p> <p style="margin-bottom: 5px">请选择要加入的团队</p>
<el-form-item> <el-form-item>
<el-select class="w-100" <el-select class="w-100" v-model="enterForm.teamId" filterable>
v-model="enterForm.teamId" <el-option v-for="(item, i) in teams" :key="i" :label="item.teamName" :value="item.teamId"></el-option>
filterable>
<el-option v-for="(item, i) in teams"
:key="i"
:label="item.teamName"
:value="item.teamId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-input placeholder="请输入6位数团队邀请码" <el-input placeholder="请输入6位数团队邀请码" maxlength="6" v-model="enterForm.invitationCode"></el-input>
maxlength="6"
v-model="enterForm.invitationCode"></el-input>
</el-form-item> </el-form-item>
<el-form-item v-if="curItem.isNeedCode"> <el-form-item v-if="curItem.isNeedCode">
<el-input placeholder="请输入4位数大赛邀请码" <el-input placeholder="请输入4位数大赛邀请码" maxlength="4" v-model="enterForm.registrationInvitationCode"></el-input>
maxlength="4"
v-model="enterForm.registrationInvitationCode"></el-input>
</el-form-item> </el-form-item>
<p class="tips"> <p class="tips">
查找不到团队点击 <el-link :underline="false" 查找不到团队点击 <el-link :underline="false" type="primary" @click="toTeam">创建团队</el-link>
type="primary"
@click="toTeam">创建团队</el-link>
</p> </p>
</el-form> </el-form>
<span slot="footer" <span slot="footer" class="dialog-footer">
class="dialog-footer"> <el-button size="small" type="primary" @click="enterSubmit">报名</el-button>
<el-button size="small" <el-button size="small" @click="enterVisible = false">取消</el-button>
type="primary"
@click="enterSubmit">报名</el-button>
<el-button size="small"
@click="enterVisible = false">取消</el-button>
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="创建团队" <el-dialog title="创建团队" :visible.sync="teamVisible" :close-on-click-modal="false" width="300px">
:visible.sync="teamVisible"
:close-on-click-modal="false"
width="300px">
<el-form class="dia-form"> <el-form class="dia-form">
<el-form-item> <el-form-item>
<el-input placeholder="请输入团队名称" <el-input placeholder="请输入团队名称" maxlength="10" v-model="teamForm.teamName"></el-input>
maxlength="10"
v-model="teamForm.teamName"></el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-input placeholder="请输入6位数团队邀请码" <el-input placeholder="请输入6位数团队邀请码" maxlength="6" v-model="teamForm.invitationCode"></el-input>
maxlength="6"
v-model="teamForm.invitationCode"></el-input>
</el-form-item> </el-form-item>
<el-form-item v-if="curItem.isNeedCode"> <el-form-item v-if="curItem.isNeedCode">
<el-input placeholder="请输入4位数大赛邀请码" <el-input placeholder="请输入4位数大赛邀请码" maxlength="4" v-model="teamForm.registrationInvitationCode"></el-input>
maxlength="4"
v-model="teamForm.registrationInvitationCode"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" <span slot="footer" class="dialog-footer">
class="dialog-footer"> <el-button size="small" type="primary" @click="teamSubmit">创建并报名</el-button>
<el-button size="small" <el-button size="small" @click="teamVisible = false">取消</el-button>
type="primary"
@click="teamSubmit">创建并报名</el-button>
<el-button size="small"
@click="teamVisible = false">取消</el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
@ -748,282 +683,364 @@ 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/match-bg4.png) (27px 10px) / auto no-repeat,
url(../../../assets/img/match-bg5.png) (98% 20px) / auto no-repeat, url(../../../assets/img/match-bg3.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;
text-align: center; margin: 0 auto;
background: url(../../../assets/img/match-bg4.png) (27px 10px) / auto no-repeat, }
url(../../../assets/img/match-bg5.png) (98% 20px) / auto no-repeat, url(../../../assets/img/match-bg3.png) 0 0/100% 100% no-repeat;
h6 { img {
margin-bottom: 25px; position: absolute;
font-size: 26px; top: 19px;
color: #fff; left: 14px;
} }
.input {
position: relative; input {
width: 700px; width: 100%;
margin: 0 auto; height: 62px;
} line-height: 62px;
img { padding: 0 50px;
position: absolute; font-size: 18px;
top: 19px; color: #333;
left: 14px; border: 0;
} outline: none;
input { border-radius: 4px;
width: 100%; }
height: 62px;
line-height: 62px;
padding: 0 50px;
font-size: 18px;
color: #333;
border: 0;
outline: none;
border-radius: 4px;
}
} }
.main { .main {
background: url(../../../assets/img/match-bg1.png) (0px 95px) / auto auto no-repeat, background: url(../../../assets/img/match-bg1.png) (0px 95px) / auto auto no-repeat,
url(../../../assets/img/match-bg2.png) (98% bottom) / auto auto no-repeat; url(../../../assets/img/match-bg2.png) (98% bottom) / auto auto no-repeat;
.filter {
width: 100%; .filter {
background-color: #fff; width: 100%;
dl { background-color: #fff;
display: flex;
align-items: center; dl {
margin: 20px 0; display: flex;
dt { align-items: center;
color: #333; margin: 20px 0;
font-size: 16px;
font-weight: 600; dt {
} color: #333;
dd { font-size: 16px;
padding: 5px 20px; font-weight: 600;
margin: 0 10px; white-space: nowrap;
color: #4c4c4c; }
font-size: 16px;
cursor: pointer; dd {
border-radius: 4px; padding: 5px 20px;
&.active { margin: 0 10px;
color: $main-color; color: #4c4c4c;
background-color: #e6f0ff; font-size: 16px;
} cursor: pointer;
} border-radius: 4px;
white-space: nowrap;
&.active {
color: $main-color;
background-color: #e6f0ff;
} }
}
} }
.select-wrap { }
display: inline-flex;
align-items: center; .select-wrap {
margin: 0 20px; display: inline-flex;
.label { align-items: center;
margin-right: 10px; margin: 0 20px;
.label {
margin-right: 10px;
}
.el-select {
width: 130px;
}
}
.list-inner {
display: flex;
justify-content: center;
align-items: flex-start;
}
.nav {
width: 156px;
text-align: right;
overflow: hidden;
background-color: #fff;
li {
padding: 0 24px;
font-size: 16px;
color: #666;
line-height: 48px;
border-bottom: 2px solid #f3f6fa;
border-right: 2px solid transparent;
cursor: pointer;
&:before {
content: '';
display: inline-block;
width: 3px;
height: 3px;
margin-right: 10px;
vertical-align: middle;
border-radius: 50%;
background-color: #666;
}
&.active {
color: $main-color;
border-right-color: $main-color;
&:before {
background-color: $main-color;
} }
.el-select { }
width: 130px; }
}
.list-wrap {
flex: 1;
margin-left: 24px;
}
.list {
li {
display: flex;
justify-content: space-between;
padding: 16px;
margin-bottom: 12px;
transition: all 0.3s;
cursor: pointer;
border-radius: 6px;
background-color: #fff;
&:hover {
.title {
color: $main-color;
} }
}
} }
.list-inner {
display: flex; .right {
justify-content: center; display: flex;
align-items: flex-start; flex-direction: column;
justify-content: center;
align-items: flex-end;
flex: 1;
} }
.nav {
width: 156px; .status {
text-align: right; max-width: 120px;
overflow: hidden; padding: 0 23px;
background-color: #fff; line-height: 34px;
li { font-size: 14px;
padding: 0 24px; color: #fff;
font-size: 16px; white-space: nowrap;
color: #666; background-color: #52c41a;
line-height: 48px; border-radius: 4px;
border-bottom: 2px solid #f3f6fa; @include ellipsis();
border-right: 2px solid transparent;
cursor: pointer; &.wait {
&:before { background-color: #faad14;
content: ''; }
display: inline-block;
width: 3px; &.signing {
height: 3px; background-color: $main-color;
margin-right: 10px; }
vertical-align: middle;
border-radius: 50%; &.signed {
background-color: #666; background-color: #52c41a;
} }
&.active {
color: $main-color; &.playing {
border-right-color: $main-color; background-color: #f96d6d;
&:before { }
background-color: $main-color;
} &.finish {
} background-color: #ccc;
} }
} }
.list-wrap {
flex: 1; .btn {
margin-left: 24px; padding: 12px 20px;
.list { color: #fff;
li { background-color: #cb221c;
display: flex; border-radius: 4px;
justify-content: space-between; cursor: pointer;
padding: 16px;
margin-bottom: 12px; &:hover {
transition: all 0.3s; opacity: 0.9;
cursor: pointer; }
border-radius: 6px;
background-color: #fff; &.disabled {
.right { cursor: not-allowed;
display: flex; background-color: #969696;
flex-direction: column; }
justify-content: center; }
align-items: flex-end;
flex: 1; .end-text {
margin-top: 10px;
.status { color: rgba(0, 0, 0, 0.65);
max-width: 120px; font-size: 12px;
padding: 0 23px; white-space: nowrap;
line-height: 34px;
font-size: 14px; em {
color: #fff; font-style: normal;
white-space: nowrap; color: #f00;
background-color: #52c41a; }
border-radius: 4px; }
@include ellipsis();
&.wait { .left {
background-color: #faad14; position: relative;
} display: inline-flex;
}
&.signing {
background-color: $main-color; .stage-label {
} position: absolute;
top: -16px;
&.signed { left: -16px;
background-color: #52c41a; border: 0;
} background-color: rgb(101, 227, 181);
&.playing {
background-color: #f96d6d; &.playing {
} background-color: rgb(251, 174, 41);
}
&.finish { }
background-color: #ccc;
} .cover {
} img {
width: 275px;
.btn { height: 175px;
padding: 12px 20px; border-radius: 6px;
color: #fff; }
background-color: #cb221c; }
border-radius: 4px;
cursor: pointer; .info {
margin-left: 16px;
&:hover { }
opacity: 0.9;
} .title {
margin-bottom: 10px;
&.disabled { font-size: 20px;
cursor: not-allowed; font-weight: 500;
background-color: #969696; color: #0b1d30;
} line-height: 1;
} }
.end-text { .metas {
margin-top: 10px; font-size: 14px;
color: rgba(0, 0, 0, 0.65); color: #666;
font-size: 12px;
white-space: nowrap; .meta {
display: flex;
em { align-items: center;
font-style: normal; margin-bottom: 5px;
color: #f00;
} &.flex-top {
} align-items: flex-start;
}
&:hover {
.left {
.info {
.title {
color: $main-color;
}
}
}
}
}
.left {
position: relative;
display: inline-flex;
.stage-label {
position: absolute;
top: -16px;
left: -16px;
border: 0;
background-color: rgb(101, 227, 181);
&.playing {
background-color: rgb(251, 174, 41);
}
}
.cover {
img {
width: 275px;
height: 175px;
border-radius: 6px;
}
}
.info {
margin-left: 16px;
.title {
margin-bottom: 10px;
font-size: 20px;
font-weight: 500;
color: #0b1d30;
line-height: 1;
}
.metas {
font-size: 14px;
color: #666;
div {
display: flex;
align-items: center;
margin-bottom: 5px;
&.flex-top {
align-items: flex-start;
}
}
.label,
.val {
font-size: 14px;
color: #666;
white-space: nowrap;
}
.val {
max-width: 450px;
text-overflow: ellipsis;
overflow: hidden;
}
.a-line {
display: block;
}
}
.desc {
font-size: 14px;
}
}
}
} }
}
.label,
.val {
font-size: 14px;
color: #666;
white-space: nowrap;
}
.val {
max-width: 450px;
text-overflow: ellipsis;
overflow: hidden;
}
.a-line {
display: block;
}
}
.desc {
font-size: 14px;
} }
}
} }
/deep/.dia-form { /deep/.dia-form {
.w-100 { .w-100 {
width: 100%; width: 100%;
}
.tips {
display: flex;
justify-content: center;
align-items: center;
}
}
@media (max-width: 1000px) {
.main {
.center-wrap {
width: 90%;
} }
.tips { }
display: flex; }
justify-content: center;
@media (max-width: 640px) {
.search {
.input {
width: 90%;
}
}
.main {
.list-wrap {
padding: 0 20px;
margin-left: 0;
}
.list {
li,
.left {
flex-direction: column;
justify-content: flex-start;
}
.cover {
text-align: center;
}
.info {
margin: 15px 0;
}
.metas {
.val {
white-space: normal;
}
}
.right {
align-items: center; align-items: center;
}
} }
}
} }
</style> </style>

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

@ -364,14 +364,6 @@
} }
} }
@media (max-width: 1600px) {
.el-table {
.el-switch__label--right.is-active {
left: 8px;
}
}
}
.empty { .empty {
display: flex; display: flex;
justify-content: center; justify-content: center;
@ -387,3 +379,20 @@
color: rgba(0, 0, 0, 0.25); color: rgba(0, 0, 0, 0.25);
} }
} }
@media (max-width: 1600px) {
.el-table {
.el-switch__label--right.is-active {
left: 8px;
}
}
}
@media (max-width: 640px) {
.empty {
img {
width: auto;
max-width: 100%;
}
}
}
Loading…
Cancel
Save