UI_2022-02-10
parent
6277ff7435
commit
e661c5679d
17 changed files with 2655 additions and 0 deletions
After Width: | Height: | Size: 239 B |
After Width: | Height: | Size: 43 KiB |
@ -0,0 +1,441 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<div class="evaluation_con"> |
||||||
|
<div class="title">能力测评</div> |
||||||
|
<div class="ques-wrap"> |
||||||
|
<p class="serial">{{ question.currentQuestionSortNo }}/{{ question.totalQuestionNum }}</p> |
||||||
|
<p class="type">({{ question.questionTypeName }})</p> |
||||||
|
<div class="ques">{{ question.questionStem }}</div> |
||||||
|
<div class="countdown flex-center"> |
||||||
|
<img src="@/assets/img/hourglass.png" alt=""> |
||||||
|
<span>倒计时:{{ countdown }}</span> |
||||||
|
</div> |
||||||
|
<ul class="options" :class="{isDone}"> |
||||||
|
<li v-for="(item,key) in question.options" :key="key" :class="{active: selected.includes(key)}" |
||||||
|
@click="selectOption(key)"><em>{{ key }}.</em><span>{{ item }}</span></li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="footer-con" v-if="!isDone"> |
||||||
|
<template v-if="lastOne"> |
||||||
|
<el-button @click="prevQues">上一题</el-button> |
||||||
|
<el-button type="primary" @click="submitQues">提交</el-button> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<el-button class="first" @click="prevQues">上一题</el-button> |
||||||
|
<el-button class="second" type="primary" @click="nextQues">下一题</el-button> |
||||||
|
</template> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<!-- 提交成绩弹框 --> |
||||||
|
<el-dialog :visible.sync="resultVisible" width="30%" custom-class="result_dialog" center :close-on-click-modal="false" @close="toEvaluation"> |
||||||
|
<div class="result"><span>{{ result.isPassed }}</span></div> |
||||||
|
<div class="ques-wrap"> |
||||||
|
<div class="point"> |
||||||
|
<span>{{ result.totalScore }}</span>分 |
||||||
|
</div> |
||||||
|
<p class="tips"> |
||||||
|
{{ result.isPassed == "通过" ? "恭喜" : "" }}你答对{{ result.correctQuestionNum}}题,正确率{{ result.correctRate }}!</p> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div slot="footer" class="dialog-footer"> |
||||||
|
<el-button class="first" @click="toEvaluation">再试一次</el-button> |
||||||
|
<el-button class="second" type="primary" @click="getDetail">成绩详情</el-button> |
||||||
|
</div> |
||||||
|
</el-dialog> |
||||||
|
|
||||||
|
<!-- 成绩详情弹框 --> |
||||||
|
<el-dialog :visible.sync="detailVisible" width="30%" custom-class="detail_dialog" center :close-on-click-modal="false" @close="toEvaluation"> |
||||||
|
<div class="title">成绩详情</div> |
||||||
|
<div style="min-height: 370px"> |
||||||
|
<el-table :data="detailData" height="340" border style="width: 100%"> |
||||||
|
<el-table-column type="index" label="序号" width="60" align="center"></el-table-column> |
||||||
|
<el-table-column prop="date" label="正误" min-width="45" align="center"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<img v-if="scope.row.questionScore" width="15" src="@/assets/img/true.png" alt=""> |
||||||
|
<img v-else width="15" src="@/assets/img/false.png" alt=""> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column prop="questionScore" label="得分" min-width="45" align="center"></el-table-column> |
||||||
|
<el-table-column prop="answer" label="正确答案" min-width="70" align="center"></el-table-column> |
||||||
|
<el-table-column prop="userAnswer" label="你的答案" min-width="70" align="center"></el-table-column> |
||||||
|
<el-table-column prop="answerAnalysis" label="解析" min-width="80"></el-table-column> |
||||||
|
</el-table> |
||||||
|
</div> |
||||||
|
<p class="total">得分:{{ totalScore }}分</p> |
||||||
|
</el-dialog> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import util from "@/libs/util"; |
||||||
|
import { mapActions } from "vuex"; |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
timer: null, |
||||||
|
question: { |
||||||
|
options: {} |
||||||
|
}, |
||||||
|
countdown: "", |
||||||
|
selected: "", |
||||||
|
isDone: false, |
||||||
|
history: [], |
||||||
|
lastOne: false, |
||||||
|
resultVisible: false, |
||||||
|
result: {}, |
||||||
|
detailVisible: false, |
||||||
|
detailData: [], |
||||||
|
totalScore: 0, |
||||||
|
} |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
question: { |
||||||
|
handler(newVal, oldVal) { |
||||||
|
for (let n in newVal.options) { |
||||||
|
if (newVal.options[n] == "") delete (newVal.options[n]); |
||||||
|
} |
||||||
|
}, |
||||||
|
deep: true |
||||||
|
} |
||||||
|
}, |
||||||
|
mounted() { |
||||||
|
this.toEvaluation(); // 开始测评 |
||||||
|
this.$once("hook:beforeDestroy", function() { |
||||||
|
clearInterval(this.timer); |
||||||
|
this.timer = null; |
||||||
|
}); |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
...mapActions("appraisal", [ |
||||||
|
"setAnswerHistory" |
||||||
|
]), |
||||||
|
async getDetail() { // 成绩详情 |
||||||
|
let res = await this.$get(this.api.experimentDetail, { |
||||||
|
evaluationRecordId: this.question.id |
||||||
|
}); |
||||||
|
if (res.data) { |
||||||
|
this.totalScore = res.data.totalScore; |
||||||
|
this.detailData = res.data.evaluationDetailVOS; |
||||||
|
this.resultVisible = false; |
||||||
|
this.detailVisible = true; |
||||||
|
} |
||||||
|
}, |
||||||
|
async submitQues() { // 提交 |
||||||
|
if (!this.selected) return util.warningMsg("请选择答案"); |
||||||
|
let res = await this.$post(this.api.experimentSubmit, { |
||||||
|
id: this.question.id, |
||||||
|
currentQuestionSortNo: this.question.currentQuestionSortNo, |
||||||
|
// userAnswer: this.selected.split('').sort().join(','), |
||||||
|
userAnswer: this.selected, |
||||||
|
userId: this.userId, |
||||||
|
types: 0 |
||||||
|
}); |
||||||
|
if (res.data) { |
||||||
|
this.result = res.data; |
||||||
|
this.evaluationVisible = false; |
||||||
|
this.resultVisible = true; |
||||||
|
} |
||||||
|
}, |
||||||
|
async toEvaluation() { // 再试一次 |
||||||
|
clearInterval(this.timer); |
||||||
|
this.lastOne = false; |
||||||
|
this.selected = ""; |
||||||
|
this.resultVisible = false; |
||||||
|
this.history = []; |
||||||
|
this.start(); |
||||||
|
this.getCountdown(); |
||||||
|
}, |
||||||
|
handleQues() { |
||||||
|
this.question.options = {}; |
||||||
|
for (let n in this.question) { |
||||||
|
if (n.includes("option") && n != "options") { |
||||||
|
this.question.options[n.replace("option", "")] = this.question[n]; |
||||||
|
} |
||||||
|
} |
||||||
|
if (this.question.currentQuestionSortNo == this.question.totalQuestionNum) { |
||||||
|
this.lastOne = true; |
||||||
|
} else { |
||||||
|
this.lastOne = false; |
||||||
|
} |
||||||
|
}, |
||||||
|
async start() { |
||||||
|
let res = await this.$get(this.api.experimentStart, { userId: this.userId, types: 0 }); |
||||||
|
if (res.data) { |
||||||
|
this.question = res.data; |
||||||
|
this.isDone = false; |
||||||
|
this.question.currentQuestionSortNo == 1 && this.setAnswerHistory([]); |
||||||
|
this.handleQues(); |
||||||
|
this.evaluationVisible = true; |
||||||
|
} else { |
||||||
|
util.warningMsg(res.message); |
||||||
|
} |
||||||
|
}, |
||||||
|
countDown(time) { |
||||||
|
this.countdown = time; |
||||||
|
this.timer = setInterval(() => { |
||||||
|
let timeList = this.countdown.split(":"); |
||||||
|
let total = Number.parseInt(timeList[1] * 60) + Number.parseInt(timeList[2]); |
||||||
|
if (total > 0) { |
||||||
|
--total; |
||||||
|
let minutes = Math.floor(total / 60); |
||||||
|
let seconds = Math.floor(total % 60); |
||||||
|
this.countdown = `00:${util.formateTime(minutes)}:${util.formateTime(seconds)}`; |
||||||
|
} else { |
||||||
|
this.isDone = true; |
||||||
|
util.warningMsg("测评时间结束"); |
||||||
|
clearInterval(this.timer); |
||||||
|
this.prevQues(); |
||||||
|
} |
||||||
|
}, 1000); |
||||||
|
}, |
||||||
|
async getCountdown() { |
||||||
|
let res = await this.$get(this.api.experimentRemaining, { userId: this.userId }); |
||||||
|
res.data && this.countDown(res.data); |
||||||
|
// this.countDown('00:00:05') |
||||||
|
}, |
||||||
|
selectOption(option) { |
||||||
|
if (!this.isDone) { |
||||||
|
if (this.selected.includes(option)) { |
||||||
|
this.selected = this.selected.replace(option, ""); |
||||||
|
} else { |
||||||
|
if (this.question.questionType == 2) { |
||||||
|
this.selected += option; |
||||||
|
} else { |
||||||
|
this.selected = option; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
getHistory() { |
||||||
|
this.history = this.$store.state.appraisal.answerHistory; |
||||||
|
}, |
||||||
|
async nextQues() { // 下一题 |
||||||
|
if (!this.selected) return util.warningMsg("请选择答案"); |
||||||
|
this.getHistory(); |
||||||
|
if (this.history.length > this.question.currentQuestionSortNo) { |
||||||
|
this.history[this.question.currentQuestionSortNo - 1] = this.selected; |
||||||
|
} else if (this.history.length < this.question.currentQuestionSortNo) { |
||||||
|
this.history.push(this.selected); |
||||||
|
} |
||||||
|
this.setAnswerHistory(this.history); |
||||||
|
let res = await this.$post(this.api.experimentNext, { |
||||||
|
id: this.question.id, |
||||||
|
currentQuestionSortNo: this.question.currentQuestionSortNo, |
||||||
|
// userAnswer: this.selected.split('').sort().join(',') |
||||||
|
userAnswer: this.selected |
||||||
|
}); |
||||||
|
if (res.data) { |
||||||
|
this.question = res.data; |
||||||
|
this.selected = ""; |
||||||
|
if (this.history.length >= this.question.currentQuestionSortNo) { |
||||||
|
this.selected = this.history[this.question.currentQuestionSortNo - 1]; |
||||||
|
} else { |
||||||
|
this.selected = ""; |
||||||
|
} |
||||||
|
this.handleQues(); |
||||||
|
} |
||||||
|
}, |
||||||
|
async prevQues() { // 上一题 |
||||||
|
if (this.question.currentQuestionSortNo > 1) { |
||||||
|
this.getHistory(); |
||||||
|
let res = await this.$post(this.api.experimentPrevious, { |
||||||
|
id: this.question.id, |
||||||
|
currentQuestionSortNo: this.question.currentQuestionSortNo, |
||||||
|
// userAnswer: this.selected.split('').sort().join(',') |
||||||
|
userAnswer: this.selected |
||||||
|
}); |
||||||
|
if (res.data) { |
||||||
|
this.question = res.data; |
||||||
|
this.selected = this.history[this.question.currentQuestionSortNo - 1]; |
||||||
|
this.isDone ? this.submitQues() : this.handleQues(); |
||||||
|
} |
||||||
|
} else if (this.isDone) { |
||||||
|
if (!this.selected) this.selected = "A"; |
||||||
|
this.submitQues(); |
||||||
|
} |
||||||
|
}, |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
|
||||||
|
/deep/ .evaluation_con { |
||||||
|
min-height: 700px; |
||||||
|
width: 550px; |
||||||
|
background: url(../../../assets/img/evaluation_bg1.png) 0 0/100% 100% no-repeat; |
||||||
|
border-radius: 20px; |
||||||
|
margin: 0 auto; |
||||||
|
.el-dialog__body { |
||||||
|
flex: 1; |
||||||
|
overflow: auto; |
||||||
|
} |
||||||
|
.title { |
||||||
|
padding-top: 45px; |
||||||
|
margin-bottom: 55px; |
||||||
|
text-align: center; |
||||||
|
font-size: 24px |
||||||
|
} |
||||||
|
.ques-wrap { |
||||||
|
width: 70%; |
||||||
|
margin: 0 auto; |
||||||
|
.serial { |
||||||
|
font-size: 12px; |
||||||
|
text-align: center; |
||||||
|
} |
||||||
|
.type { |
||||||
|
color: #666; |
||||||
|
} |
||||||
|
.ques { |
||||||
|
margin: 20px 0; |
||||||
|
min-height: 145px; |
||||||
|
color: #666; |
||||||
|
font-size: 16px; |
||||||
|
} |
||||||
|
.countdown { |
||||||
|
margin-bottom: 20px; |
||||||
|
justify-content: center; |
||||||
|
text-align: center; |
||||||
|
color: #DC3434; |
||||||
|
font-size: 14px; |
||||||
|
img { |
||||||
|
width: 15px !important; |
||||||
|
margin-right: 10px; |
||||||
|
} |
||||||
|
} |
||||||
|
.options { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
min-height: 340px; |
||||||
|
li { |
||||||
|
padding: 0 15px; |
||||||
|
margin-bottom: 15px; |
||||||
|
line-height: 40px; |
||||||
|
border: 1px solid #9070FF; |
||||||
|
border-radius: 20px; |
||||||
|
color: #666; |
||||||
|
cursor: pointer; |
||||||
|
em { |
||||||
|
margin-right: 10px; |
||||||
|
font-weight: bold; |
||||||
|
font-style: normal; |
||||||
|
font-size: 16px; |
||||||
|
} |
||||||
|
span { |
||||||
|
font-size: 16px; |
||||||
|
} |
||||||
|
} |
||||||
|
li:hover { |
||||||
|
color: #fff; |
||||||
|
background-color: #b038bb; |
||||||
|
border-color: #b038bb; |
||||||
|
} |
||||||
|
li.active { |
||||||
|
color: #fff; |
||||||
|
background-color: #916CFF; |
||||||
|
border-color: #916CFF; |
||||||
|
} |
||||||
|
} |
||||||
|
.options.isDone { |
||||||
|
min-height: 395px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.footer-con{ |
||||||
|
text-align: center; |
||||||
|
padding-bottom: 20px; |
||||||
|
.first { |
||||||
|
color: #fff; |
||||||
|
background-color: #9268FF; |
||||||
|
border-color: #9268FF; |
||||||
|
} |
||||||
|
.second { |
||||||
|
color: #fff; |
||||||
|
background-color: #E371DA; |
||||||
|
border-color: #E371DA; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/deep/ .result_dialog { |
||||||
|
min-height: 500px; |
||||||
|
background: url(../../../assets/img/evaluation_bg2.png) 0 0/100% 100% no-repeat; |
||||||
|
border-radius: 20px; |
||||||
|
.el-dialog__headerbtn .el-dialog__close { |
||||||
|
color: #5a5a5a; |
||||||
|
font-size: 28px; |
||||||
|
} |
||||||
|
.el-dialog__header{ |
||||||
|
border-bottom: 0px; |
||||||
|
} |
||||||
|
.el-dialog__footer{ |
||||||
|
border-top: 0px; |
||||||
|
} |
||||||
|
.result { |
||||||
|
margin-top: 60px; |
||||||
|
text-align: center; |
||||||
|
color: #fff; |
||||||
|
font-size: 24px; |
||||||
|
} |
||||||
|
.point { |
||||||
|
margin: 30px 0 20px; |
||||||
|
text-align: center; |
||||||
|
font-size: 30px; |
||||||
|
color: #666; |
||||||
|
span { |
||||||
|
font-size: 120px; |
||||||
|
font-weight: bold; |
||||||
|
} |
||||||
|
} |
||||||
|
.tips { |
||||||
|
color: #666; |
||||||
|
text-align: center; |
||||||
|
font-size: 14px; |
||||||
|
} |
||||||
|
.dialog-footer{ |
||||||
|
.first { |
||||||
|
color: #fff; |
||||||
|
background-color: #9268FF; |
||||||
|
border-color: #9268FF; |
||||||
|
} |
||||||
|
.second { |
||||||
|
color: #fff; |
||||||
|
background-color: #E371DA; |
||||||
|
border-color: #E371DA; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/deep/ .detail_dialog { |
||||||
|
background: url(../../../assets/img/evaluation_bg3.png) 0 0/100% 100% no-repeat; |
||||||
|
border-radius: 20px; |
||||||
|
.el-dialog__headerbtn .el-dialog__close { |
||||||
|
color: #5a5a5a; |
||||||
|
font-size: 28px; |
||||||
|
} |
||||||
|
.el-dialog__header{ |
||||||
|
border-bottom: 0px; |
||||||
|
} |
||||||
|
.el-dialog__footer{ |
||||||
|
border-top: 0px; |
||||||
|
} |
||||||
|
.title { |
||||||
|
margin-top: -20px; |
||||||
|
margin-bottom: 45px; |
||||||
|
text-align: center; |
||||||
|
font-size: 24px |
||||||
|
} |
||||||
|
.el-table__header th:nth-last-child(2) { |
||||||
|
text-align: center; |
||||||
|
} |
||||||
|
.total { |
||||||
|
margin-top: 20px; |
||||||
|
text-align: center; |
||||||
|
font-size: 30px; |
||||||
|
color: #DC3434; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
@ -0,0 +1,462 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<div class="flex-between"> |
||||||
|
<el-page-header @back="goBack" :content="'课程详情'"></el-page-header> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<div class="flex p-40"> |
||||||
|
<div class="cover" :class="{'is-word': showMask1}"> |
||||||
|
<img v-if="coverUrl" :src="coverUrl" alt="" width="100%" height="100%"> |
||||||
|
<template v-else-if="iframeSrc"> |
||||||
|
<iframe class="inner fileIframe" id="fileIframe" :src="iframeSrc" frameborder="0"></iframe> |
||||||
|
<template v-if="showMask"> |
||||||
|
<div class="mask" 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> |
||||||
|
<div class="pdf inner" v-else-if="pdfSrc"> |
||||||
|
<p class="arrow"> |
||||||
|
<span @click="changePdfPage(0)" class="turn el-icon-arrow-left" :class="{grey: currentPage==1}"></span> |
||||||
|
{{currentPage}} / {{pageCount}} |
||||||
|
<span @click="changePdfPage(1)" class="turn el-icon-arrow-right" :class="{grey: currentPage==pageCount}"></span> |
||||||
|
</p> |
||||||
|
<pdf |
||||||
|
class="pdf-wrap" |
||||||
|
: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> |
||||||
|
<div class="catalog flex-1"> |
||||||
|
<div class="list"> |
||||||
|
<h4 class="title">{{courseName}}</h4> |
||||||
|
<div class="desc-wrap"> |
||||||
|
<div class="desc" :class="{active: desShrink}" v-html="description"></div> |
||||||
|
<i class="arrow" :class="{active: desShrink}" v-if="description.length > 40"> |
||||||
|
<span>...</span> |
||||||
|
<img src="@/assets/img/arrow-down.png" alt="" @click="desShrink = !desShrink"> |
||||||
|
</i> |
||||||
|
</div> |
||||||
|
<div class="chapters"> |
||||||
|
<template v-if="videoList.length"> |
||||||
|
<div class="chapter" v-for="(item,index) in videoList" :key="index"> |
||||||
|
<div class="chapterName">{{item.name}}</div> |
||||||
|
<div class="section" v-if="item.subsectionList.length"> |
||||||
|
<div class="sectionName" v-for="(section,i) in item.subsectionList" :key="i" @click="preview(section)">{{section.name}}</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { mapState } from 'vuex'; |
||||||
|
import pdf from "vue-pdf"; |
||||||
|
import 'quill/dist/quill.core.css'; |
||||||
|
import 'quill/dist/quill.snow.css'; |
||||||
|
import 'quill/dist/quill.bubble.css'; |
||||||
|
import bus from '@/libs/bus' |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
id: this.$route.query.id, |
||||||
|
video: 'http://liuwanr.oss-cn-shenzhen.aliyuncs.com/mp4/20200519/1589871025648.mp4', |
||||||
|
videoSrc: '', |
||||||
|
userId: this.$store.state.userId, |
||||||
|
videoList: [], |
||||||
|
courseName: '', |
||||||
|
description: '', |
||||||
|
coverUrl: '', |
||||||
|
playAuth: '', |
||||||
|
player: null, |
||||||
|
previewImg: '', |
||||||
|
iframeSrc: '', |
||||||
|
isWord: false, |
||||||
|
isPPT: false, |
||||||
|
isExcel: false, |
||||||
|
showMask: false, |
||||||
|
showMask1: false, |
||||||
|
showMask2: false, |
||||||
|
closePosi: { |
||||||
|
top: '80px' |
||||||
|
}, |
||||||
|
pdfVisible: false, |
||||||
|
pdfSrc: '', |
||||||
|
currentPage: 0, // pdf文件页码 |
||||||
|
pageCount: 0, // pdf文件总页数 |
||||||
|
fileType: 'pdf', // 文件类型 |
||||||
|
desShrink: false |
||||||
|
}; |
||||||
|
}, |
||||||
|
computed: { |
||||||
|
...mapState({ |
||||||
|
courseId: state => state.courseId, |
||||||
|
classId: state => state.classId, |
||||||
|
}), |
||||||
|
}, |
||||||
|
components: { pdf }, |
||||||
|
mounted() { |
||||||
|
bus.$emit('setBg','none') |
||||||
|
this.insertScript() |
||||||
|
this.getData() |
||||||
|
this.getChapter() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
goBack() { |
||||||
|
this.$router.back(); |
||||||
|
}, |
||||||
|
async getData(){ |
||||||
|
let res = await this.$get(`${this.api.getCourseById}/${this.id}`) |
||||||
|
this.courseName = res.course.name |
||||||
|
this.description = res.course.description |
||||||
|
this.coverUrl = res.course.coverUrl |
||||||
|
}, |
||||||
|
async getChapter(){ |
||||||
|
let res = await this.$get(`${this.api.queryChaptersAndSubsections}/${this.id}`) |
||||||
|
this.videoList = res.chapterList |
||||||
|
}, |
||||||
|
insertScript(){ |
||||||
|
const linkTag = document.createElement('link'); |
||||||
|
linkTag.rel = 'stylesheet'; |
||||||
|
linkTag.href = 'https://g.alicdn.com/de/prismplayer/2.8.2/skins/default/aliplayer-min.css'; |
||||||
|
document.body.appendChild(linkTag); |
||||||
|
|
||||||
|
const scriptTag = document.createElement('script'); |
||||||
|
scriptTag.type = 'text/javascript'; |
||||||
|
scriptTag.src = 'https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js'; |
||||||
|
document.body.appendChild(scriptTag); |
||||||
|
}, |
||||||
|
transferType(ext){ |
||||||
|
if('jpg,jpeg,png,gif,svg,psd'.includes(ext)) return '图片' |
||||||
|
if('mp4,3gp,mov,m4v,avi,dat,mkv,flv,vob,rmvb,rm,qlv'.includes(ext)) return '视频' |
||||||
|
return ext |
||||||
|
}, |
||||||
|
preview(row){ |
||||||
|
this.player = null |
||||||
|
this.playauth = '' |
||||||
|
this.coverUrl = '' |
||||||
|
this.pdfSrc = '' |
||||||
|
this.iframeSrc = '' |
||||||
|
this.isPPT = false |
||||||
|
this.isWord = false |
||||||
|
this.isExcel = false |
||||||
|
if(this.transferType(row.fileType) == '视频'){ |
||||||
|
this.$get(`${this.api.getPlayAuth}/${row.fileId}`).then(res => { |
||||||
|
this.playAuth = res.playAuth |
||||||
|
this.$nextTick(() => { |
||||||
|
if(this.player){ |
||||||
|
this.player.replayByVidAndPlayAuth(row.fileId,this.playAuth) |
||||||
|
}else{ |
||||||
|
this.player = new Aliplayer({ |
||||||
|
id: 'player', |
||||||
|
width: '100%', |
||||||
|
autoplay: false, |
||||||
|
vid : row.fileId, |
||||||
|
playauth : this.playAuth, |
||||||
|
encryptType:1, //当播放私有加密流时需要设置。 |
||||||
|
}) |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
}).catch(res => {}) |
||||||
|
}else if(this.transferType(row.fileType) == '图片'){ |
||||||
|
this.coverUrl = row.fileUrl |
||||||
|
}else if(row.fileType == 'pdf'){ |
||||||
|
this.pdfSrc = row.fileUrl |
||||||
|
this.pdfVisible = true |
||||||
|
}else{ |
||||||
|
this.$get(`${this.api.getSubsection}/${row.id}`).then(res => { |
||||||
|
if(row.fileType == 'pptx'){ |
||||||
|
this.isPPT = true |
||||||
|
this.isWord = false |
||||||
|
this.isExcel = false |
||||||
|
}else if(row.fileType == 'doc' || row.fileType == 'docx'){ |
||||||
|
this.isPPT = false |
||||||
|
this.isWord = true |
||||||
|
this.isExcel = false |
||||||
|
}else if(row.fileType == 'xls' || row.fileType == 'xlsx'){ |
||||||
|
this.isExcel = true |
||||||
|
this.isPPT = false |
||||||
|
this.isWord = false |
||||||
|
}else{ |
||||||
|
this.isPPT = false |
||||||
|
this.isWord = false |
||||||
|
this.isExcel = false |
||||||
|
} |
||||||
|
if(this.isPPT){ |
||||||
|
this.showMask = true |
||||||
|
}else{ |
||||||
|
this.showMask = false |
||||||
|
} |
||||||
|
if(this.isWord){ |
||||||
|
this.showMask1 = true |
||||||
|
}else{ |
||||||
|
this.showMask1 = false |
||||||
|
} |
||||||
|
if(this.isExcel){ |
||||||
|
this.showMask2 = true |
||||||
|
}else{ |
||||||
|
this.showMask2 = false |
||||||
|
} |
||||||
|
this.iframeSrc = res.previewUrl |
||||||
|
}) |
||||||
|
.catch(err => { |
||||||
|
}); |
||||||
|
} |
||||||
|
}, |
||||||
|
closePlayer(){ |
||||||
|
this.playAuth = '' |
||||||
|
this.player.pause() |
||||||
|
}, |
||||||
|
closeIframe(){ |
||||||
|
this.iframeSrc = '' |
||||||
|
this.showMask = false |
||||||
|
this.showMask1 = false |
||||||
|
}, |
||||||
|
closePdf(){ |
||||||
|
this.pdfSrc = '' |
||||||
|
this.currentPage = 1 |
||||||
|
}, |
||||||
|
changePdfPage (val) { |
||||||
|
if (val === 0 && this.currentPage > 1) { |
||||||
|
this.currentPage-- |
||||||
|
} |
||||||
|
if (val === 1 && this.currentPage < this.pageCount) { |
||||||
|
this.currentPage++ |
||||||
|
} |
||||||
|
}, |
||||||
|
loadPdfHandler (e) { |
||||||
|
this.currentPage = 1 |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
$height: 700px; |
||||||
|
.video_wid,.cover{ |
||||||
|
position: relative; |
||||||
|
width: 76%; |
||||||
|
max-width: 1400px; |
||||||
|
height: $height !important; |
||||||
|
border: 0; |
||||||
|
} |
||||||
|
.cover{ |
||||||
|
img{ |
||||||
|
border-radius: 8px; |
||||||
|
} |
||||||
|
&.is-word{ |
||||||
|
overflow: hidden; |
||||||
|
} |
||||||
|
} |
||||||
|
.fileIframe{ |
||||||
|
height: $height !important; |
||||||
|
} |
||||||
|
.video_wid,.inner{ |
||||||
|
width: 100%; |
||||||
|
height: 100% !important; |
||||||
|
border: 0; |
||||||
|
overflow: auto; |
||||||
|
} |
||||||
|
.cover.is-word{ |
||||||
|
.inner{ |
||||||
|
height: calc(100% + 38px) !important; |
||||||
|
margin-top: -38px; |
||||||
|
} |
||||||
|
} |
||||||
|
.video_wid:focus{ |
||||||
|
outline: none; |
||||||
|
} |
||||||
|
.catalog{ |
||||||
|
margin-left: 40px; |
||||||
|
} |
||||||
|
.list{ |
||||||
|
height: $height; |
||||||
|
overflow-y: auto; |
||||||
|
padding: 24px 16px; |
||||||
|
background: #fff; |
||||||
|
.title{ |
||||||
|
margin-bottom: 8px; |
||||||
|
color: rgba(0, 0, 0, 0.85); |
||||||
|
font-size: 20px; |
||||||
|
} |
||||||
|
.desc-wrap{ |
||||||
|
position: relative; |
||||||
|
.desc{ |
||||||
|
font-size: 14px; |
||||||
|
color: rgba(0, 0, 0, 0.65); |
||||||
|
line-height: 22px; |
||||||
|
@include mul-ellipsis(2); |
||||||
|
&.active{ |
||||||
|
display: block; |
||||||
|
overflow: visible; |
||||||
|
} |
||||||
|
} |
||||||
|
.arrow{ |
||||||
|
position: absolute; |
||||||
|
bottom: 2px; |
||||||
|
right: 0; |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
width: 46px; |
||||||
|
background-color: #fff; |
||||||
|
span{ |
||||||
|
font-size: 14px; |
||||||
|
color: rgba(0, 0, 0, 0.65); |
||||||
|
} |
||||||
|
img{ |
||||||
|
width: 16px; |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
&.active{ |
||||||
|
span{ |
||||||
|
opacity: 0; |
||||||
|
} |
||||||
|
img{ |
||||||
|
transform: rotate(180deg); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.chapters{ |
||||||
|
margin-top: 16px; |
||||||
|
max-height: calc(100% - 53px); |
||||||
|
overflow: auto; |
||||||
|
} |
||||||
|
.chapter{ |
||||||
|
margin-bottom: 20px; |
||||||
|
.chapterName{ |
||||||
|
color: rgba(0, 0, 0, 0.85); |
||||||
|
font-size: 16px; |
||||||
|
} |
||||||
|
.section{ |
||||||
|
padding: 5px 15px; |
||||||
|
margin-top: 8px; |
||||||
|
background: rgba(0, 0, 0, 0.02); |
||||||
|
.sectionName{ |
||||||
|
margin: 10px 0; |
||||||
|
font-size: 14px; |
||||||
|
color: rgba(0, 0, 0, 0.65); |
||||||
|
cursor: pointer; |
||||||
|
@include ellipsis; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.el-image-viewer__wrapper{ |
||||||
|
transform: translateY(-10px); |
||||||
|
transition: transform .5s; |
||||||
|
|
||||||
|
&.active{ |
||||||
|
transform: translateY(0) |
||||||
|
} |
||||||
|
} |
||||||
|
.el-image-viewer__close{ |
||||||
|
z-index: 2000; |
||||||
|
top: 15px; |
||||||
|
right: 15px; |
||||||
|
&.doc-close{ |
||||||
|
i{ |
||||||
|
color: #000 !important; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.list::-webkit-scrollbar { |
||||||
|
width: 4px; |
||||||
|
} |
||||||
|
.list::-webkit-scrollbar-thumb { |
||||||
|
border-radius: 10px; |
||||||
|
background: rgba(0, 0, 0, 0.06); |
||||||
|
} |
||||||
|
|
||||||
|
.mask{ |
||||||
|
z-index: 9; |
||||||
|
position: absolute; |
||||||
|
background-color: rgb(57,58,61); |
||||||
|
} |
||||||
|
.word-mask{ |
||||||
|
z-index: 9; |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
right: 0; |
||||||
|
width: 100%; |
||||||
|
background-color: rgb(243,242,241); |
||||||
|
} |
||||||
|
.word-mask1{ |
||||||
|
z-index: 9; |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
right: 0; |
||||||
|
width: 100%; |
||||||
|
background-color: #185abd; |
||||||
|
} |
||||||
|
.word-mask2{ |
||||||
|
z-index: 9; |
||||||
|
position: absolute; |
||||||
|
background-color: transparent; |
||||||
|
} |
||||||
|
.excel-mask1{ |
||||||
|
z-index: 9; |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
left: 20%; |
||||||
|
width: 60%; |
||||||
|
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{ |
||||||
|
.arrow{ |
||||||
|
padding: 10px 0; |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
font-size: 16px; |
||||||
|
color: #fff; |
||||||
|
background-color: #333; |
||||||
|
.turn{ |
||||||
|
margin: 0 10px; |
||||||
|
font-size: 18px; |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
} |
||||||
|
.pdf-wrap{ |
||||||
|
width: 80%; |
||||||
|
margin: 0 auto; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,133 @@ |
|||||||
|
<template> |
||||||
|
<div style="padding-bottom: 20px"> |
||||||
|
|
||||||
|
<div class="article"> |
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<div class="flex-between"> |
||||||
|
<el-page-header @back="goBack" :content="'资讯详情'"></el-page-header> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<div class="page"> |
||||||
|
<h6 class="title">{{title}}</h6> |
||||||
|
<div class="metas"> |
||||||
|
<span>作者: {{author}}</span> |
||||||
|
<span>{{date.replace(' 00:00:00','')}}</span> |
||||||
|
<span>浏览量:{{viewCount}}</span> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="cover"> |
||||||
|
<img :src="coverUrl" alt=""> |
||||||
|
</div> |
||||||
|
<div class="content ql-editor" v-html="content"></div> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { Loading } from 'element-ui'; |
||||||
|
import 'quill/dist/quill.core.css'; |
||||||
|
import 'quill/dist/quill.snow.css'; |
||||||
|
import 'quill/dist/quill.bubble.css'; |
||||||
|
export default { |
||||||
|
name: 'article', |
||||||
|
data() { |
||||||
|
return { |
||||||
|
firstName: this.$route.query.first, |
||||||
|
secondName: this.$route.query.second, |
||||||
|
id: this.$route.query.id, |
||||||
|
coverUrl: '', |
||||||
|
author: '', |
||||||
|
date: '', |
||||||
|
title: '', |
||||||
|
content: '', |
||||||
|
viewCount: 0, |
||||||
|
loadIns: null |
||||||
|
} |
||||||
|
}, |
||||||
|
mounted() { |
||||||
|
this.getData() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
goBack() { |
||||||
|
this.$router.back(); |
||||||
|
}, |
||||||
|
getData() { |
||||||
|
this.loadIns = Loading.service() |
||||||
|
this.$get(`${this.api.getArticle}/${this.id}`) |
||||||
|
.then(res => { |
||||||
|
let data = res.article |
||||||
|
this.coverUrl = data.coverUrl |
||||||
|
this.author = data.author |
||||||
|
this.date = data.date |
||||||
|
this.title = data.title |
||||||
|
this.content = data.content |
||||||
|
this.viewCount = data.viewCount |
||||||
|
this.loadIns.close() |
||||||
|
}) |
||||||
|
.catch(err => { |
||||||
|
this.loadIns.close() |
||||||
|
}); |
||||||
|
}, |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.article{ |
||||||
|
width: 70%; |
||||||
|
margin: 0 auto; |
||||||
|
.page{ |
||||||
|
padding: 40px; |
||||||
|
border-radius: 8px; |
||||||
|
background-color: #fff; |
||||||
|
.title{ |
||||||
|
text-align: center; |
||||||
|
font-size: 24px; |
||||||
|
font-weight: 500; |
||||||
|
color: rgba(0, 0, 0, 0.85); |
||||||
|
} |
||||||
|
.metas{ |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
padding-bottom: 32px; |
||||||
|
margin: 16px 0 32px; |
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.06); |
||||||
|
span{ |
||||||
|
display: inline-flex; |
||||||
|
align-items: center; |
||||||
|
margin-left: 20px; |
||||||
|
color: rgba(0, 0, 0, 0.45); |
||||||
|
font-size: 12px; |
||||||
|
img{ |
||||||
|
width: 18px; |
||||||
|
margin-right: 5px; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.cover{ |
||||||
|
margin: 20px 0; |
||||||
|
text-align: center; |
||||||
|
img{ |
||||||
|
width: 800px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.content{ |
||||||
|
line-height: 1.8; |
||||||
|
font-size: 16px; |
||||||
|
text-indent: 2em; |
||||||
|
/deep/img{ |
||||||
|
display: block; |
||||||
|
width: 600px; |
||||||
|
margin-left: auto; |
||||||
|
margin-right: auto; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
||||||
|
|
@ -0,0 +1,298 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<div class="main"> |
||||||
|
<div class="nav"> |
||||||
|
<div class="sub-title">最新资讯</div> |
||||||
|
<el-menu |
||||||
|
v-if="menuList.length" |
||||||
|
unique-opened |
||||||
|
:default-active="defaultIndex" |
||||||
|
@select="initData"> |
||||||
|
|
||||||
|
<template v-for="item in menuList"> |
||||||
|
<template v-if="item.secondColumn.length"> |
||||||
|
<el-submenu :index="item.id" :key="item.id"> |
||||||
|
<template slot="title"> |
||||||
|
<i :class="item.icon"></i> |
||||||
|
<span slot="title">{{ item.name }}</span> |
||||||
|
</template> |
||||||
|
<template v-for="subItem in item.secondColumn"> |
||||||
|
<el-menu-item |
||||||
|
:index="subItem.id" |
||||||
|
:key="subItem.id" |
||||||
|
>{{ subItem.name }}</el-menu-item> |
||||||
|
</template> |
||||||
|
</el-submenu> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<el-menu-item :index="item.id" :key="item.id"> |
||||||
|
<i :class="item.icon"></i> |
||||||
|
<span slot="title">{{ item.name }}</span> |
||||||
|
</el-menu-item> |
||||||
|
</template> |
||||||
|
</template> |
||||||
|
</el-menu> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="list-wrap"> |
||||||
|
<div class="list"> |
||||||
|
<template v-if="listData.length"> |
||||||
|
<ul> |
||||||
|
<li v-for="(item,index) in listData" :key="index" @click="toArticle(item.id)"> |
||||||
|
<img :src="item.coverUrl" alt=""> |
||||||
|
<div class="text"> |
||||||
|
<div class="title">{{item.title}}</div> |
||||||
|
<div class="desc" :class="{ie: core.isIE() || core.isEdge(),firefox: core.isFirefox() || core.isEdge()}" v-html="item.content"></div> |
||||||
|
<div class="metas"> |
||||||
|
<span>作者:{{item.author}}</span> |
||||||
|
<span>{{item.date.replace(' 00:00:00','')}}</span> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
<div class="pagination"> |
||||||
|
<el-pagination background layout="total, prev, pager, next" :total="totals" @current-change="handleCurrentChange" :current-page="pageNo"> |
||||||
|
</el-pagination> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<div class="empty"> |
||||||
|
<div> |
||||||
|
<img src="@/assets/img/none.png" alt=""> |
||||||
|
<p>暂无资讯</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { Loading } from 'element-ui'; |
||||||
|
import bus from '@/libs/bus' |
||||||
|
import { mapActions } from "vuex"; |
||||||
|
export default { |
||||||
|
name: 'information', |
||||||
|
data() { |
||||||
|
return { |
||||||
|
keyword: '', |
||||||
|
historyId: this.$store.state.info.columnId, |
||||||
|
defaultIndex: '', |
||||||
|
menuList: [], |
||||||
|
pageNo: 1, |
||||||
|
pageSize: 10, |
||||||
|
totals: 0, |
||||||
|
listData: [], |
||||||
|
loadIns: null, |
||||||
|
columnId: '', |
||||||
|
firstName: '', |
||||||
|
secondName: '' |
||||||
|
}; |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
keyword: function(val) { |
||||||
|
clearTimeout(this.searchTimer) |
||||||
|
this.searchTimer = setTimeout(() => { |
||||||
|
this.getData() |
||||||
|
},500) |
||||||
|
} |
||||||
|
}, |
||||||
|
mounted() { |
||||||
|
bus.$emit('setBg','info') |
||||||
|
this.getData() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
...mapActions("info", [ |
||||||
|
"setColumnId" |
||||||
|
]), |
||||||
|
getData() { |
||||||
|
this.setColumnId(""); |
||||||
|
let data = { |
||||||
|
page: this.pageNo, |
||||||
|
size: this.pageSize |
||||||
|
} |
||||||
|
this.loadIns = Loading.service() |
||||||
|
this.$get(this.api.queryAllColumns,data).then(res => { |
||||||
|
this.menuList = res.columnTree |
||||||
|
// 从文章页返回的情况,需要回到之前进文章页的那个分类 |
||||||
|
|
||||||
|
if(this.historyId){ |
||||||
|
this.defaultIndex = this.historyId |
||||||
|
this.getContent(this.historyId) |
||||||
|
}else{ |
||||||
|
// 正常情况默认展示第一个分类下的文章列表 |
||||||
|
if(this.menuList[0].secondColumn.length){ |
||||||
|
this.getContent(this.menuList[0].secondColumn[0].id) |
||||||
|
this.defaultIndex = this.menuList[0].secondColumn[0].id |
||||||
|
}else{ |
||||||
|
this.getContent(this.menuList[0].id) |
||||||
|
this.defaultIndex = this.menuList[0].id |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
}).catch(res => { |
||||||
|
this.loadIns.close() |
||||||
|
}); |
||||||
|
}, |
||||||
|
initData(index,indexPath){ |
||||||
|
this.pageNo = 1 |
||||||
|
this.getContent(index,indexPath) |
||||||
|
}, |
||||||
|
getContent(index,indexPath){ |
||||||
|
if(indexPath) this.loadIns = Loading.service() |
||||||
|
this.columnId = index |
||||||
|
let data = { |
||||||
|
name: this.keyword, |
||||||
|
columnId: index, |
||||||
|
port: 0 |
||||||
|
} |
||||||
|
let list = this.menuList |
||||||
|
list.map(n => { |
||||||
|
if(n.secondColumn.length){ |
||||||
|
n.secondColumn.map(e => { |
||||||
|
if(e.id == index){ |
||||||
|
this.firstName = n.name |
||||||
|
this.secondName = e.name |
||||||
|
} |
||||||
|
}) |
||||||
|
}else{ |
||||||
|
if(n.id == index){ |
||||||
|
this.firstName = n.name |
||||||
|
this.secondName = '' |
||||||
|
} |
||||||
|
} |
||||||
|
}) |
||||||
|
this.$get(`${this.api.queryArticleByCondition}/${this.pageNo}/${this.pageSize}`,data).then(res => { |
||||||
|
this.listData = res.articleList |
||||||
|
this.totals = res.total |
||||||
|
this.listData.map(n => { |
||||||
|
n.content = n.content.replace(/<img.*?(?:>|\/>)/gi,'') |
||||||
|
}) |
||||||
|
this.loadIns.close() |
||||||
|
}).catch(res => { |
||||||
|
this.loadIns.close() |
||||||
|
}); |
||||||
|
}, |
||||||
|
handleCurrentChange(val) { |
||||||
|
this.pageNo = val; |
||||||
|
this.getContent(this.columnId); |
||||||
|
}, |
||||||
|
toArticle(id){ |
||||||
|
this.setColumnId(this.columnId); |
||||||
|
this.$router.push(`/info/details?id=${id}&first=${this.firstName}&second=${this.secondName}`) |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.main{ |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items:flex-start; |
||||||
|
//padding: 265px 0 40px; |
||||||
|
.nav{ |
||||||
|
width: 220px; |
||||||
|
border-radius: 8px; |
||||||
|
overflow: hidden; |
||||||
|
.sub-title{ |
||||||
|
line-height: 88px; |
||||||
|
color: #fff; |
||||||
|
font-size: 24px; |
||||||
|
text-align: center; |
||||||
|
background: #9076FF; |
||||||
|
} |
||||||
|
|
||||||
|
/deep/ .el-menu { |
||||||
|
border-right: 0; |
||||||
|
.el-submenu__title,.el-menu-item{ |
||||||
|
font-size: 18px; |
||||||
|
.el-submenu__icon-arrow{ |
||||||
|
font-size: 18px; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.list-wrap{ |
||||||
|
width: 50%; |
||||||
|
margin-left: 40px; |
||||||
|
.list{ |
||||||
|
padding: 32px; |
||||||
|
background-color: #fff; |
||||||
|
border-radius: 8px; |
||||||
|
li{ |
||||||
|
display: flex; |
||||||
|
padding-bottom: 24px; |
||||||
|
margin-bottom: 20px; |
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.06); |
||||||
|
cursor: pointer; |
||||||
|
transition: all 0.3s; |
||||||
|
background-color: #fff; |
||||||
|
overflow: hidden; |
||||||
|
|
||||||
|
img{ |
||||||
|
width: 200px; |
||||||
|
height: 120px; |
||||||
|
border: 0; |
||||||
|
} |
||||||
|
.text{ |
||||||
|
width: calc(100% - 340px); |
||||||
|
display: inline-flex; |
||||||
|
flex: 1; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: space-between; |
||||||
|
padding: 0 24px; |
||||||
|
.title{ |
||||||
|
font-size: 20px; |
||||||
|
color: rgba(0,0,0,.85); |
||||||
|
overflow: hidden; |
||||||
|
text-overflow:ellipsis; |
||||||
|
white-space: nowrap; |
||||||
|
} |
||||||
|
.desc{ |
||||||
|
font-size: 14px; |
||||||
|
color: rgba(0,0,0,.65); |
||||||
|
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; |
||||||
|
} |
||||||
|
} |
||||||
|
.metas{ |
||||||
|
display: inline-flex; |
||||||
|
align-items: center; |
||||||
|
width: 100%; |
||||||
|
font-size: 12px; |
||||||
|
color: rgba(0,0,0,.45); |
||||||
|
span:first-child{ |
||||||
|
margin-right: 16px; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
&:hover{ |
||||||
|
.text{ |
||||||
|
.title{ |
||||||
|
color: #9076FF; |
||||||
|
} |
||||||
|
} |
||||||
|
border-bottom-color: #9076FF; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
||||||
|
|
@ -0,0 +1,378 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<div class="flex-between"> |
||||||
|
<el-page-header @back="goBack" :content="'赛事详情'"></el-page-header> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<div class="main"> |
||||||
|
<div class="nav"> |
||||||
|
<div class="sub-title">赛事报名</div> |
||||||
|
<div class="sidebar"> |
||||||
|
<div class="item" :class="{ active: curType === item.id }" v-for="(item, index) in typeList" :key="index" @click="tabChange(item.id)">{{item.name}}</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="content-wrap"> |
||||||
|
<div class="content"> |
||||||
|
<h6 class="title">{{title}}</h6> |
||||||
|
<div class="meta">最近编辑时间:{{gmtModified}}</div> |
||||||
|
<div class="texts ql-editor" v-html="description" v-if="curType == 1"></div> |
||||||
|
<div v-else> |
||||||
|
<ul class="progress" v-if="progress.length"> |
||||||
|
<li v-for="(item,index) in progress" :key="index"> |
||||||
|
<i class="dot" :class="[item.status == 0 ? 'not' : (item.status == 1 ? 'ing' : 'done el-icon-circle-check')]"></i> |
||||||
|
<p class="name">{{item.title}}</p> |
||||||
|
<p class="desc">{{item.description}}</p> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { mapState, mapActions } from 'vuex' |
||||||
|
import { Loading } from 'element-ui'; |
||||||
|
import 'quill/dist/quill.core.css'; |
||||||
|
import 'quill/dist/quill.snow.css'; |
||||||
|
import 'quill/dist/quill.bubble.css'; |
||||||
|
import bus from '@/libs/bus' |
||||||
|
export default { |
||||||
|
name: 'matchdetail', |
||||||
|
data() { |
||||||
|
return { |
||||||
|
id: this.$store.state.match.matchId, |
||||||
|
showSignup: this.$store.state.match.matchSignupStatus, |
||||||
|
coverUrl: '', |
||||||
|
title: '', |
||||||
|
time: '', |
||||||
|
curType: 1, |
||||||
|
typeList: [ |
||||||
|
{ |
||||||
|
id: 1, |
||||||
|
icon: 'el-icon-document', |
||||||
|
name: '竞赛信息' |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 2, |
||||||
|
icon: 'el-icon-setting', |
||||||
|
name: '竞赛进展' |
||||||
|
} |
||||||
|
], |
||||||
|
description: '', |
||||||
|
gmtModified: '', |
||||||
|
progress: [], |
||||||
|
end: '', |
||||||
|
status: 0, |
||||||
|
statusList: ['准备报名','正在报名','准备竞赛','竞赛中','竞赛结束'], |
||||||
|
endList: ['报名开始','报名截止','竞赛开始','竞赛结束',''], |
||||||
|
loadIns: null |
||||||
|
}; |
||||||
|
}, |
||||||
|
computed: { |
||||||
|
...mapState([ |
||||||
|
'userId', |
||||||
|
'name', |
||||||
|
'account', |
||||||
|
'phone', |
||||||
|
'schoolName', |
||||||
|
]), |
||||||
|
}, |
||||||
|
mounted() { |
||||||
|
bus.$emit('setBg','match') |
||||||
|
this.getData() |
||||||
|
this.getProgress() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
...mapActions("match", [ |
||||||
|
"setMatchId", "setMatchSignupStatus" |
||||||
|
]), |
||||||
|
goBack() { |
||||||
|
this.$router.back(); |
||||||
|
}, |
||||||
|
getData() { |
||||||
|
this.loadIns = Loading.service() |
||||||
|
console.log(111,this.id); |
||||||
|
this.$get(this.api.getContest + '/' + this.id) |
||||||
|
.then(res => { |
||||||
|
let data = res.contest |
||||||
|
this.coverUrl = data.carouselUrl |
||||||
|
this.description = data.description |
||||||
|
this.title = data.name |
||||||
|
this.gmtModified = data.gmtModified |
||||||
|
|
||||||
|
let time = 60 * 60 * 1000 * 24 |
||||||
|
let now = new Date().getTime() |
||||||
|
// 每个字段的含义请看match.vue |
||||||
|
let signUpStartTime = new Date(data.signUpStartTime).getTime() |
||||||
|
let signUpEndTime = new Date(data.signUpEndTime).getTime() |
||||||
|
let playStartTime = new Date(data.playStartTime).getTime() |
||||||
|
let playEndTime = new Date(data.playEndTime).getTime() |
||||||
|
if(now < signUpStartTime){ |
||||||
|
this.status = 0 |
||||||
|
this.end = Math.floor((signUpStartTime - now) / time) |
||||||
|
this.time = `报名开始时间:${data.signUpStartTime}` |
||||||
|
}else if(now > signUpStartTime && now < signUpEndTime){ |
||||||
|
this.status = 1 |
||||||
|
this.end = Math.floor((signUpEndTime - now) / time) |
||||||
|
this.time = `报名结束时间:${data.signUpEndTime}` |
||||||
|
}else if(now > signUpEndTime && now < playStartTime){ |
||||||
|
this.status = 2 |
||||||
|
this.end = Math.floor((playStartTime - now) / time) |
||||||
|
this.time = `竞赛开始时间:${data.playStartTime}` |
||||||
|
}else if(now > playStartTime && now < playEndTime){ |
||||||
|
this.status = 3 |
||||||
|
this.end = Math.floor((playEndTime - now) / time) |
||||||
|
this.time = `竞赛结束时间:${data.playEndTime}` |
||||||
|
}else if(now > playEndTime){ |
||||||
|
this.status = 4 |
||||||
|
this.time = '竞赛结束' |
||||||
|
} |
||||||
|
this.loadIns.close() |
||||||
|
}) |
||||||
|
.catch(err => { |
||||||
|
this.loadIns.close() |
||||||
|
}); |
||||||
|
}, |
||||||
|
getProgress() { |
||||||
|
this.$get(this.api.getContestProgress + '/' + this.id) |
||||||
|
.then(res => { |
||||||
|
this.progress = res.contestProgressList |
||||||
|
}) |
||||||
|
.catch(err => { |
||||||
|
|
||||||
|
}); |
||||||
|
}, |
||||||
|
toArticle(id){ |
||||||
|
this.$router.push('article?id=' + id) |
||||||
|
}, |
||||||
|
tabChange(index){ |
||||||
|
this.curType = index |
||||||
|
}, |
||||||
|
signup(){ |
||||||
|
let data = { |
||||||
|
contestId: this.id, |
||||||
|
account: this.account, |
||||||
|
phone: this.phone, |
||||||
|
school: this.schoolName, |
||||||
|
userId: this.userId, |
||||||
|
userName: this.name |
||||||
|
} |
||||||
|
this.$post(this.api.addApplicant,data).then(res => { |
||||||
|
if(res.success){ |
||||||
|
this.$message.success('报名成功') |
||||||
|
this.setMatchId(this.id); |
||||||
|
this.setMatchSignupStatus(false); |
||||||
|
this.showSignup = false |
||||||
|
}else{ |
||||||
|
this.$message.error(res.message) |
||||||
|
} |
||||||
|
}).catch(res => {}) |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.main{ |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items:flex-start; |
||||||
|
//padding: 265px 0 20px; |
||||||
|
.nav{ |
||||||
|
width: 220px; |
||||||
|
border-radius: 8px; |
||||||
|
overflow: hidden; |
||||||
|
.sub-title{ |
||||||
|
line-height: 88px; |
||||||
|
color: #fff; |
||||||
|
font-size: 24px; |
||||||
|
text-align: center; |
||||||
|
background: #9076FF; |
||||||
|
} |
||||||
|
/deep/.sidebar{ |
||||||
|
background-color: #fff; |
||||||
|
.item{ |
||||||
|
padding: 15px 0; |
||||||
|
color: rgba(0,0,0,.85); |
||||||
|
font-size: 18px; |
||||||
|
text-align: center; |
||||||
|
cursor: pointer; |
||||||
|
&.active{ |
||||||
|
color: #9076FF; |
||||||
|
} |
||||||
|
&:hover{ |
||||||
|
background-color: #f4f1ff; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.content-wrap{ |
||||||
|
width: 950px; |
||||||
|
margin-left: 40px; |
||||||
|
@media(max-width: 1300px){ |
||||||
|
width: 700px; |
||||||
|
} |
||||||
|
|
||||||
|
.content{ |
||||||
|
position: relative; |
||||||
|
padding: 20px 60px; |
||||||
|
background-color: #fff; |
||||||
|
border-radius: 8px; |
||||||
|
|
||||||
|
.title{ |
||||||
|
width: 67%; |
||||||
|
margin: 0 auto; |
||||||
|
font-size: 24px; |
||||||
|
text-align: center; |
||||||
|
color: rgba(0, 0, 0, 0.85); |
||||||
|
} |
||||||
|
.meta{ |
||||||
|
padding: 16px 0 32px; |
||||||
|
font-size: 12px; |
||||||
|
color: rgba(0, 0, 0, 0.45); |
||||||
|
text-align: center; |
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.06); |
||||||
|
} |
||||||
|
.texts{ |
||||||
|
margin: 20px 0 50px; |
||||||
|
font-size: 16px; |
||||||
|
line-height: 1.6; |
||||||
|
text-indent: 2em; |
||||||
|
overflow: hidden; |
||||||
|
/deep/img{ |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
} |
||||||
|
.progress{ |
||||||
|
position: relative; |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
flex-direction: column; |
||||||
|
padding: 50px 0; |
||||||
|
margin: 40px 0 20px; |
||||||
|
&:before{ |
||||||
|
content: ''; |
||||||
|
position: absolute; |
||||||
|
left: 413px; |
||||||
|
width: 1px; |
||||||
|
height: 100%; |
||||||
|
background-color: #E6E6E6; |
||||||
|
@media(max-width: 1300px){ |
||||||
|
left: 289px; |
||||||
|
} |
||||||
|
} |
||||||
|
li{ |
||||||
|
position: relative; |
||||||
|
display: inline-flex; |
||||||
|
align-items: center; |
||||||
|
width: 90%; |
||||||
|
margin-bottom: 40px; |
||||||
|
.dot{ |
||||||
|
position: absolute; |
||||||
|
left: 366px; |
||||||
|
width: 13px; |
||||||
|
height: 13px; |
||||||
|
background-color: #fff; |
||||||
|
|
||||||
|
&.not{ |
||||||
|
border-radius: 50%; |
||||||
|
background-color: #fff; |
||||||
|
border: 1px solid #cb221c; |
||||||
|
} |
||||||
|
&.ing{ |
||||||
|
width: 13px; |
||||||
|
height: 13px; |
||||||
|
padding: 1px; |
||||||
|
border: 1px solid #cb221c; |
||||||
|
border-radius: 50%; |
||||||
|
background-color: #cb221c; |
||||||
|
background-clip: content-box; |
||||||
|
} |
||||||
|
&.done{ |
||||||
|
left: 365px; |
||||||
|
color: #cb221c; |
||||||
|
font-size: 16px; |
||||||
|
} |
||||||
|
@media(max-width: 1300px){ |
||||||
|
left: 254px; |
||||||
|
&.done{ |
||||||
|
left: 253px; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.name{ |
||||||
|
width: 43%; |
||||||
|
font-size: 24px; |
||||||
|
color: rgba(0, 0, 0, 0.85); |
||||||
|
} |
||||||
|
.desc{ |
||||||
|
position: relative; |
||||||
|
padding: 24px 30px; |
||||||
|
text-align: center; |
||||||
|
color: rgba(0, 0, 0, 0.85); |
||||||
|
font-size: 16px; |
||||||
|
background-color: #fff; |
||||||
|
border: 1px solid #E6E6E6; |
||||||
|
border-radius: 8px; |
||||||
|
&:before{ |
||||||
|
content: ''; |
||||||
|
z-index: 2; |
||||||
|
position: absolute; |
||||||
|
top: 28px; |
||||||
|
left: -16px; |
||||||
|
border: 8px solid transparent; |
||||||
|
border-right-color: #fff; |
||||||
|
} |
||||||
|
&:after{ |
||||||
|
content: ''; |
||||||
|
z-index: 1; |
||||||
|
position: absolute; |
||||||
|
top: 27px; |
||||||
|
left: -18px; |
||||||
|
border: 9px solid transparent; |
||||||
|
border-right-color: #E6E6E6; |
||||||
|
} |
||||||
|
} |
||||||
|
&:nth-child(even){ |
||||||
|
flex-direction: row-reverse; |
||||||
|
.name{ |
||||||
|
margin-left: 16%; |
||||||
|
text-align: left; |
||||||
|
} |
||||||
|
.desc{ |
||||||
|
&:before{ |
||||||
|
left: auto; |
||||||
|
right: -16px; |
||||||
|
border: 8px solid transparent; |
||||||
|
border-left-color: #fff; |
||||||
|
} |
||||||
|
&:after{ |
||||||
|
left: auto; |
||||||
|
right: -18px; |
||||||
|
border: 9px solid transparent; |
||||||
|
border-left-color: #E6E6E6; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
&:nth-child(odd){ |
||||||
|
.name{ |
||||||
|
margin-right: 16%; |
||||||
|
text-align: right; |
||||||
|
} |
||||||
|
} |
||||||
|
&:last-child{ |
||||||
|
margin-bottom: 0; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,94 @@ |
|||||||
|
<template> |
||||||
|
<!--实验情况--> |
||||||
|
<div> |
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<div class="flex-between"> |
||||||
|
<el-page-header @back="goBack" :content="'实验情况'"></el-page-header> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<el-table |
||||||
|
ref="table" |
||||||
|
class="table" |
||||||
|
stripe |
||||||
|
header-align="center" |
||||||
|
:cell-style="tableRowStyle" |
||||||
|
:data="listData" |
||||||
|
@selection-change="handleSelectionChange" |
||||||
|
> |
||||||
|
<el-table-column prop="id" label="次序" width="120" align="center" type="index"></el-table-column> |
||||||
|
<el-table-column prop="projectName" label="实验项目名称" align="center"></el-table-column> |
||||||
|
<el-table-column prop="score" label="得分" align="center"></el-table-column> |
||||||
|
<el-table-column prop="duration" label="耗时" align="center"></el-table-column> |
||||||
|
<el-table-column prop="startTime" label="起始时间" align="center"></el-table-column> |
||||||
|
<el-table-column prop="endTime" label="结束时间" align="center"></el-table-column> |
||||||
|
<el-table-column label="操作" align="center"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<el-button type="text" @click="toReport(scope.row)">实验报告</el-button> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
<div class="pagination"> |
||||||
|
<el-pagination |
||||||
|
background |
||||||
|
layout="total, prev, pager, next" |
||||||
|
:total="total" |
||||||
|
:current-page="page" |
||||||
|
@current-change="handleCurrentChange" |
||||||
|
></el-pagination> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
listData: [ |
||||||
|
{id: 1, name: 111}, |
||||||
|
{id: 2, name: 222}, |
||||||
|
{id: 3, name: 333} |
||||||
|
], |
||||||
|
total: 0, |
||||||
|
page: 1, |
||||||
|
pageSize: 10, |
||||||
|
multipleSelection: [], |
||||||
|
} |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
goBack() { |
||||||
|
this.$router.back(); |
||||||
|
}, |
||||||
|
getData() { |
||||||
|
|
||||||
|
}, |
||||||
|
initData() { |
||||||
|
this.page = 1; |
||||||
|
this.getData(); |
||||||
|
}, |
||||||
|
handleSelectionChange(val) { // 处理多选 |
||||||
|
this.multipleSelection = val; |
||||||
|
}, |
||||||
|
handleCurrentChange(val) { // 切换页码 |
||||||
|
this.page = val; |
||||||
|
this.getData(); |
||||||
|
}, |
||||||
|
tableRowStyle({ row, column, rowIndex, columnIndex }) { |
||||||
|
if (rowIndex % 2 === 0) { |
||||||
|
return "background-color: #FFF"; |
||||||
|
} else { |
||||||
|
return "background-color: #F5F2FF"; |
||||||
|
} |
||||||
|
}, |
||||||
|
toReport(row) { |
||||||
|
this.setSystemId(this.systemId); |
||||||
|
this.$router.push(`/record/show?id=${row.id}&recordId=${row.recordid}&reportId=${row.reportId}`); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
|
||||||
|
</style> |
@ -0,0 +1,466 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<div class="flex-between"> |
||||||
|
<el-page-header @back="goBack" :content="systemName"></el-page-header> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<el-row :gutter="20" style="padding-top: 20px;"> |
||||||
|
<el-col :span="24"> |
||||||
|
<el-col :span="18"> |
||||||
|
<div class="cover"> |
||||||
|
<img v-if="coverUrl" :src="coverUrl" alt="" width="100%" height="100%"> |
||||||
|
<template v-else-if="iframeSrc"> |
||||||
|
<iframe class="inner fileIframe" id="fileIframe" :src="iframeSrc" frameborder="0"></iframe> |
||||||
|
<template v-if="showMask"> |
||||||
|
<div class="mask" 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> |
||||||
|
<div class="pdf inner" v-else-if="pdfSrc"> |
||||||
|
<pdf :visible.sync="pdfVisible" :src.sync="pdfSrc"></pdf> |
||||||
|
</div> |
||||||
|
<div v-else> |
||||||
|
<video ref="video" controls class="video_wid" :src="videoSrc" |
||||||
|
controlsList="nodownload"></video> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-col> |
||||||
|
<el-col :span="6"> |
||||||
|
<div class="catalog"> |
||||||
|
<div class="btns"> |
||||||
|
<el-button type="primary" @click="goSubSystem">进入实验</el-button> |
||||||
|
</div> |
||||||
|
<div class="list_he"> |
||||||
|
<h4 class="list_title">学习资源</h4> |
||||||
|
<template v-if="systemId == 1"> |
||||||
|
<div v-for="(item,index) in videoList1" :key="index"> |
||||||
|
<div class="flex-between list_catalog"> |
||||||
|
<p class="experimental_title" :class="{active: curLink == item.title}" |
||||||
|
@click="preview(item)">{{ index + 1 }} {{ item.title }}</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else-if="systemId == 4"> |
||||||
|
<div v-for="(item,index) in videoList4" :key="index"> |
||||||
|
<div class="flex-between list_catalog"> |
||||||
|
<p class="experimental_title" :class="{active: curLink == item.title}" |
||||||
|
@click="preview(item)">{{ index + 1 }} {{ item.title }}</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else-if="systemId == 5"> |
||||||
|
<div v-for="(item,index) in videoList5" :key="index"> |
||||||
|
<div class="flex-between list_catalog"> |
||||||
|
<p class="experimental_title" :class="{active: curLink == item.title}" |
||||||
|
@click="preview(item)">{{ index + 1 }} {{ item.title }}</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else-if="systemId == 6"> |
||||||
|
<div v-for="(item,index) in videoList6" :key="index"> |
||||||
|
<div class="flex-between list_catalog"> |
||||||
|
<p class="experimental_title" :class="{active: curLink == item.title}" |
||||||
|
@click="preview(item)">{{ index + 1 }} {{ item.title }}</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else-if="systemId == 7"> |
||||||
|
<div v-for="(item,index) in videoList7" :key="index"> |
||||||
|
<div class="flex-between list_catalog"> |
||||||
|
<p class="experimental_title" :class="{active: curLink == item.title}" |
||||||
|
@click="preview(item)">{{ index + 1 }} {{ item.title }}</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else-if="systemId == 8"> |
||||||
|
<div v-for="(item,index) in videoList8" :key="index"> |
||||||
|
<div class="flex-between list_catalog"> |
||||||
|
<p class="experimental_title" :class="{active: curLink == item.title}" |
||||||
|
@click="preview(item)">{{ index + 1 }} {{ item.title }}</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else-if="systemId == 9"> |
||||||
|
<div v-for="(item,index) in videoList9" :key="index"> |
||||||
|
<div class="flex-between list_catalog"> |
||||||
|
<p class="experimental_title" :class="{active: curLink == item.title}" |
||||||
|
@click="preview(item)">{{ index + 1 }} {{ item.title }}</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else-if="systemId == 10"> |
||||||
|
<div v-for="(item,index) in videoList10" :key="index"> |
||||||
|
<div class="flex-between list_catalog"> |
||||||
|
<p class="experimental_title" :class="{active: curLink == item.title}" |
||||||
|
@click="preview(item)">{{ index + 1 }} {{ item.title }}</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<div v-for="(item,index) in videoList1" :key="index"> |
||||||
|
<div class="flex-between list_catalog"> |
||||||
|
<p class="experimental_title" :class="{active: curLink == item.title}" |
||||||
|
@click="preview(item)">{{ index + 1 }} {{ item.title }}</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-col> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
</el-card> |
||||||
|
|
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<div>课程简介</div> |
||||||
|
<p>课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介</p> |
||||||
|
</el-card> |
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<div>课程目标</div> |
||||||
|
<p>课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介</p> |
||||||
|
</el-card> |
||||||
|
<el-card shadow="hover" class="m-b-20"> |
||||||
|
<div>课程进度</div> |
||||||
|
<el-progress :text-inside="true" :stroke-width="26" :percentage="70"></el-progress> |
||||||
|
</el-card> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import util from "@/libs/util"; |
||||||
|
import Setting from "@/setting"; |
||||||
|
import pdf from "@/components/pdf"; |
||||||
|
import { videoList1, videoList4, videoList5, videoList6, videoList7, videoList8 } from "@/libs/videoList"; |
||||||
|
import { mapState } from "vuex"; |
||||||
|
export default { |
||||||
|
components: { pdf }, |
||||||
|
data() { |
||||||
|
return { |
||||||
|
systemId: this.$route.query.systemId, |
||||||
|
systemName: this.$route.query.systemName, |
||||||
|
video: "http://liuwanr.oss-cn-shenzhen.aliyuncs.com/mp4/20200519/1589871025648.mp4", |
||||||
|
videoSrc: "", |
||||||
|
curLink: "", |
||||||
|
videoList1, |
||||||
|
videoList4, |
||||||
|
videoList5, |
||||||
|
videoList6, |
||||||
|
videoList7, |
||||||
|
videoList8, |
||||||
|
coverUrl: "", |
||||||
|
playAuth: "", |
||||||
|
player: null, |
||||||
|
previewImg: "", |
||||||
|
iframeSrc: "", |
||||||
|
isWord: false, |
||||||
|
isPPT: false, |
||||||
|
isExcel: false, |
||||||
|
showMask: false, |
||||||
|
showMask1: false, |
||||||
|
showMask2: false, |
||||||
|
closePosi: { |
||||||
|
top: "80px" |
||||||
|
}, |
||||||
|
pdfVisible: false, |
||||||
|
pdfSrc: "" |
||||||
|
} |
||||||
|
}, |
||||||
|
computed: { |
||||||
|
...mapState("user", [ |
||||||
|
"userId", "schoolId", "studentId", "roleId", "userName" |
||||||
|
]) |
||||||
|
}, |
||||||
|
mounted() { |
||||||
|
this.insertScript(); |
||||||
|
this.preview(this[`videoList${this.systemId}`][0]); |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
goBack() { |
||||||
|
this.$router.back(); |
||||||
|
}, |
||||||
|
preview(row) { // 预览 |
||||||
|
let url = row.links; |
||||||
|
this.videoSrc = ""; |
||||||
|
this.coverUrl = ""; |
||||||
|
this.pdfSrc = ""; |
||||||
|
this.iframeSrc = ""; |
||||||
|
this.curLink = row.title; |
||||||
|
let ext = util.getFileExt(url); |
||||||
|
if (util.isVideo(ext)) { |
||||||
|
this.videoSrc = url; |
||||||
|
} else if (ext == "pdf") { |
||||||
|
this.pdfSrc = url; |
||||||
|
this.pdfVisible = true; |
||||||
|
} else if (util.isImg(ext)) { |
||||||
|
window.open(url); |
||||||
|
} else if (util.isDoc(ext)) { |
||||||
|
if (ext == "pptx") { |
||||||
|
this.isPPT = true; |
||||||
|
this.isWord = false; |
||||||
|
this.isExcel = false; |
||||||
|
} else if (ext == "doc" || ext == "docx") { |
||||||
|
this.isPPT = false; |
||||||
|
this.isWord = true; |
||||||
|
this.isExcel = false; |
||||||
|
} else if (ext == "xls" || ext == "xlsx") { |
||||||
|
this.isExcel = true; |
||||||
|
this.isPPT = false; |
||||||
|
this.isWord = false; |
||||||
|
} else { |
||||||
|
this.isPPT = false; |
||||||
|
this.isWord = false; |
||||||
|
this.isExcel = false; |
||||||
|
} |
||||||
|
if (this.isPPT) { |
||||||
|
this.showMask = true; |
||||||
|
} else { |
||||||
|
this.showMask = false; |
||||||
|
} |
||||||
|
if (this.isWord) { |
||||||
|
this.showMask1 = true; |
||||||
|
} else { |
||||||
|
this.showMask1 = false; |
||||||
|
} |
||||||
|
if (this.isExcel) { |
||||||
|
this.showMask2 = true; |
||||||
|
} else { |
||||||
|
this.showMask2 = false; |
||||||
|
} |
||||||
|
this.iframeSrc = `https://view.officeapps.live.com/op/view.aspx?src=${url}`; |
||||||
|
} |
||||||
|
}, |
||||||
|
// 插入阿里云播放器脚本 |
||||||
|
insertScript() { |
||||||
|
const linkTag = document.createElement("link"); |
||||||
|
linkTag.id = "aliplayerLink"; |
||||||
|
linkTag.rel = "stylesheet"; |
||||||
|
linkTag.href = "https://g.alicdn.com/de/prismplayer/2.8.2/skins/default/aliplayer-min.css"; |
||||||
|
document.body.appendChild(linkTag); |
||||||
|
|
||||||
|
const scriptTag = document.createElement("script"); |
||||||
|
scriptTag.id = "aliplayerScript"; |
||||||
|
scriptTag.type = "text/javascript"; |
||||||
|
scriptTag.src = "https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js"; |
||||||
|
document.body.appendChild(scriptTag); |
||||||
|
this.$once("hook:beforeDestroy", function() { |
||||||
|
document.body.removeChild(document.querySelector("#aliplayerLink")); |
||||||
|
document.body.removeChild(document.querySelector("#aliplayerScript")); |
||||||
|
}); |
||||||
|
}, |
||||||
|
goSubSystem() { |
||||||
|
let type = this.systemId; |
||||||
|
let host = Setting.apiBaseURL; |
||||||
|
let href = ""; |
||||||
|
|
||||||
|
let roleId = this.roleId == 4 ? 0 : 1; |
||||||
|
let userName = window.btoa(encodeURIComponent(this.userName)); |
||||||
|
|
||||||
|
if (type == 1) { |
||||||
|
href = `${host}pyTrials/#/`; |
||||||
|
// if(process.env.NODE_ENV === 'development') href = 'http://120.78.198.231/' |
||||||
|
} else if (type == 4) { |
||||||
|
href = `${host}pyFinance/#/`; |
||||||
|
} else if (type == 5) { |
||||||
|
href = `${host}pyProjects/#/`; |
||||||
|
} else if (type == 6) { |
||||||
|
href = `${host}pyRandom/#/`; |
||||||
|
} else if (type == 7) { |
||||||
|
href = `${host}pyQuantification/#/`; |
||||||
|
} else if (type == 8) { |
||||||
|
href = `${host}pyAnalysis/#/`; |
||||||
|
} else if (type == 9) { |
||||||
|
href = `${host}pyDataclean/#/`; |
||||||
|
} else if (type == 10) { |
||||||
|
href = `${host}pyAcquisition/#/`; |
||||||
|
} else if (type == 21) { |
||||||
|
window.open(`http://121.37.29.24:80/yyyflogin?userId=${this.userId}&userName=${userName}&userType=${roleId}&reqType=1&reqId=3989a0ad671849b99dcbdcc208782333&caseId=9681f86902314b10bc752909121f9ab9&authorization=87DIVy348Oxzj3ha&classId=1876&courserId=7ff5d4715b114b7398b6f26c20fac460`); |
||||||
|
} else if (type == 22) { |
||||||
|
window.open(`https://danbao.czcyedu.com/#/loginFromYyyf?userId=${this.userId}&userName=${userName}&userType=${roleId}&reqType=1&reqId=eb7d8355119d449184c548b07dc01ed9&caseId=1198241070647873538&authorization=87DIVy348Oxzj3ha&classId=1876&courserId=faaedd82adb9444285a5785e4a3dd4f9`); |
||||||
|
} |
||||||
|
|
||||||
|
if (type != 21 && type != 22) { |
||||||
|
util.cookies.set("userId", this.userId); |
||||||
|
util.cookies.set("studentId", this.studentId); |
||||||
|
util.cookies.set("schoolId", this.schoolId); |
||||||
|
util.cookies.set("assessmentId", "", -1); |
||||||
|
util.cookies.set("projectId", "", -1); |
||||||
|
util.cookies.set("startTime", "", -1); |
||||||
|
util.cookies.set("stopTime", "", -1); |
||||||
|
location.href = href; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
$height: 650px; |
||||||
|
.cover { |
||||||
|
position: relative; |
||||||
|
height: $height; |
||||||
|
border: 0; |
||||||
|
|
||||||
|
.fileIframe { |
||||||
|
width: 100%; |
||||||
|
height: $height !important; |
||||||
|
} |
||||||
|
} |
||||||
|
.video_wid { |
||||||
|
width: 100%; |
||||||
|
height: 650px; |
||||||
|
border: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.video_wid:focus { |
||||||
|
outline: none; |
||||||
|
} |
||||||
|
|
||||||
|
.title_view { |
||||||
|
background-color: #2F3236; |
||||||
|
padding: 12px 10px; |
||||||
|
} |
||||||
|
|
||||||
|
h3 { |
||||||
|
color: #9076FF; |
||||||
|
margin-bottom: 10px; |
||||||
|
} |
||||||
|
|
||||||
|
.catalog .title_view .el-button { |
||||||
|
padding: 8px 20px; |
||||||
|
} |
||||||
|
|
||||||
|
.btns { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
.el-button { |
||||||
|
flex: 1; |
||||||
|
height: 90px; |
||||||
|
font-size: 30px; |
||||||
|
background: transparent url(../../../assets/img/ques1.png) 0 0/100% 100% no-repeat; |
||||||
|
border: 0; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.list_he { |
||||||
|
height: 550px; |
||||||
|
overflow-y: auto; |
||||||
|
padding: 20px 12px; |
||||||
|
background: #3f4449; |
||||||
|
margin-top: 10px; |
||||||
|
} |
||||||
|
|
||||||
|
.list_he ul { |
||||||
|
padding: 20px 0; |
||||||
|
} |
||||||
|
|
||||||
|
.list_he ul li:first-child { |
||||||
|
margin-top: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.list_he ul li { |
||||||
|
margin-top: 10px; |
||||||
|
font-size: 14px; |
||||||
|
} |
||||||
|
|
||||||
|
.list_title { |
||||||
|
color: #9278FF; |
||||||
|
font-size: 20px; |
||||||
|
margin-left: 12px; |
||||||
|
} |
||||||
|
|
||||||
|
.list_catalog { |
||||||
|
padding: 0 8px; |
||||||
|
font-size: 14px; |
||||||
|
margin-top: 15px; |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
|
||||||
|
.mar0 { |
||||||
|
margin-top: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.list_catalog .catalog_button .el-button { |
||||||
|
background-color: #2F3236; |
||||||
|
border: 1px solid rgba(144, 118, 255, 1); |
||||||
|
color: #9278FF; |
||||||
|
padding: 6px 8px; |
||||||
|
} |
||||||
|
|
||||||
|
.experimental_title { |
||||||
|
color: #fff; |
||||||
|
word-wrap: break-word; |
||||||
|
|
||||||
|
&.active { |
||||||
|
color: #9278FF; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.experimental_status { |
||||||
|
margin-right: 10px; |
||||||
|
color: #7A7A7A; |
||||||
|
} |
||||||
|
|
||||||
|
.curriculum_name { |
||||||
|
color: #fff; |
||||||
|
} |
||||||
|
|
||||||
|
.curriculum_name i { |
||||||
|
margin-left: 5px; |
||||||
|
margin-right: 5px; |
||||||
|
} |
||||||
|
|
||||||
|
.curriculum_status { |
||||||
|
color: #7A7A7A; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
.mask { |
||||||
|
z-index: 9; |
||||||
|
position: absolute; |
||||||
|
background-color: rgb(57, 58, 61); |
||||||
|
} |
||||||
|
|
||||||
|
.word-mask { |
||||||
|
z-index: 9; |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
right: 0; |
||||||
|
width: 100%; |
||||||
|
background-color: rgb(243, 242, 241); |
||||||
|
} |
||||||
|
|
||||||
|
.word-mask1 { |
||||||
|
z-index: 9; |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
right: 0; |
||||||
|
width: 100%; |
||||||
|
background-color: #185abd; |
||||||
|
} |
||||||
|
|
||||||
|
.word-mask2 { |
||||||
|
z-index: 9; |
||||||
|
position: absolute; |
||||||
|
background-color: transparent; |
||||||
|
} |
||||||
|
|
||||||
|
.excel-mask1 { |
||||||
|
z-index: 9; |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
left: 20%; |
||||||
|
width: 60%; |
||||||
|
background-color: #107c41; |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
@ -0,0 +1,23 @@ |
|||||||
|
import BasicLayout from "@/layouts/home"; |
||||||
|
|
||||||
|
const meta = {}; |
||||||
|
|
||||||
|
const pre = "appraisal-"; |
||||||
|
|
||||||
|
export default { |
||||||
|
path: "/appraisal", |
||||||
|
name: "appraisal", |
||||||
|
redirect: { |
||||||
|
name: `${pre}list` |
||||||
|
}, |
||||||
|
meta, |
||||||
|
component: BasicLayout, |
||||||
|
children: [ |
||||||
|
{ |
||||||
|
name: `${pre}list`, |
||||||
|
path: `list`, |
||||||
|
component: () => import("@/pages/appraisal/list"), |
||||||
|
meta: { title: "能力测评" } |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
@ -0,0 +1,29 @@ |
|||||||
|
import BasicLayout from "@/layouts/home"; |
||||||
|
|
||||||
|
const meta = {}; |
||||||
|
|
||||||
|
const pre = "course-"; |
||||||
|
|
||||||
|
export default { |
||||||
|
path: "/course", |
||||||
|
name: "course", |
||||||
|
redirect: { |
||||||
|
name: `${pre}list` |
||||||
|
}, |
||||||
|
meta, |
||||||
|
component: BasicLayout, |
||||||
|
children: [ |
||||||
|
{ |
||||||
|
name: `${pre}list`, |
||||||
|
path: `list`, |
||||||
|
component: () => import("@/pages/course/list"), |
||||||
|
meta: { title: "课程管理" } |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: `${pre}details`, |
||||||
|
path: `details`, |
||||||
|
component: () => import("@/pages/course/details"), |
||||||
|
meta: { title: "课程学习" } |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
@ -0,0 +1,29 @@ |
|||||||
|
import BasicLayout from "@/layouts/home"; |
||||||
|
|
||||||
|
const meta = {}; |
||||||
|
|
||||||
|
const pre = "info-"; |
||||||
|
|
||||||
|
export default { |
||||||
|
path: "/info", |
||||||
|
name: "info", |
||||||
|
redirect: { |
||||||
|
name: `${pre}list` |
||||||
|
}, |
||||||
|
meta, |
||||||
|
component: BasicLayout, |
||||||
|
children: [ |
||||||
|
{ |
||||||
|
name: `${pre}list`, |
||||||
|
path: `list`, |
||||||
|
component: () => import("@/pages/info/list"), |
||||||
|
meta: { title: "资讯" } |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: `${pre}details`, |
||||||
|
path: `details`, |
||||||
|
component: () => import("@/pages/info/details"), |
||||||
|
meta: { title: "资讯详情" } |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
@ -0,0 +1,29 @@ |
|||||||
|
import BasicLayout from "@/layouts/home"; |
||||||
|
|
||||||
|
const meta = {}; |
||||||
|
|
||||||
|
const pre = "match-"; |
||||||
|
|
||||||
|
export default { |
||||||
|
path: "/match", |
||||||
|
name: "match", |
||||||
|
redirect: { |
||||||
|
name: `${pre}list` |
||||||
|
}, |
||||||
|
meta, |
||||||
|
component: BasicLayout, |
||||||
|
children: [ |
||||||
|
{ |
||||||
|
name: `${pre}list`, |
||||||
|
path: `list`, |
||||||
|
component: () => import("@/pages/match/list"), |
||||||
|
meta: { title: "线上赛事" } |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: `${pre}details`, |
||||||
|
path: `details`, |
||||||
|
component: () => import("@/pages/match/details"), |
||||||
|
meta: { title: "竞赛信息" } |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
@ -0,0 +1,19 @@ |
|||||||
|
/** |
||||||
|
* 测评相关 |
||||||
|
* */ |
||||||
|
export default { |
||||||
|
namespaced: true, |
||||||
|
state: { |
||||||
|
answerHistory: [], |
||||||
|
}, |
||||||
|
mutations: { |
||||||
|
SET_ANSWER_HISTORY: (state, data) => { |
||||||
|
state.answerHistory = data; |
||||||
|
}, |
||||||
|
}, |
||||||
|
actions: { |
||||||
|
setAnswerHistory({ state, commit }, data) { |
||||||
|
commit("SET_ANSWER_HISTORY", data); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
@ -0,0 +1,26 @@ |
|||||||
|
/** |
||||||
|
* 资讯相关 |
||||||
|
* */ |
||||||
|
export default { |
||||||
|
namespaced: true, |
||||||
|
state: { |
||||||
|
tabsName: "2", |
||||||
|
columnId: "" |
||||||
|
}, |
||||||
|
mutations: { |
||||||
|
SET_TABS_NAME: (state, name) => { |
||||||
|
state.tabsName = name; |
||||||
|
}, |
||||||
|
SET_COLUMN_ID: (state, id) => { |
||||||
|
state.columnId = id; |
||||||
|
} |
||||||
|
}, |
||||||
|
actions: { |
||||||
|
setTabsName({ state, commit }, name) { |
||||||
|
commit("SET_TABS_NAME", name); |
||||||
|
}, |
||||||
|
setColumnId({ state, commit }, id) { |
||||||
|
commit("SET_COLUMN_ID", id); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
@ -0,0 +1,26 @@ |
|||||||
|
/** |
||||||
|
* 赛事相关 |
||||||
|
* */ |
||||||
|
export default { |
||||||
|
namespaced: true, |
||||||
|
state: { |
||||||
|
matchId: "", |
||||||
|
matchSignupStatus: false |
||||||
|
}, |
||||||
|
mutations: { |
||||||
|
SET_MATCH_ID: (state, id) => { |
||||||
|
state.matchId = id; |
||||||
|
}, |
||||||
|
SET_MATCH_SIGNUP_STATUS: (state, value) => { |
||||||
|
state.matchSignupStatus = value; |
||||||
|
} |
||||||
|
}, |
||||||
|
actions: { |
||||||
|
setMatchId({ state, commit }, id) { |
||||||
|
commit("SET_MATCH_ID", id); |
||||||
|
}, |
||||||
|
setMatchSignupStatus({ state, commit }, value) { |
||||||
|
commit("SET_MATCH_SIGNUP_STATUS", value); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
Loading…
Reference in new issue