dev_review
yujialong 7 months ago
parent c7772e54ad
commit ba7c09ecf8
  1. BIN
      src/assets/img/exts/pdf.png
  2. BIN
      src/assets/img/exts/pic.png
  3. BIN
      src/assets/img/exts/ppt.png
  4. BIN
      src/assets/img/exts/txt.png
  5. BIN
      src/assets/img/exts/video.png
  6. BIN
      src/assets/img/exts/word.png
  7. 15
      src/components/Header.vue
  8. 3
      src/setting.js
  9. 1
      src/views/match/list/index.vue
  10. 4
      src/views/match/manage/matchSignup.vue
  11. 13
      src/views/system/taskLog.vue
  12. 428
      src/views/theoreticalCourse/preview/index.vue

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 B

@ -5,6 +5,12 @@
@click="goHome" @click="goHome"
src="../assets/img/logo.png"> src="../assets/img/logo.png">
</div> </div>
<el-radio-group v-if="Setting.isDev"
v-model="ip"
@change="ipChange">
<el-radio :label="0">刘榕ip</el-radio>
<el-radio :label="1">陈赓ip</el-radio>
</el-radio-group>
<div class="header-right"> <div class="header-right">
<div class="header-user-con"> <div class="header-user-con">
<div class="user" <div class="user"
@ -28,7 +34,9 @@ import Setting from '@/setting'
export default { export default {
data () { data () {
return { return {
userName: '' Setting,
userName: '',
ip: localStorage.getItem('nakadaiIp') ? +localStorage.getItem('nakadaiIp') : 0,
}; };
}, },
mounted () { mounted () {
@ -104,6 +112,11 @@ export default {
Setting.isPro && this.heartbeatDetection() Setting.isPro && this.heartbeatDetection()
}).catch(err => { }) }).catch(err => { })
}, },
ipChange (val) {
localStorage.setItem('nakadaiIp', val)
location.reload()
},
}, },
}; };
</script> </script>

@ -9,12 +9,13 @@ let jumpPath = `${location.origin}/judgmentPoint/`
let sandPath = `http://121.37.12.51/sandbox` // 沙盘地址 let sandPath = `http://121.37.12.51/sandbox` // 沙盘地址
let host = `${location.origin}/` let host = `${location.origin}/`
if (isDev) { if (isDev) {
console.log("🚀 ~ localStorage.getItem('nakadaiIp'):",localStorage.getItem('nakadaiIp'))
jumpPath = 'http://192.168.31.125:8087/' // 本地调试-需要启动本地判分点系统 jumpPath = 'http://192.168.31.125:8087/' // 本地调试-需要启动本地判分点系统
// jumpPath = 'https://judgment.huorantech.cn/' // jumpPath = 'https://judgment.huorantech.cn/'
sandPath = `http://${location.hostname}:9520` sandPath = `http://${location.hostname}:9520`
host = 'http://121.37.12.51/' host = 'http://121.37.12.51/'
// host = 'https://huorantech.cn/' // host = 'https://huorantech.cn/'
host = 'http://192.168.31.217:9000/' host = localStorage.getItem('nakadaiIp') == 1 ? 'http://192.168.31.51:9000/' : 'http://192.168.31.217:9000/'
} else if (isPro) { } else if (isPro) {
sandPath = `https://izhixinyun.com/sandbox` sandPath = `https://izhixinyun.com/sandbox`
jumpPath = 'https://judgment.huorantech.cn/' jumpPath = 'https://judgment.huorantech.cn/'

@ -349,6 +349,7 @@ export default {
} }
}, },
mounted () { mounted () {
this.$store.commit('SET_M_PAGE', 1)
// websocket // websocket
Bus.$on('matchSocket', () => { Bus.$on('matchSocket', () => {
this.getData() this.getData()

@ -605,7 +605,7 @@ export default {
this.form = JSON.parse(JSON.stringify(row)) this.form = JSON.parse(JSON.stringify(row))
}, },
del (row) { del (row) {
this.$confirm(!this.info.completeCompetitionSetup.competitionType || row.captain === '否' ? '此删除操作不可逆,是否确认删除选中项?' : '删除队长后,该团队下所有成员都会同步移除报名,是否确认删除?', "提示", { this.$confirm(!this.info.completeCompetitionSetup.competitionType || row.captain === '否' ? '删除后该参赛人员已有的成绩会一并删除,成绩排名将会受影响,是否确定要删除?' : '删除队长后,该团队下所有成员都会同步移除报名,已有的成绩也会一并删除,成绩排名将会受影响,是否确认删除?', "提示", {
type: "warning" type: "warning"
}).then(() => { }).then(() => {
this.$post(this.api.batchDeleteApplicants, { registrationVOS: [row] }).then(res => { this.$post(this.api.batchDeleteApplicants, { registrationVOS: [row] }).then(res => {
@ -852,7 +852,7 @@ export default {
// //
async batchDel () { async batchDel () {
const list = this.multipleSelection const list = this.multipleSelection
const tips = list.length ? (this.info.completeCompetitionSetup.competitionType && list.find(e => e.captain === '是') ? '删除队长后,该团队下所有成员都会同步移除报名,是否确认删除?' : '此删除操作不可逆,是否确认删除选中项?') : '是否确定删除全部报名人员?' const tips = list.length ? (this.info.completeCompetitionSetup.competitionType && list.find(e => e.captain === '是') ? '删除队长后,该团队下所有成员都会同步移除报名,已有的成绩也会一并删除,成绩排名将会受影响,是否确认删除?' : '删除后该参赛人员已有的成绩会一并删除,成绩排名将会受影响,是否确定要删除?') : '删除后参赛人员已有的成绩会一并删除,成绩排名将会受影响,是否确定删除全部报名人员?'
this.$confirm(tips, "提示", { this.$confirm(tips, "提示", {
type: "warning" type: "warning"
}).then(async () => { }).then(async () => {

@ -17,24 +17,33 @@
show-overflow-tooltip></el-table-column> show-overflow-tooltip></el-table-column>
<el-table-column prop="ip" <el-table-column prop="ip"
label="ip" label="ip"
min-width="90"
align="center"></el-table-column> align="center"></el-table-column>
<el-table-column prop="userId" <el-table-column prop="userId"
label="userId" label="userId"
min-width="60"
align="center"></el-table-column> align="center"></el-table-column>
<el-table-column prop="userName" <el-table-column prop="userName"
label="用户名" label="用户名"
min-width="60"
align="center"></el-table-column> align="center"></el-table-column>
<el-table-column prop="schoolName" <el-table-column prop="schoolName"
label="学校" label="学校"
min-width="90"
align="center"></el-table-column> align="center"></el-table-column>
<el-table-column prop="method" <el-table-column prop="method"
label="路径" label="路径"
align="center"></el-table-column> min-width="90"
align="center"
show-overflow-tooltip></el-table-column>
<el-table-column prop="params" <el-table-column prop="params"
label="参数" label="参数"
align="center"></el-table-column> min-width="300"
align="center"
show-overflow-tooltip></el-table-column>
<el-table-column prop="createTime" <el-table-column prop="createTime"
label="操作时间" label="操作时间"
width="150"
align="center"></el-table-column> align="center"></el-table-column>
</el-table> </el-table>
<div class="pagination"> <div class="pagination">

@ -1,6 +1,6 @@
<template> <template>
<!-- 课程预览 --> <!-- 课程预览 -->
<div> <div class="wrap">
<el-card shadow="hover" <el-card shadow="hover"
class="m-b-20"> class="m-b-20">
<div class="flex-between"> <div class="flex-between">
@ -9,102 +9,131 @@
</div> </div>
</el-card> </el-card>
<el-card shadow="hover" <div class="flex">
class="m-b-20" <div class="cover"
style="background: none;"> :class="{'is-word': showMask1}">
<div class="flex"> <img v-if="coverUrl"
<div class="cover" :src="coverUrl"
:class="{'is-word': showMask1}"> alt=""
<img v-if="coverUrl" width="100%"
:src="coverUrl" height="100%">
alt="" <template v-else-if="iframeSrc">
width="100%" <iframe class="inner fileIframe"
height="100%"> id="fileIframe"
<template v-else-if="iframeSrc"> :src="iframeSrc"
<iframe class="inner fileIframe" frameborder="0"></iframe>
id="fileIframe" <template v-if="showMask">
:src="iframeSrc" <div class="mask"
frameborder="0"></iframe> style="width: 500px;height: 30px;top: 53px;right: 320px"></div>
<template v-if="showMask"> <div class="mask"
<div class="mask" style="width: 175px;height: 30px;top: 53px;right: 5px"></div>
style="width: 500px;height: 30px;top: 53px;right: 320px"></div>
<div class="mask"
style="width: 175px;height: 30px;top: 53px;right: 5px"></div>
</template>
<template v-if="showMask1">
<div class="word-mask"
style="height: 40px;"></div>
<div class="word-mask2"
style="top: 55px;left: 28%;width: 44%;height: calc(100% - 80px);"></div>
</template>
<template v-if="showMask2">
<div class="excel-mask1"
style="height: 48px;"></div>
</template>
</template> </template>
<div class="pdf inner" <template v-if="showMask1">
v-else-if="pdfSrc"> <div class="word-mask"
<p class="arrow"> style="height: 40px;"></div>
<span @click="changePdfPage(0)" <div class="word-mask2"
class="turn el-icon-arrow-left" style="top: 55px;left: 28%;width: 44%;height: calc(100% - 80px);"></div>
:class="{grey: currentPage==1}"></span> </template>
{{ currentPage }} / {{ pageCount }} <template v-if="showMask2">
<span @click="changePdfPage(1)" <div class="excel-mask1"
class="turn el-icon-arrow-right" style="height: 48px;"></div>
:class="{grey: currentPage==pageCount}"></span> </template>
</p> </template>
<pdf class="pdf-wrap" <div class="pdf inner"
:src="pdfSrc" v-else-if="pdfSrc">
:page="currentPage" <p class="arrow">
@num-pages="pageCount=$event" <span @click="changePdfPage(0)"
@page-loaded="currentPage=$event" class="turn el-icon-arrow-left"
@loaded="loadPdfHandler"> :class="{grey: currentPage==1}"></span>
</pdf> {{ currentPage }} / {{ pageCount }}
</div> <span @click="changePdfPage(1)"
<div class="inner" class="turn el-icon-arrow-right"
v-else-if="playAuth"> :class="{grey: currentPage==pageCount}"></span>
<div class="video_wid" </p>
id="player"></div> <pdf class="pdf-wrap"
</div> :src="pdfSrc"
:page="currentPage"
@num-pages="pageCount=$event"
@page-loaded="currentPage=$event"
@loaded="loadPdfHandler">
</pdf>
</div>
<div class="inner"
v-else-if="playAuth">
<div class="video_wid"
id="player"></div>
</div>
<div class="inner"
v-else-if="videoSrc">
<video class="video"
:key="videoSrc"
width="100%"
height="100%"
autoplay
controls>
<source :src="videoSrc"
type="video/mp4">
您的浏览器不支持 video 标签
</video>
</div> </div>
<div class="catalog flex-1"> </div>
<div class="list"> <div class="catalog flex-1">
<h4 class="title">{{ courseName }}</h4> <div class="list">
<div class="desc-wrap"> <h4 class="title">{{ courseName }}</h4>
<div class="desc" <div class="desc-wrap">
:class="{active: desShrink}" <div class="desc"
v-html="description"></div>
<i class="arrow"
:class="{active: desShrink}" :class="{active: desShrink}"
v-if="description.length > 40"> v-html="description"></div>
<span>...</span> <i class="arrow"
<img src="@/assets/img/arrow-down.png" :class="{active: desShrink}"
alt="" v-if="description.length > 40">
@click="desShrink = !desShrink"> <span>...</span>
</i> <img src="@/assets/img/arrow-down.png"
</div> alt=""
<div class="chapters"> @click="desShrink = !desShrink">
<template v-if="videoList.length"> </i>
<div class="chapter" </div>
v-for="(item,index) in videoList" <div class="chapters">
:key="index"> <template v-if="videoList.length">
<div class="chapterName">{{ item.name }}</div> <div class="chapter"
<div class="section" v-for="(item,index) in videoList"
v-if="item.subsectionList.length"> :key="index">
<div v-for="(section,i) in item.subsectionList" <div class="chapterName">{{ item.name }}</div>
:key="i" <div class="section"
@click="preview(section, item.name)"> v-if="item.subsectionList.length">
<p class="sectionName" <div v-for="(section,i) in item.subsectionList"
:class="{active: curLink === `${item.name}${section.name}`}">{{ section.name }}</p> :key="i"
</div> @click="preview(section, item.name)">
<p class="sectionName ellipsis"
:class="{active: curLink === `${item.name}${section.name}`}">
<img v-if="section.fileType === 'pptx'"
src="@/assets/img/exts/ppt.png"
alt="">
<img v-else-if="section.fileType === 'mp4'"
src="@/assets/img/exts/video.png"
alt="">
<img v-else-if="section.fileType === 'doc' || section.fileType === 'docx'"
src="@/assets/img/exts/word.png"
alt="">
<img v-else-if="section.fileType === 'txt'"
src="@/assets/img/exts/txt.png"
alt="">
<img v-else-if="section.fileType === 'pdf'"
src="@/assets/img/exts/pdf.png"
alt="">
<img v-else
src="@/assets/img/exts/pic.png"
alt="">
{{ section.name }}
</p>
</div> </div>
</div> </div>
</template> </div>
</div> </template>
</div> </div>
</div> </div>
</div> </div>
</el-card> </div>
</div> </div>
</template> </template>
@ -193,32 +222,36 @@ export default {
this.pdfSrc = ""; this.pdfSrc = "";
this.iframeSrc = ""; this.iframeSrc = "";
if (this.transferType(row.fileType) == "视频") { if (this.transferType(row.fileType) == "视频") {
this.$get(`${this.api.getPlayAuth}/${row.fileId}`).then(res => { //
this.playAuth = res.data.playAuth; if (row.fileId) {
this.$nextTick(() => { this.$get(`${this.api.getPlayAuth}/${row.fileId}`).then(res => {
if (this.player) { this.playAuth = res.data.playAuth;
this.player.replayByVidAndPlayAuth(row.fileId, this.playAuth); this.$nextTick(() => {
} else { if (this.player) {
this.player = new Aliplayer({ this.player.replayByVidAndPlayAuth(row.fileId, this.playAuth);
id: "player", } else {
width: "100%", this.player = new Aliplayer({
autoplay: false, id: "player",
vid: row.fileId, width: "100%",
playauth: this.playAuth, autoplay: false,
encryptType: 1 // vid: row.fileId,
}); playauth: this.playAuth,
} encryptType: 1 //
}); });
}
}).catch(res => { });
});
}).catch(res => { });
} else {
this.videoSrc = row.fileUrl
}
} else if (this.transferType(row.fileType) == "图片") { } else if (this.transferType(row.fileType) == "图片") {
this.coverUrl = row.fileUrl; this.coverUrl = row.fileUrl;
} else if (row.fileType == "pdf") { } else if (row.fileType == "pdf") {
this.pdfSrc = row.fileUrl; this.pdfSrc = row.fileUrl;
this.pdfVisible = true; this.pdfVisible = true;
} else { } else {
this.$get(`${this.api.getSubsection}?subsectionId=${row.id}`).then(res => { this.$get(`${this.api.getSubsectionTheoretical}?subsectionId=${row.id}`).then(res => {
if (row.fileType == "pptx") { if (row.fileType == "pptx") {
this.isPPT = true; this.isPPT = true;
this.isWord = false; this.isWord = false;
@ -286,30 +319,42 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.wrap {
padding: 0 200px;
}
$height: 700px; $height: 700px;
.video_wid, .video_wid,
.cover { .cover {
position: relative; position: relative;
width: 76%; width: 76%;
max-width: 1400px;
height: $height !important; height: $height !important;
border: 0; border: 0;
} }
.page {
/deep/.des {
overflow: auto;
div,
p,
span {
font-family: PingFangSC-Regular !important;
}
}
}
.l-title {
font-size: 17px;
}
.cover { .cover {
background-color: #252528;
img { img {
border-radius: 8px; border-radius: 8px;
} }
&.is-word { &.is-word {
overflow: hidden; overflow: hidden;
} }
} }
.fileIframe { .fileIframe {
height: $height !important; height: $height !important;
} }
.video_wid, .video_wid,
.inner { .inner {
width: 100%; width: 100%;
@ -317,49 +362,56 @@ $height: 700px;
border: 0; border: 0;
overflow: auto; overflow: auto;
} }
.cover.is-word { .cover.is-word {
.inner { .inner {
height: calc(100% + 38px) !important; height: calc(100% + 38px) !important;
margin-top: -38px; margin-top: -38px;
} }
} }
.video_wid:focus { .video_wid:focus {
outline: none; outline: none;
} }
.catalog { .catalog {
flex: 1; width: 296px;
margin-left: 40px; padding: 16px;
margin-left: 12px;
background-color: #252528;
} }
.list { .list {
height: $height; height: calc(700px - 82px);
overflow-y: auto; overflow-y: auto;
padding: 24px 16px;
background: #fff;
.title { .title {
margin-bottom: 8px; margin-bottom: 11px;
color: rgba(0, 0, 0, 0.85); color: #fff;
font-size: 20px; font-size: 16px;
}
.pro-title {
margin-bottom: 5px;
color: #fff;
font-size: 12px;
}
/deep/.el-progress-bar {
width: 92%;
}
/deep/.el-progress__text {
color: #fff;
} }
.desc-wrap { .desc-wrap {
position: relative; position: relative;
.desc { .desc {
font-size: 14px; font-size: 12px;
color: rgba(0, 0, 0, 0.65); color: #fff;
line-height: 22px; line-height: 22px;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
text-overflow: ellipsis;
overflow: hidden;
&.active { &.active {
display: block; display: block;
overflow: visible; overflow: visible;
} }
} }
.arrow { .arrow {
position: absolute; position: absolute;
bottom: 2px; bottom: 2px;
@ -368,61 +420,80 @@ $height: 700px;
justify-content: space-between; justify-content: space-between;
width: 46px; width: 46px;
background-color: #fff; background-color: #fff;
span { span {
font-size: 14px; font-size: 14px;
color: rgba(0, 0, 0, 0.65); color: rgba(0, 0, 0, 0.65);
} }
img { img {
width: 16px; width: 16px;
cursor: pointer; cursor: pointer;
} }
&.active { &.active {
span { span {
opacity: 0; opacity: 0;
} }
img { img {
transform: rotate(180deg); transform: rotate(180deg);
} }
} }
} }
} }
.chapters { .chapters {
margin-top: 16px; margin-top: 16px;
max-height: calc(100% - 53px); max-height: calc(100% - 53px);
overflow: auto; overflow: auto;
} }
.chapter { .chapter {
margin-bottom: 20px; margin-bottom: 20px;
}
.chapterName { .chapterName {
color: rgba(0, 0, 0, 0.85); color: #fff;
font-size: 16px; font-size: 14px;
}
.section {
padding: 5px 15px;
margin-top: 12px;
background-color: #121214;
}
.sectionName {
position: relative;
display: flex;
align-items: center;
padding-right: 15px;
margin: 12px 0;
font-size: 12px;
color: #999;
cursor: pointer;
img {
margin-right: 8px;
} }
.icon {
.section { position: absolute;
padding: 5px 15px; right: 0;
margin-top: 8px; font-size: 14px;
background: rgba(0, 0, 0, 0.02); color: #00c935;
}
.sectionName { .circle {
margin: 10px 0; width: 14px;
font-size: 14px; height: 14px;
color: rgba(0, 0, 0, 0.65); border-radius: 50%;
cursor: pointer; border: 1px solid #ccc;
&.active { }
color: #9278ff; &.active {
} color: #fff;
}
} }
} }
} }
.buy {
text-align: center;
.tips {
margin-bottom: 10px;
font-size: 14px;
}
img {
width: 85%;
}
}
.el-image-viewer__wrapper { .el-image-viewer__wrapper {
transform: translateY(-10px); transform: translateY(-10px);
transition: transform 0.5s; transition: transform 0.5s;
@ -431,23 +502,19 @@ $height: 700px;
transform: translateY(0); transform: translateY(0);
} }
} }
.el-image-viewer__close { .el-image-viewer__close {
z-index: 2000; z-index: 2000;
top: 15px; top: 15px;
right: 15px; right: 15px;
&.doc-close { &.doc-close {
i { i {
color: #000 !important; color: #000 !important;
} }
} }
} }
.list::-webkit-scrollbar { .list::-webkit-scrollbar {
width: 4px; width: 4px;
} }
.list::-webkit-scrollbar-thumb { .list::-webkit-scrollbar-thumb {
border-radius: 10px; border-radius: 10px;
background: rgba(0, 0, 0, 0.06); background: rgba(0, 0, 0, 0.06);
@ -458,7 +525,6 @@ $height: 700px;
position: absolute; position: absolute;
background-color: rgb(57, 58, 61); background-color: rgb(57, 58, 61);
} }
.word-mask { .word-mask {
z-index: 9; z-index: 9;
position: absolute; position: absolute;
@ -467,7 +533,6 @@ $height: 700px;
width: 100%; width: 100%;
background-color: rgb(243, 242, 241); background-color: rgb(243, 242, 241);
} }
.word-mask1 { .word-mask1 {
z-index: 9; z-index: 9;
position: absolute; position: absolute;
@ -476,13 +541,11 @@ $height: 700px;
width: 100%; width: 100%;
background-color: #185abd; background-color: #185abd;
} }
.word-mask2 { .word-mask2 {
z-index: 9; z-index: 9;
position: absolute; position: absolute;
background-color: transparent; background-color: transparent;
} }
.excel-mask1 { .excel-mask1 {
z-index: 9; z-index: 9;
position: absolute; position: absolute;
@ -491,29 +554,14 @@ $height: 700px;
width: 60%; width: 60%;
background-color: #107c41; background-color: #107c41;
} }
/deep/ .pdf-dia {
border-radius: 0 !important;
.el-dialog__header {
display: none;
}
.el-dialog__body {
padding: 0;
}
.el-dialog__headerbtn {
top: 10px;
.el-dialog__close {
color: #fff;
font-size: 16px;
}
}
}
.pdf { .pdf {
position: relative;
.full {
position: absolute;
top: 7px;
right: 10px;
cursor: pointer;
}
.arrow { .arrow {
padding: 10px 0; padding: 10px 0;
display: flex; display: flex;
@ -522,14 +570,12 @@ $height: 700px;
font-size: 16px; font-size: 16px;
color: #fff; color: #fff;
background-color: #333; background-color: #333;
.turn { .turn {
margin: 0 10px; margin: 0 10px;
font-size: 18px; font-size: 18px;
cursor: pointer; cursor: pointer;
} }
} }
.pdf-wrap { .pdf-wrap {
width: 80%; width: 80%;
margin: 0 auto; margin: 0 auto;

Loading…
Cancel
Save