parent
134ed3f04f
commit
92abe14796
11 changed files with 69 additions and 983 deletions
After Width: | Height: | Size: 218 KiB |
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 129 KiB |
@ -1,907 +0,0 @@ |
|||||||
<template> |
|
||||||
<div class="box" style="overflow-x: hidden"> |
|
||||||
<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="toEvaluation(1,2)">虚拟仿真实验</el-button> |
|
||||||
<el-button type="primary" @click="toEvaluation(1,3)">教学实验</el-button> --> |
|
||||||
<el-button type="primary" @click="toEvaluation(0,2)">能力测评</el-button> |
|
||||||
</div> |
|
||||||
<ul class="filter" style="margin: 10px 0"> |
|
||||||
<li> |
|
||||||
<label>系统</label> |
|
||||||
<el-select v-model="systemId" placeholder="请选择" @change="systemChange"> |
|
||||||
<el-option |
|
||||||
v-for="item in systemList" |
|
||||||
:key="item.value" |
|
||||||
:label="item.label" |
|
||||||
:value="item.id" |
|
||||||
></el-option> |
|
||||||
</el-select> |
|
||||||
</li> |
|
||||||
</ul> |
|
||||||
|
|
||||||
<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-dialog :visible.sync="evaluationVisible" width="30%" custom-class="evaluation_dialog" center |
|
||||||
:close-on-click-modal="false"> |
|
||||||
<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 slot="footer" class="dialog-footer" 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> |
|
||||||
</el-dialog> |
|
||||||
|
|
||||||
<!-- 提交成绩弹框 --> |
|
||||||
<el-dialog :visible.sync="resultVisible" width="30%" custom-class="result_dialog" center |
|
||||||
:close-on-click-modal="false"> |
|
||||||
<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(0)">再试一次</el-button> |
|
||||||
<el-button class="second" type="primary" @click="getDetail">成绩详情</el-button> |
|
||||||
<el-button v-if="result.isPassed == '通过'" class="third" type="primary" @click="goSubSystem">进入实训 |
|
||||||
</el-button> |
|
||||||
</div> |
|
||||||
</el-dialog> |
|
||||||
|
|
||||||
<!-- 成绩详情弹框 --> |
|
||||||
<el-dialog :visible.sync="detailVisible" width="30%" custom-class="detail_dialog" center |
|
||||||
:close-on-click-modal="false"> |
|
||||||
<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 { mapState, mapActions } from "vuex"; |
|
||||||
import util from "@/libs/util"; |
|
||||||
import Setting from "@/setting"; |
|
||||||
import pdf from "@/components/pdf"; |
|
||||||
import { videoList1, videoList4, videoList5, videoList6, videoList7, videoList8 } from "@/libs/videoList"; |
|
||||||
|
|
||||||
export default { |
|
||||||
components: { pdf }, |
|
||||||
data() { |
|
||||||
return { |
|
||||||
systemId: Setting.systemId, |
|
||||||
systemList: Setting.systemList, |
|
||||||
video: "http://liuwanr.oss-cn-shenzhen.aliyuncs.com/mp4/20200519/1589871025648.mp4", |
|
||||||
videoSrc: "", |
|
||||||
curLink: "", |
|
||||||
videoList1, |
|
||||||
videoList4, |
|
||||||
videoList5, |
|
||||||
videoList6, |
|
||||||
videoList7, |
|
||||||
videoList8, |
|
||||||
evaluationVisible: false, |
|
||||||
resultVisible: false, |
|
||||||
detailVisible: false, |
|
||||||
lastOne: false, |
|
||||||
question: { |
|
||||||
options: {} |
|
||||||
}, |
|
||||||
countdown: "", |
|
||||||
selected: "", |
|
||||||
result: {}, |
|
||||||
detail: {}, |
|
||||||
timer: null, |
|
||||||
totalScore: 0, |
|
||||||
detailData: [], |
|
||||||
isDone: false, |
|
||||||
history: [], |
|
||||||
btnType: 1, |
|
||||||
|
|
||||||
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", [ |
|
||||||
"studentId", "userId" |
|
||||||
]) |
|
||||||
}, |
|
||||||
watch: { |
|
||||||
question: { |
|
||||||
handler(newVal, oldVal) { |
|
||||||
for (let n in newVal.options) { |
|
||||||
if (newVal.options[n] == "") delete (newVal.options[n]); |
|
||||||
} |
|
||||||
}, |
|
||||||
deep: true |
|
||||||
} |
|
||||||
}, |
|
||||||
mounted() { |
|
||||||
this.insertScript(); |
|
||||||
// this.getData() |
|
||||||
this.preview(this.videoList1[0]); |
|
||||||
this.$once("hook:beforeDestroy", function() { |
|
||||||
clearInterval(this.timer); |
|
||||||
this.timer = null; |
|
||||||
}); |
|
||||||
}, |
|
||||||
methods: { |
|
||||||
// async getData(){ |
|
||||||
// let res = await this.$get(this.api.getCoursevideo, { |
|
||||||
// page: 1, |
|
||||||
// size: 10 |
|
||||||
// }) |
|
||||||
// this.videoList = res.data.list |
|
||||||
// }, |
|
||||||
async toEvaluation(type, btn) { |
|
||||||
clearInterval(this.timer); |
|
||||||
this.lastOne = false; |
|
||||||
this.selected = ""; |
|
||||||
this.resultVisible = false; |
|
||||||
this.history = []; |
|
||||||
if (btn) this.btnType = btn; |
|
||||||
if (type) { |
|
||||||
let res = null; |
|
||||||
if (btn == 2) { |
|
||||||
res = await this.$get(this.api.openExercise, { userId: this.userId }); |
|
||||||
} else { |
|
||||||
res = await this.$get(this.api.openTeaching, { userId: this.userId }); |
|
||||||
} |
|
||||||
if (res.errmessage == "true") { |
|
||||||
if (btn == 2) { |
|
||||||
this.goSubSystem(); |
|
||||||
} |
|
||||||
if (btn == 3) { |
|
||||||
this.$router.push("/project"); |
|
||||||
} |
|
||||||
} else { |
|
||||||
this.$alert("请先完成能力测评并达到60分以上才可以进行实验", "提示", { |
|
||||||
confirmButtonText: "进入测评", |
|
||||||
callback: action => { |
|
||||||
action == "confirm" && this.toEvaluation(0); |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
} else { |
|
||||||
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: this.btnType }); |
|
||||||
if (res.data) { |
|
||||||
this.question = res.data; |
|
||||||
this.isDone = false; |
|
||||||
this.question.currentQuestionSortNo == 1 && this.$store.commit("answerHistoryData", { answerHistory: [] }); |
|
||||||
this.handleQues(); |
|
||||||
this.evaluationVisible = true; |
|
||||||
} else { |
|
||||||
util.warningMsg(res.message); |
|
||||||
} |
|
||||||
}, |
|
||||||
async getCountdown() { |
|
||||||
let res = await this.$get(this.api.experimentRemaining, { userId: this.userId }); |
|
||||||
res.data && this.countDown(res.data); |
|
||||||
// this.countDown('00:00:05') |
|
||||||
}, |
|
||||||
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); |
|
||||||
}, |
|
||||||
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.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.$store.commit("answerHistoryData", { answerHistory: 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(); |
|
||||||
} |
|
||||||
}, |
|
||||||
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: this.btnType |
|
||||||
}); |
|
||||||
if (res.data) { |
|
||||||
this.result = res.data; |
|
||||||
this.evaluationVisible = false; |
|
||||||
this.resultVisible = true; |
|
||||||
} |
|
||||||
}, |
|
||||||
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; |
|
||||||
} |
|
||||||
}, |
|
||||||
systemChange() { |
|
||||||
this.videoSrc = ""; |
|
||||||
this.preview(this[`videoList${this.systemId}`][0]); |
|
||||||
}, |
|
||||||
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}`; |
|
||||||
} |
|
||||||
}, |
|
||||||
closeIframe() { |
|
||||||
this.iframeSrc = ""; |
|
||||||
this.showMask = false; |
|
||||||
this.showMask1 = false; |
|
||||||
this.showMask2 = false; |
|
||||||
this.curLink = ""; |
|
||||||
}, |
|
||||||
// 插入阿里云播放器脚本 |
|
||||||
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() { // 进入实训 |
|
||||||
util.cookies.set("assessmentId", "", -1); |
|
||||||
util.cookies.set("studentId", this.studentId); |
|
||||||
util.cookies.set("projectId", "", -1); |
|
||||||
util.cookies.set("startTime", "", -1); |
|
||||||
util.cookies.set("stopTime", "", -1); |
|
||||||
location.href = Setting.defaultSubSystem; |
|
||||||
} |
|
||||||
} |
|
||||||
}; |
|
||||||
</script> |
|
||||||
|
|
||||||
<style lang="scss" scoped> |
|
||||||
.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; |
|
||||||
} |
|
||||||
|
|
||||||
.btns .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: 500px; |
|
||||||
overflow-y: auto; |
|
||||||
padding: 20px 12px; |
|
||||||
background: #3f4449; |
|
||||||
} |
|
||||||
|
|
||||||
.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; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog { |
|
||||||
min-height: 700px; |
|
||||||
background: url(../../../assets/img/evaluation_bg1.png) 0 0/100% 100% no-repeat; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .el-dialog__headerbtn, /deep/ .evaluation_dialog .el-dialog__headerbtn, /deep/ .detail_dialog .el-dialog__headerbtn { |
|
||||||
font-size: 28px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .title, /deep/ .detail_dialog .title { |
|
||||||
margin-bottom: 45px; |
|
||||||
text-align: center; |
|
||||||
font-size: 24px |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .title { |
|
||||||
margin-bottom: 55px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .serial { |
|
||||||
font-size: 12px; |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .ques-wrap { |
|
||||||
width: 80%; |
|
||||||
margin: 0 auto; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .type { |
|
||||||
color: #666; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .ques { |
|
||||||
margin: 20px 0; |
|
||||||
min-height: 145px; |
|
||||||
color: #666; |
|
||||||
font-size: 16px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .countdown { |
|
||||||
margin-bottom: 20px; |
|
||||||
justify-content: center; |
|
||||||
text-align: center; |
|
||||||
color: #DC3434; |
|
||||||
font-size: 14px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .countdown img { |
|
||||||
width: 15px !important; |
|
||||||
margin-right: 10px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .options { |
|
||||||
display: flex; |
|
||||||
flex-direction: column; |
|
||||||
min-height: 340px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .options.isDone { |
|
||||||
min-height: 395px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .options li { |
|
||||||
padding: 0 15px; |
|
||||||
margin-bottom: 15px; |
|
||||||
line-height: 40px; |
|
||||||
border: 1px solid #9070FF; |
|
||||||
border-radius: 20px; |
|
||||||
color: #666; |
|
||||||
cursor: pointer; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .options li:hover { |
|
||||||
color: #fff; |
|
||||||
background-color: #b038bb; |
|
||||||
border-color: #b038bb; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .options li.active { |
|
||||||
color: #fff; |
|
||||||
background-color: #916CFF; |
|
||||||
border-color: #916CFF; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .options em { |
|
||||||
margin-right: 10px; |
|
||||||
font-weight: bold; |
|
||||||
font-style: normal; |
|
||||||
font-size: 16px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .options span { |
|
||||||
font-size: 16px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .el-dialog__footer { |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .first, /deep/ .result_dialog .first { |
|
||||||
color: #fff; |
|
||||||
background-color: #9268FF; |
|
||||||
border-color: #9268FF; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .second, /deep/ .result_dialog .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; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .result_dialog .el-dialog__headerbtn .el-dialog__close { |
|
||||||
color: #5a5a5a; |
|
||||||
font-size: 28px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .result_dialog .result { |
|
||||||
margin-top: 60px; |
|
||||||
text-align: center; |
|
||||||
color: #fff; |
|
||||||
font-size: 24px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .result_dialog .point { |
|
||||||
margin: 30px 0 20px; |
|
||||||
text-align: center; |
|
||||||
font-size: 30px; |
|
||||||
color: #666; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .result_dialog .point span { |
|
||||||
font-size: 120px; |
|
||||||
font-weight: bold; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .result_dialog .tips { |
|
||||||
color: #666; |
|
||||||
text-align: center; |
|
||||||
font-size: 14px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .result_dialog .third { |
|
||||||
color: #fff; |
|
||||||
background-color: #418cf5; |
|
||||||
border-color: #418cf5; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .detail_dialog { |
|
||||||
background: url(../../../assets/img/evaluation_bg3.png) 0 0/100% 100% no-repeat; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .detail_dialog .title { |
|
||||||
margin-top: -20px; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .detail_dialog .el-table__header th:nth-last-child(2) { |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .detail_dialog .total { |
|
||||||
margin-top: 20px; |
|
||||||
text-align: center; |
|
||||||
font-size: 30px; |
|
||||||
color: #DC3434; |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog { |
|
||||||
margin: 0 !important; |
|
||||||
position: absolute; |
|
||||||
top: 50%; |
|
||||||
left: 50%; |
|
||||||
transform: translate(-50%, -50%); |
|
||||||
max-height: calc(100% - 30px); |
|
||||||
max-width: calc(100% - 30px); |
|
||||||
} |
|
||||||
|
|
||||||
/deep/ .evaluation_dialog .el-dialog__body { |
|
||||||
flex: 1; |
|
||||||
overflow: auto; |
|
||||||
} |
|
||||||
|
|
||||||
.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; |
|
||||||
} |
|
||||||
|
|
||||||
$height: 650px; |
|
||||||
.cover { |
|
||||||
position: relative; |
|
||||||
height: $height; |
|
||||||
border: 0; |
|
||||||
|
|
||||||
.fileIframe { |
|
||||||
width: 100%; |
|
||||||
height: $height !important; |
|
||||||
} |
|
||||||
} |
|
||||||
</style> |
|
@ -1,23 +0,0 @@ |
|||||||
import BasicLayout from "@/layouts/home"; |
|
||||||
|
|
||||||
const meta = {}; |
|
||||||
|
|
||||||
const pre = "preview-"; |
|
||||||
|
|
||||||
export default { |
|
||||||
path: "/preview", |
|
||||||
name: "preview", |
|
||||||
redirect: { |
|
||||||
name: `${pre}list` |
|
||||||
}, |
|
||||||
meta, |
|
||||||
component: BasicLayout, |
|
||||||
children: [ |
|
||||||
{ |
|
||||||
name: `${pre}list`, |
|
||||||
path: `list`, |
|
||||||
component: () => import("@/pages/preview/list"), |
|
||||||
meta: { title: "课前预习" } |
|
||||||
} |
|
||||||
] |
|
||||||
}; |
|
Loading…
Reference in new issue