You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1278 lines
37 KiB
1278 lines
37 KiB
<template> |
|
<div> |
|
<!-- <transition name="slide-fade" enter-active-class="animate__animated animate__bounceInLeft" leave-active-class=" animate__animated animate__bounceOutLeft"> --> |
|
|
|
<el-container v-show="showIt" v-loading="loading"> |
|
<el-header> |
|
<div class="flex a-center j-between"> |
|
<div class="flex a-center" style="width: 28%"> |
|
<p>实训项目</p> |
|
<el-select v-model.trim="projectId" placeholder="请选择" class="select" disabled @change="selectProject"> |
|
<el-option v-for="item in topicList" :key="item.projectId" :label="item.projectName" |
|
:value="item.projectId"></el-option> |
|
</el-select> |
|
</div> |
|
<div class="countDownBox"> |
|
<div style="margin-left: -40px;"> |
|
<div :sendSync="sendSync" :autoStart="autoStart" :defaultVal="defaultVal"> |
|
实训{{ text }}时间 |
|
<span class="timeSpan">{{ day }}</span>天 |
|
<span class="timeSpan">{{ hour }}</span>小时 |
|
<span class="timeSpan">{{ minutes }}</span>分 |
|
<span class="timeSpan">{{ seconds }}</span>秒 |
|
</div> |
|
</div> |
|
</div> |
|
<div class="countDownBox"> |
|
<div> |
|
总得分: |
|
<span class="gradeSpan">{{ grade }}</span> |
|
</div> |
|
</div> |
|
<div> |
|
<el-button @click="toReport" v-if="popContainer">查看实验报告</el-button> |
|
<el-button style="background: #202020;color: #d0d0d0;font-size:16px;" v-show="projectPermissions == 0" |
|
@click="reloadConfirm" |
|
:disabled="popContainer && (assessmentId != '' && assessmentId != 'null' && assessmentId != null)"> |
|
重新开始 |
|
</el-button> |
|
<el-button class="submit-btn" style="margin-right:7px" @click="Submit()" |
|
:disabled="popContainer || requires.length == 0">提交</el-button> |
|
</div> |
|
</div> |
|
</el-header> |
|
|
|
<el-container> |
|
<el-aside width="30%" class="flex flex-col"> |
|
<div class="aside-header"> |
|
<div class="header_h flex a-center"> |
|
<i class="el-icon-s-order"></i> |
|
<p>实验目标</p> |
|
</div> |
|
<div class="font_css"> |
|
<div class="experimentalGoal"> |
|
<div class="break-all" v-html="projectManage.experimentTarget" style="font-size: 0.875rem;"> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="aside-footer flex-grow"> |
|
<div class="header_h flex a-center"> |
|
<i class="el-icon-s-management"></i> |
|
<p>实验任务</p> |
|
</div> |
|
<div> |
|
<el-row> |
|
<el-col :span="24"> |
|
<el-card shadow="hover"> |
|
<el-table :data="requires" height="43.5vh" ref='testTable'> |
|
<el-table-column type="index"></el-table-column> |
|
<el-table-column prop="name" label="判分点" align="left"> |
|
</el-table-column> |
|
<el-table-column prop="score" label="分值" width="60" align="center"> |
|
</el-table-column> |
|
<el-table-column prop="right" label="完成结果" width="80" align="center"> |
|
<template slot-scope="scope"> |
|
<i v-if="scope.row.right == true" class="el-icon-check" style="color:green;"></i> |
|
<i v-else-if="scope.row.right == false" class="el-icon-close" style="color:red;"></i> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="scores" label="得分" width="60" align="center"></el-table-column> |
|
</el-table> |
|
</el-card> |
|
</el-col> |
|
</el-row> |
|
</div> |
|
</div> |
|
</el-aside> |
|
<el-main> |
|
<el-tabs v-model.trim="activeName" type="card"> |
|
<el-tab-pane label="案例" name="first"> |
|
<div class="break-all" v-html="projectManage.experimentDescription"></div> |
|
</el-tab-pane> |
|
<el-tab-pane label="实验要求" name="second"> |
|
<el-collapse :value="activeNames" accordion> |
|
<el-collapse-item v-for="(item, index) in requires" :key="index" :name="item.id"> |
|
<template slot="title" style='line-height: 0px;'> |
|
<i class='el-icon-s-ticket'></i> |
|
<span style="margin: 0px 10px;font-size: 1rem;">{{ item.name }}</span> |
|
</template> |
|
<div class="break-all" v-html="item.experimentalRequirements"></div> |
|
</el-collapse-item> |
|
<!-- <p ref="scrollTag" style="font-size:16px;"></p> --> |
|
</el-collapse> |
|
</el-tab-pane> |
|
<el-tab-pane label="实验提示" name="fifth" v-if="hintOpen == 0"> |
|
<div class="break-all" v-html="projectManage.experimentHint"></div> |
|
</el-tab-pane> |
|
</el-tabs> |
|
</el-main> |
|
</el-container> |
|
</el-container> |
|
<!-- </transition> --> |
|
<!-- </div> --> |
|
<div class="panel" :class="{ active: showIt }"> |
|
<div @click="toggleCase"> |
|
<img src="../../assets/img/case/left.png" alt v-if="showIt" /> |
|
<img src="../../assets/img/case/right.png" alt v-else /> |
|
</div> |
|
</div> |
|
|
|
<div class='popContainer' v-if='popContainer'></div> |
|
|
|
<!-- 遮罩层 --> |
|
<div class="absolute z-50 h-screen bg-transparent inset-0" v-show="showIt"></div> |
|
|
|
<el-dialog title="提示" :visible.sync="closePaneJudge" width="30%" center> |
|
<h4 class="antialiased text-center text-2xl">请选择你将进行的操作</h4> |
|
<span slot="footer" class="dialog-footer"> |
|
<el-button @click="closePane()">再试一次</el-button> |
|
<!-- <el-button type="primary" @click="closePane(true)">其他业务</el-button> --> |
|
</span> |
|
</el-dialog> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
<script> |
|
import Cookie from 'js-cookie' |
|
import Util from '@/libs/util' |
|
import Setting from '@/setting' |
|
// 引入封装好的接口 |
|
import { getProjectBySystemId, getProjectDetail, submit, getQueryCache, deleteCache, checkTest, checkTest2 } from "@/api/http.js"; |
|
import { mapMutations } from 'vuex' |
|
import { async } from 'q'; |
|
import Bus from '@/libs/bus' |
|
export default { |
|
props: { |
|
sendSync: { |
|
type: Boolean, |
|
default: false |
|
}, |
|
autoStart: { |
|
type: Boolean, |
|
default: false |
|
}, |
|
defaultVal: { |
|
type: Number, |
|
default: null |
|
}, |
|
showIt: { |
|
type: Boolean, |
|
required: true |
|
} |
|
}, |
|
data () { |
|
return { |
|
closePaneJudge: false, |
|
lockIt: false, |
|
intervalJudge: {}, |
|
systemId: Setting.systemId, |
|
workbench: [], |
|
test: [], |
|
caseVisible: true, |
|
grade: "00", |
|
exampleData: "", |
|
codeid: "", |
|
judgmentPointsIds: [], |
|
text: "", |
|
isStart: false, |
|
globalTimer: null, //获取setInterval对象值 |
|
millisecond: 0, |
|
countVal: this.defaultVal, //获取初始值 |
|
pauseTime: 0, |
|
day: '00', |
|
seconds: '00', |
|
minutes: '00', |
|
hour: '00', |
|
createTime: "", //开始时间 |
|
actEndTime: "", //倒计时结束时间 |
|
projectId: '', //选中后绑定的对象 |
|
// projectId: "" || sessionStorage.getItem('projectId'), //选中后绑定的对象 |
|
value: [ |
|
{ projectName: '项目1', projectId: 1 } |
|
], |
|
experimentalGoal: "", //实验目标 |
|
caseDescription: "", //案例描述 |
|
experimentSuggests: "", //实验提示 |
|
judgmentPointsName: "", // 判分点名称 |
|
points: [], |
|
// activeNames: [], |
|
tableData: [], |
|
activeName: "first", |
|
schoolId: '', |
|
studentId: "", |
|
courseId: "", |
|
assessmentId: "", |
|
classId: '', |
|
projectPermissions: 0, //项目权限(0、练习 1、考核 2、竞赛) |
|
competitionId: '', |
|
stageId: '', |
|
teamId: '', |
|
isSubmit: false, |
|
entryTime: Util.formatDate('yyyy-MM-dd hh:mm:ss'), |
|
startTime: '', |
|
stopTime: '', |
|
isSelected: false, |
|
userId: '', |
|
hintOpen: 0, |
|
topicList: [], |
|
projectManage: {}, |
|
requires: [], |
|
projectName: '', |
|
loading: false, |
|
sss: 1, |
|
popContainer: false, |
|
timestamp: '', |
|
curSystemId: '', |
|
reportId: '', |
|
submitType: false |
|
} |
|
}, |
|
computed: { |
|
needSendSunc: function () { |
|
return this.sendSync; |
|
}, |
|
// 倒计时 |
|
second: function () { |
|
return this.num(this.seconds); |
|
}, |
|
minute: function () { |
|
return this.num(this.minutes); |
|
}, |
|
activeNames () { |
|
// 默认展开所有 |
|
return this.requires.map(item => item.id) |
|
}, |
|
}, |
|
watch: { |
|
countVal: { |
|
deep: true, |
|
handler: function (val, oldVal) { |
|
let vm = this; |
|
if (vm.needSendSunc) { |
|
vm.passToParent(val); |
|
} |
|
} |
|
}, |
|
needSendSunc: { |
|
deep: true, |
|
handler: function (val) { |
|
let vm = this; |
|
if (val) { |
|
vm.passToParent(vm.countString); |
|
} |
|
} |
|
}, |
|
}, |
|
created () { |
|
let assessmentId = this.getQueryVariable('assessmentId') |
|
sessionStorage.setItem('assessmentId', assessmentId) |
|
this.assessmentId = assessmentId |
|
if (assessmentId == '' || assessmentId == null || assessmentId == 'null') { |
|
|
|
} else { |
|
this.intervalJudge = setInterval(() => { |
|
const data = { |
|
id: parseInt(sessionStorage.getItem('assessmentId')), |
|
} |
|
checkTest(data).then(data => { |
|
const { data: { data: { status } } } = data |
|
if (status !== 1) { |
|
this.popContainer = true |
|
clearInterval(this.intervalJudge) |
|
this.$alert('考试已结束,已自动为您提交。', '提示', { |
|
confirmButtonText: '确定', |
|
type: 'warning', |
|
center: true |
|
}); |
|
// 提交 |
|
this.sureSubmit(true) |
|
} |
|
}) |
|
}, 4000) |
|
} |
|
Bus.$on('setSubmited', data => { |
|
this.popContainer = data |
|
}) |
|
}, |
|
mounted () { |
|
let token = this.getParam('token') |
|
let cid = this.getParam('cid') |
|
let systemId = this.getParam('systemId') |
|
let projectId = this.getParam('projectId') |
|
let assessmentId = this.getParam('assessmentId') |
|
let competitionId = this.getParam('competitionId') |
|
let stageId = this.getParam('stageId') |
|
let teamId = this.getParam('teamId') |
|
let classId = this.getParam('classId') |
|
let stopTime = this.getParam('stopTime') |
|
let mallId = this.getParam('mallId') |
|
let timestamp = +stopTime |
|
timestamp || sessionStorage.removeItem('timestamp') |
|
|
|
if (token) { |
|
sessionStorage.setItem('token', token) |
|
sessionStorage.setItem('cid', cid) |
|
sessionStorage.setItem('systemId', systemId) |
|
sessionStorage.setItem('timestamp', timestamp) |
|
console.log("🚀 ~ mounted ~ projectId:", token, projectId) |
|
sessionStorage.setItem('projectId', projectId) |
|
sessionStorage.setItem('assessmentId', assessmentId) |
|
sessionStorage.setItem('competitionId', competitionId) |
|
sessionStorage.setItem('stageId', stageId) |
|
sessionStorage.setItem('teamId', teamId) |
|
sessionStorage.setItem('classId', classId) |
|
this.assessmentId = assessmentId |
|
this.competitionId = competitionId |
|
this.stageId = stageId |
|
this.teamId = teamId |
|
this.classId = classId |
|
this.mallId = mallId |
|
this.projectId = projectId |
|
} |
|
if (token) { |
|
this.projectPermissions = this.assessmentId ? |
|
1 : |
|
this.competitionId ? |
|
2 : |
|
0 |
|
this.assessmentId && this.projectId && this.checkVer() |
|
if (assessmentId || this.competitionId) { |
|
this.selectProjects({ |
|
projectId |
|
}) |
|
} else { |
|
this.getData() |
|
} |
|
} |
|
}, |
|
methods: { |
|
...mapMutations({ |
|
setPopId: 'system/setPopId', |
|
setBusinessKey: 'system/setBusinessKey', |
|
initState: 'system/initState', |
|
setShowBusiness: 'system/setShowBusiness', |
|
}), |
|
clearStore () { |
|
// // 清空缓存 |
|
let token = sessionStorage.getItem('token') |
|
let cid = sessionStorage.getItem('cid') |
|
let systemId = sessionStorage.getItem('systemId') |
|
let projectId = sessionStorage.getItem('projectId') |
|
let assessmentId = sessionStorage.getItem('assessmentId') |
|
let classId = sessionStorage.getItem('classId') |
|
let timestamp = sessionStorage.getItem('timestamp') |
|
let startTime = sessionStorage.getItem('startTime') |
|
|
|
const storeProjectId = sessionStorage.getItem('storeProjectId') |
|
Util.clearSession() |
|
sessionStorage.setItem('token', token) |
|
sessionStorage.setItem('cid', cid) |
|
sessionStorage.setItem('systemId', systemId) |
|
sessionStorage.setItem('projectId', projectId) |
|
sessionStorage.setItem('firstLoad2', true) |
|
if (assessmentId) { |
|
sessionStorage.setItem('assessmentId', assessmentId) |
|
} |
|
if (classId) { |
|
sessionStorage.setItem('classId', classId) |
|
} |
|
if (timestamp) { |
|
sessionStorage.setItem('timestamp', timestamp) |
|
} |
|
if (startTime) { |
|
sessionStorage.setItem('startTime', startTime) |
|
} |
|
if (storeProjectId) { |
|
sessionStorage.setItem('storeProjectId', storeProjectId) |
|
} |
|
|
|
|
|
// 初始化vuex中的state |
|
this.initState(); |
|
}, |
|
closePane (judge = false) { |
|
this.closePaneJudge = false |
|
// this.lockIt = false |
|
this.reload() |
|
if (judge) { |
|
this.toggleCase() |
|
} |
|
}, |
|
// 获取参数 |
|
getParam (field) { |
|
const s = sessionStorage.getItem(field) |
|
const routeParam = this.getQueryVariable(field) |
|
return routeParam ? routeParam : s !== 'null' && s !== 'undefined' && s ? s : '' |
|
}, |
|
getQueryVariable (name) { |
|
var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)') |
|
if (window.location.href.split('?')[1]) { |
|
var r = window.location.href.split('?')[1].match(reg) |
|
if (r != null) { |
|
return (r[2]) |
|
} else { |
|
return null |
|
} |
|
} |
|
}, |
|
//获取项目列表 |
|
getData () { |
|
let params = { |
|
"systemId": sessionStorage.getItem('systemId'), |
|
"cId": sessionStorage.getItem('cid'), |
|
"permissions": 0, |
|
mallId: this.mallId |
|
} |
|
getProjectBySystemId(params).then((data) => { |
|
if (data.status == 200) { |
|
// this.getQueryCaches() |
|
//获取当前时间 |
|
this.getBeginTime() |
|
this.topicList = [] |
|
|
|
for (var i = 0; i < data.data.projects.length; i++) { |
|
if (data.data.projects[i].projectId) { |
|
this.topicList.push(data.data.projects[i]) |
|
|
|
} |
|
|
|
} |
|
if (this.topicList.length > 0) { |
|
const storeProjectId = sessionStorage.getItem('storeProjectId') || this.$route.query.projectId |
|
if (storeProjectId) { |
|
this.selectProjects({ |
|
projectId: storeProjectId |
|
}) |
|
} else { |
|
this.selectProjects({ |
|
projectId: this.topicList[0].projectId |
|
}) |
|
} |
|
this.gotuQueryVariable() |
|
// 加的 |
|
} |
|
this.getQueryCaches() |
|
} |
|
}).catch((error) => { |
|
}) |
|
}, |
|
getBeginTime () { |
|
let dates = new Date().getTime(); |
|
let date = new Date(dates) |
|
let y = date.getFullYear(); |
|
let MM = date.getMonth() + 1; |
|
MM = MM < 10 ? ('0' + MM) : MM; |
|
let d = date.getDate(); |
|
d = d < 10 ? ('0' + d) : d; |
|
let h = date.getHours(); |
|
h = h < 10 ? ('0' + h) : h; |
|
let m = date.getMinutes(); |
|
m = m < 10 ? ('0' + m) : m; |
|
let s = date.getSeconds(); |
|
s = s < 10 ? ('0' + s) : s; |
|
this.startTime = y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s; |
|
sessionStorage.setItem('startTime', this.startTime) |
|
}, |
|
getQueryCaches () { |
|
getQueryCache(params).then((data) => { |
|
if (data.data.status == 200) { |
|
this.$confirm('有项目未做完,是否回到未做完的项目?', '提示', { |
|
center: true, |
|
confirmButtonText: '确定', |
|
cancelButtonText: '取消', |
|
type: 'warning' |
|
}).then(() => { |
|
this.$message({ |
|
type: 'success', |
|
message: '切换成功!' |
|
}); |
|
this.projectId = data.data.projectId |
|
let params = { |
|
"projectId": data.data.projectId, |
|
} |
|
sessionStorage.setItem('projectId', data.data.projectId) |
|
this.selectProjects(params) |
|
}).catch(() => { |
|
deleteCache().then((data) => { |
|
this.$message({ |
|
type: 'info', |
|
message: '已取消' |
|
}); |
|
}).catch(() => { |
|
}) |
|
this.gotuQueryVariable() |
|
}); |
|
} else { |
|
this.gotuQueryVariable() |
|
} |
|
}).catch((error) => { |
|
this.gotuQueryVariable() |
|
}) |
|
}, |
|
gotuQueryVariable () { |
|
let projectId = sessionStorage.getItem('projectId') || this.getQueryVariable('projectId') |
|
if (projectId) { |
|
this.projectId = projectId |
|
} else { |
|
const storeProjectId = sessionStorage.getItem('storeProjectId') |
|
if (storeProjectId) { |
|
this.projectId = storeProjectId; |
|
} else { |
|
this.projectId = this.topicList[0].projectId; |
|
} |
|
} |
|
sessionStorage.setItem('projectId', this.projectId) |
|
let params = { |
|
"projectId": this.projectId, |
|
} |
|
this.selectProjects(params) |
|
}, |
|
selectProjects (params) { |
|
getProjectDetail(params).then((data) => { |
|
if (data.status == 200) { |
|
this.globalTimer = ""; |
|
let stopTime = sessionStorage.getItem('timestamp') |
|
let timestamp = +stopTime; |
|
this.countVal = timestamp; |
|
this.sss = 1; |
|
this.hintOpen = data.data.projectManage.hintOpen; |
|
this.countDown(timestamp); |
|
this.curSystemId = data.data.projectManage.systemId |
|
let assessmentId = this.getQueryVariable('assessmentId') |
|
if (assessmentId != null && assessmentId != '' && assessmentId != 'null') { |
|
//获取当前时间 |
|
this.getBeginTime() |
|
this.topicList = [data.data.projectManage]; |
|
this.projectId = +params.projectId |
|
this.projectName = data.data.projectManage.projectName |
|
this.projectId = data.data.projectManage.projectId; |
|
this.projectManage = data.data.projectManage; |
|
this.requires = data.data.projectJudgmentVos; |
|
} else { |
|
this.projectName = data.data.projectManage.projectName |
|
this.projectId = data.data.projectManage.projectId; |
|
this.projectManage = data.data.projectManage; |
|
this.requires = data.data.projectJudgmentVos; |
|
} |
|
} |
|
}).catch((error) => { |
|
}) |
|
}, |
|
//选择好题目 |
|
selectProject () { |
|
this.lockIt = false |
|
this.submitType = false |
|
this.$router.push('/index/list') |
|
|
|
this.$nextTick(() => { |
|
this.clearStore() |
|
}) |
|
|
|
let params = { |
|
"projectId": this.projectId, |
|
} |
|
sessionStorage.setItem('storeProjectId', this.projectId) |
|
let formList = [] |
|
sessionStorage.setItem('ruleReqs', JSON.stringify(formList)) |
|
sessionStorage.setItem('accountVoucher', JSON.stringify(formList)) |
|
sessionStorage.setItem('accountPasswordAll', '') |
|
sessionStorage.setItem('projectId', this.projectId) |
|
sessionStorage.removeItem('submited', 0) |
|
sessionStorage.removeItem('firstLoad2') |
|
this.setBusinessKey('') |
|
getProjectDetail(params).then((data) => { |
|
if (data.status == 200) { |
|
const { systemId, projectId } = data.data.projectManage |
|
// systemId=11 为银行项目,为其他值则是python项目,直接跳python |
|
if (systemId === 11) { |
|
this.popContainer = false; |
|
this.hintOpen = data.data.projectManage.hintOpen; |
|
this.projectName = data.data.projectManage.projectName; |
|
this.projectId = data.data.projectManage.projectId; |
|
this.projectManage = data.data.projectManage; |
|
this.requires = data.data.projectJudgmentVos; |
|
this.$router.push('/index/list') |
|
} else { |
|
const { cid, curriculumName, token, systemId } = this.$route.query |
|
Cookie.set('admin-assessmentId', '', -1) |
|
Cookie.set('admin-startTime', '', -1) |
|
Cookie.set('admin-stopTime', '', -1) |
|
Cookie.set('admin-projectId', projectId) |
|
Cookie.set('admin-token', token) |
|
Cookie.set('admin-courseId', cid) |
|
Cookie.set('admin-curriculumName', escape(curriculumName)) |
|
Cookie.set('admin-systemId', systemId) |
|
// 8个python子系统都跳这个地址,子系统会通过cookie里的systemId识别展示哪套系统 |
|
location.href = process.env.NODE_ENV === 'development' ? |
|
`http://${location.hostname}:8085/#/` : |
|
location.href.includes('occupationlab.com') ? |
|
'https://www.occupationlab.com/pyTrials' : |
|
`${location.origin}/pyTrials` |
|
} |
|
} |
|
}).catch((error) => { |
|
}) |
|
//获取当前时间 |
|
this.getBeginTime() |
|
this.globalTimer = ""; |
|
this.countVal = ""; |
|
this.day = "00"; |
|
this.seconds = "00"; |
|
this.minutes = "00"; |
|
this.hour = "00"; |
|
this.sss = 1 |
|
this.startCountFn(); |
|
}, |
|
// 查看实验报告 |
|
toReport () { |
|
this.popContainer = false |
|
// this.setShowBusiness(false) |
|
this.$emit('update:showIt', !this.showIt) |
|
this.$router.push(`/index/report?reportId=${this.reportId}`) |
|
}, |
|
//提交 |
|
Submit () { |
|
this.$confirm('此操作将视为结束考试, 是否继续?', '提示', { |
|
center: true, |
|
confirmButtonText: '确定', |
|
cancelButtonText: '取消', |
|
type: 'warning' |
|
}).then(res => { |
|
this.sureSubmit(true) |
|
}).catch(() => { |
|
this.$message({ |
|
type: "info", |
|
message: "已取消提交" |
|
}); |
|
}); |
|
}, |
|
async sureSubmit (judge) { |
|
// 初始化vuex中的state |
|
// this.initState(); |
|
this.actEndTime = new Date().getTime(); |
|
let ruleReqs = sessionStorage.getItem('ruleReqs') |
|
let startTime = sessionStorage.getItem('startTime') || this.entryTime |
|
let ruleReqsList = JSON.parse(ruleReqs); |
|
let lcld = [] |
|
for (var i = 0; i < this.requires.length; i++) { |
|
lcld.push(this.requires[i].judgmentId) |
|
} |
|
let cid = sessionStorage.getItem('cid') |
|
let params = { |
|
"assessmentId": this.assessmentId, |
|
"classId": this.classId, |
|
"curriculumId": +cid, |
|
"endTime": this.actEndTime, |
|
"lcId": lcld, |
|
"projectId": this.projectId, |
|
"projectName": this.projectName, |
|
"purpose": this.projectManage.experimentTarget, |
|
"ruleReqs": ruleReqsList, |
|
"startTime": startTime, |
|
"submitTime": this.actEndTime, |
|
"systemId": this.curSystemId, |
|
competitionId: this.competitionId, |
|
stageId: this.stageId, |
|
teamId: this.teamId, |
|
mallId: this.mallId |
|
} |
|
this.loading = true; |
|
submit(params).then((data) => { |
|
if (data.status == 200) { |
|
sessionStorage.setItem('firstLoad2', true) |
|
// this.clearStore() |
|
const { retMap } = data.data |
|
this.reportId = retMap.reportId |
|
let firstLoad = null |
|
let firstLoad2 = null |
|
if (sessionStorage.getItem('firstLoad')) { |
|
firstLoad = sessionStorage.getItem('firstLoad') |
|
} |
|
if (sessionStorage.getItem('firstLoad2')) { |
|
firstLoad2 = sessionStorage.getItem('firstLoad2') |
|
} |
|
|
|
this.lockIt = true |
|
if (this.assessmentId) { |
|
this.submitType = true |
|
} |
|
if (firstLoad) { |
|
sessionStorage.setItem('firstLoad', firstLoad) |
|
} |
|
if (firstLoad2) { |
|
sessionStorage.setItem('firstLoad2', firstLoad2) |
|
} |
|
|
|
|
|
let datas = retMap.scoreInfo; |
|
let formList = [] |
|
sessionStorage.setItem('ruleReqs', JSON.stringify(formList)) |
|
sessionStorage.setItem('accountVoucher', JSON.stringify(formList)) |
|
sessionStorage.setItem('accountPasswordAll', '') |
|
sessionStorage.setItem('submited', 1) |
|
let list = this.requires |
|
this.grade = retMap.totalScore |
|
for (var j = 0; j < list.length; j++) { |
|
for (var i = 0; i < datas.length; i++) { |
|
if (datas[i].lcId == list[j].judgmentId) { |
|
list[j].flag = datas[i].flag |
|
list[j].scores = datas[i].questionScore |
|
list[j].right = datas[i].calculate |
|
} |
|
} |
|
} |
|
this.sss = 0; |
|
this.popContainer = true; |
|
if (judge) { |
|
this.$message({ |
|
type: 'success', |
|
message: '提交成功' |
|
}); |
|
} |
|
this.requires.splice(0, this.requires.length, ...list) |
|
} else { |
|
this.$message({ |
|
type: "error", |
|
message: data.message |
|
}); |
|
} |
|
this.loading = false |
|
}).catch((error) => { |
|
this.loading = false |
|
}) |
|
}, |
|
//开始计时 |
|
startCountFn () { |
|
if (!this.isStart) { |
|
// this.countVal = this.countVal ? this.countVal : 0; |
|
this.globalTimer = setInterval(() => { |
|
if (this.sss == 0) { |
|
this.globalTimer = null; |
|
clearInterval(this.globalTimer); |
|
} else if (this.timestamp) { |
|
this.counterFn(this.countVal--); |
|
} else { |
|
this.counterFn(this.countVal++); |
|
} |
|
}, 1000); |
|
this.isStart = true; |
|
} |
|
}, |
|
//倒计时 |
|
countDown (timestamp) { |
|
this.timestamp = timestamp |
|
this.sss = 1; |
|
this.globalTimer = null; |
|
clearInterval(this.globalTimer); |
|
this.startCountFn() |
|
}, |
|
counterFn (counterTime) { |
|
if (this.timestamp) { |
|
let countDown = (new Date(counterTime).getTime() - new Date().getTime()) / 1000 |
|
if (countDown > 0) { |
|
let d = Math.floor(countDown / (60 * 60 * 24)); |
|
let h = Math.floor(countDown / (60 * 60)); |
|
let m = Math.floor(countDown % (60 * 60) / 60); |
|
let s = Math.floor(countDown % (60 * 60) % 60); |
|
this.day = `${d > 9 ? d : `0${d}`}`; |
|
this.hour = `${h > 9 ? h : `0${h}`}`; |
|
this.minutes = `${m > 9 ? m : `0${m}`}`; |
|
this.seconds = `${s > 9 ? s : `0${s}`}`; |
|
} else { |
|
this.$confirm('此操作将视为结束考试, 是否继续?', '提示', { |
|
center: true, |
|
confirmButtonText: '确定', |
|
cancelButtonText: '取消', |
|
type: 'warning' |
|
}).then(() => { |
|
this.sureSubmit(true) |
|
|
|
}).catch(() => { |
|
// this.$message({ |
|
// type: "info", |
|
// message: "已取消提交" |
|
// }); |
|
}); |
|
// this.$alert('考试已结束,已自动为您提交。', '提示', { |
|
// confirmButtonText: '确定', |
|
// type: 'warning', |
|
// center: true |
|
// }); |
|
this.sss = 0 |
|
this.sureSubmit(true) |
|
this.day = '00'; |
|
this.hour = '00'; |
|
this.minutes = '00'; |
|
this.seconds = '00'; |
|
} |
|
} else { |
|
let leave1 = counterTime % (24 * 3600 * 1); //计算天数后剩余的毫秒数 |
|
let leave2 = leave1 % (3600 * 1); //计算小时数后剩余的毫秒数 |
|
let leave3 = leave2 % (60 * 1); //计算分钟数后剩余的毫秒数 |
|
let day = Math.floor(counterTime / (24 * 3600 * 1)); //计算相差天数 |
|
let hour = Math.floor(leave1 / (3600 * 1)); //计算相差小时 |
|
let minutes = Math.floor(leave2 / (60 * 1)); //计算相差分钟 |
|
let seconds = Math.round(leave3 / 1); //计算相差秒 |
|
day = day >= 10 ? day : "0" + day; |
|
hour = hour >= 10 ? hour : "0" + hour; |
|
minutes = minutes >= 10 ? minutes : "0" + minutes; |
|
seconds = seconds >= 10 ? seconds : "0" + seconds; |
|
this.day = day; |
|
this.hour = hour; |
|
this.minutes = minutes; |
|
this.seconds = seconds; |
|
} |
|
}, |
|
//重新开始 |
|
async reloadConfirm () { |
|
// 已提交状态则直接重新开始,未提交则询问弹框 |
|
if (this.popContainer) { |
|
this.reload() |
|
} else { |
|
try { |
|
await this.$confirm('<p style="color: #f56c6c;">点击重新开始,之前操作会清空。</p><p>确定重新开始吗?</p>', '提示', { |
|
confirmButtonText: '确定', |
|
cancelButtonText: '取消', |
|
type: 'warning', |
|
// closeOnClickModal: false, |
|
dangerouslyUseHTMLString: true, |
|
}) |
|
this.reload() |
|
} catch (e) { } |
|
} |
|
}, |
|
reload () { |
|
this.submitType = false |
|
this.lockIt = false |
|
this.clearStore() |
|
let token = sessionStorage.getItem('token') |
|
let cid = sessionStorage.getItem('cid') |
|
let systemId = sessionStorage.getItem('systemId') |
|
let projectId = sessionStorage.getItem('projectId') |
|
let formList = [] |
|
sessionStorage.setItem('ruleReqs', JSON.stringify(formList)) |
|
sessionStorage.setItem('accountVoucher', JSON.stringify(formList)) |
|
sessionStorage.setItem('accountPasswordAll', '') |
|
this.setPopId('') |
|
this.setBusinessKey('') |
|
let params = { |
|
"projectId": projectId, |
|
} |
|
this.selectProjects(params) |
|
this.popContainer = false |
|
this.sss = 1 |
|
this.startCountFn(); |
|
deleteCache().then((data) => { |
|
|
|
}).catch(() => { |
|
|
|
}) |
|
this.globalTimer = ""; |
|
this.countVal = ""; |
|
this.day = "00"; |
|
this.seconds = "00"; |
|
this.minutes = "00"; |
|
this.hour = "00"; |
|
this.grade = '00' |
|
this.$router.push('/index/list') |
|
this.getBeginTime() |
|
}, |
|
|
|
checkVer () { |
|
let data = { |
|
userId: this.userId, |
|
id: this.assessmentId |
|
} |
|
this.$get(this.api.qualifications, data).then(res => { |
|
if (res.message == 'false') { |
|
this.isSubmit = true; |
|
} |
|
}); |
|
}, |
|
// 倒计时 |
|
timeFormat (param) { |
|
return param < 10 ? "0" + param : param; |
|
}, |
|
toggleCase () { |
|
if (this.submitType) return |
|
// if (!this.lockIt) { |
|
this.$emit('update:showIt', !this.showIt) |
|
// } else { |
|
// this.closePaneJudge = true |
|
// } |
|
|
|
// this.caseVisible = !this.caseVisible |
|
}, |
|
collapse () { |
|
|
|
}, |
|
passToParent (data) { |
|
this.$emit("getDataFromChild", data); |
|
}, |
|
getCookie (cookie_name) { |
|
//获取cookie中指定key的value |
|
var allcookies = document.cookie; //索引长度,开始索引的位置 |
|
var cookie_pos = allcookies.indexOf(cookie_name); //如果找到了索引,就代表cookie存在,否则不存在 |
|
if (cookie_pos != -1) { |
|
//把cookie_pos放在值的开始,只要给值加1即可 |
|
//计算取cookie值得开始索引,加的1为“=” |
|
cookie_pos = cookie_pos + cookie_name.length + 1; //计算取cookie值得结束索引 |
|
var cookie_end = allcookies.indexOf(";", cookie_pos); |
|
if (cookie_end == -1) { |
|
cookie_end = allcookies.length; |
|
} //得到想要的cookie的值 |
|
var value = unescape(allcookies.substring(cookie_pos, cookie_end)); |
|
} |
|
return value; |
|
} |
|
} |
|
}; |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
$togetherFontSize: 16px; |
|
|
|
/deep/ .el-tab-pane { |
|
font-size: 1rem !important; |
|
} |
|
|
|
.scrollbar { |
|
z-index: 100000000; |
|
} |
|
|
|
.popContainer { |
|
position: absolute; |
|
width: 100%; |
|
/*宽度设置为100%,这样才能使隐藏背景层覆盖原页面*/ |
|
height: 100%; |
|
z-index: 1000; |
|
top: 0; |
|
left: 0; |
|
right: 0; |
|
bottom: 0; |
|
background: rgba(0, 0, 0, 0.3); |
|
} |
|
|
|
/deep/.el-container { |
|
height: 80%; |
|
|
|
&.is-vertical { |
|
position: fixed; |
|
top: 200px; |
|
bottom: 20px; |
|
left: 0; |
|
width: 85%; |
|
height: 70%; |
|
background-color: #f5f5f5; |
|
z-index: 1001; |
|
} |
|
|
|
.el-header { |
|
color: #333; |
|
padding: 0 12px 0 20px; |
|
|
|
.el-button { |
|
background-color: $main-color; |
|
color: #fff; |
|
border: none; |
|
margin: 5px 0px 5px 5px; |
|
font-size: 16px; |
|
} |
|
|
|
.submit-btn { |
|
padding-left: 30px; |
|
padding-right: 30px; |
|
background: $main-color url(../../assets/img/case/btn.png) 0 0/100% 100% no-repeat; |
|
} |
|
} |
|
|
|
.el-aside { |
|
font-size: $togetherFontSize; |
|
color: #333; |
|
|
|
[class*=' el-icon-'], |
|
[class^='el-icon-'] { |
|
line-height: 40px; |
|
font-size: 16px; |
|
font-size: $togetherFontSize; |
|
} |
|
} |
|
|
|
.el-main { |
|
width: 60%; |
|
background-color: #fff; |
|
color: #333; |
|
padding: 0; |
|
font-size: $togetherFontSize; |
|
margin: 0px 20px 10px 10px; |
|
white-space: pre-wrap; |
|
background: #fff url(../../assets/img/case/bg.png) top right no-repeat; |
|
// overflow: visible; |
|
} |
|
|
|
.aside-header { |
|
margin: 0px 10px 10px 10px; |
|
background-color: #fff; |
|
font-size: 0.875rem; |
|
} |
|
|
|
.aside-footer { |
|
margin: 0px 10px 10px 10px; |
|
background-color: #fff; |
|
} |
|
|
|
.header_h { |
|
height: 40px; |
|
background: url(../../assets/img/case/header.png) 0 0/100% 100% no-repeat; |
|
justify-content: center; |
|
|
|
i { |
|
color: #fff; |
|
} |
|
|
|
p { |
|
line-height: 40px; |
|
font-size: 16px; |
|
color: #fff; |
|
padding-left: 10px; |
|
} |
|
} |
|
|
|
.el-card { |
|
border: 0; |
|
border-radius: 0; |
|
|
|
.el-card__body { |
|
padding: 0; |
|
} |
|
} |
|
|
|
.select { |
|
flex: 1; |
|
|
|
input::-webkit-input-placeholder { |
|
color: #333; |
|
} |
|
|
|
.el-input__icon { |
|
line-height: 60px; |
|
} |
|
|
|
.el-select__caret:before { |
|
content: '\e78f'; |
|
font-size: 16px; |
|
padding: 3px; |
|
background-color: $main-color; |
|
border-radius: 50%; |
|
color: #ffffff; |
|
} |
|
|
|
.el-input--suffix .el-input__inner { |
|
color: #333; |
|
font-size: $togetherFontSize; |
|
border-radius: 30px; |
|
border: none; |
|
background-color: #fff; |
|
margin-left: 15px; |
|
overflow: hidden; |
|
text-overflow: ellipsis; |
|
white-space: nowrap; |
|
} |
|
|
|
.el-input { |
|
padding: 10px 0; |
|
} |
|
} |
|
|
|
.font_css { |
|
margin: 0 10px; |
|
text-indent: 2em; |
|
font-size: $togetherFontSize; |
|
padding: 10px 0; |
|
} |
|
|
|
.countDownBox { |
|
font-size: $togetherFontSize; |
|
margin: 0 10px; |
|
padding: 20px 0; |
|
} |
|
|
|
.timeSpan { |
|
color: #333333; |
|
padding: 5px 15px; |
|
font-size: $togetherFontSize; |
|
background: #ffffff; |
|
border-radius: 18px; |
|
margin: 0 5px; |
|
text-align: center; |
|
} |
|
|
|
.gradeSpan { |
|
color: #878787; |
|
padding: 10px; |
|
font-size: $togetherFontSize; |
|
background: #e0e0e0; |
|
border-radius: 6px; |
|
text-align: center; |
|
} |
|
|
|
.el-header /deep/.el-button:hover, |
|
.el-button:focus, |
|
.el-button:active { |
|
background-color: $main-color; |
|
color: #fff; |
|
} |
|
|
|
/deep/.el-table { |
|
font-size: 12px; |
|
|
|
thead { |
|
color: #fff; |
|
} |
|
|
|
.el-table__cell { |
|
padding: 12px 0; |
|
} |
|
|
|
.cell { |
|
font-weight: 100; |
|
font-size: 12px; |
|
} |
|
|
|
td, |
|
th.is-leaf { |
|
border-bottom: 0 !important; |
|
} |
|
} |
|
|
|
.el-table__header-wrapper { |
|
thead { |
|
color: #ffffff; |
|
font-size: 12px; |
|
|
|
th { |
|
font-weight: 100; |
|
} |
|
} |
|
|
|
th, |
|
tr { |
|
background-color: #badfff; |
|
} |
|
} |
|
|
|
.el-table__row--striped { |
|
td { |
|
background-color: #badfff !important; |
|
} |
|
} |
|
|
|
/deep/ .el-collapse { |
|
font-size: 0.875rem; |
|
} |
|
|
|
.el-collapse-item__content { |
|
padding-left: 10px; |
|
padding-right: 10px; |
|
font-size: $togetherFontSize; |
|
} |
|
|
|
.el-collapse-item__wrap { |
|
border-bottom: none; |
|
} |
|
|
|
/deep/.el-collapse-item__header { |
|
font-size: 1rem; |
|
|
|
border-bottom: none; |
|
} |
|
|
|
.el-tabs__content { |
|
margin: 0 20px; |
|
} |
|
|
|
.el-icon-s-ticket:before { |
|
font-size: togetherFontSize; |
|
//padding: 5px; |
|
color: $main-color; |
|
} |
|
|
|
.el-collapse-item__arrow { |
|
margin: 0 5px 0 0; |
|
} |
|
|
|
.el-icon-arrow-right:before { |
|
font-size: 12px; |
|
font-size: $togetherFontSize; |
|
//padding: 1px; |
|
//margin-left: 10px; |
|
background-color: $main-color; |
|
border-radius: 50%; |
|
color: #ffffff; |
|
} |
|
|
|
.el-tabs__item { |
|
font-size: 16px; |
|
} |
|
|
|
.el-tabs--card>.el-tabs__header .el-tabs__nav { |
|
border: none; |
|
} |
|
|
|
.el-tabs--card>.el-tabs__header .el-tabs__item { |
|
border-left: none; |
|
} |
|
|
|
.el-tabs--card>.el-tabs__header { |
|
border-bottom: none; |
|
} |
|
|
|
.el-collapse { |
|
border-bottom: none; |
|
border-top: none; |
|
height: calc(100vh - 422px); |
|
overflow: hidden; |
|
overflow-y: auto; |
|
} |
|
|
|
/deep/.el-collapse-item { |
|
font-size: $togetherFontSize; |
|
background-color: red; |
|
color: red; |
|
} |
|
|
|
.el-tabs__item.is-active { |
|
color: #fff; |
|
background-color: $main-color; |
|
} |
|
|
|
.el-tabs__header { |
|
padding: 5px 20px; |
|
} |
|
} |
|
|
|
.break-all { |
|
font-size: 16px; |
|
word-break: break-all; |
|
} |
|
|
|
.panel { |
|
position: fixed; |
|
z-index: 10010000; |
|
top: 50%; |
|
|
|
&.active { |
|
//z-index: 10; |
|
left: 85%; |
|
z-index: 1001; |
|
} |
|
|
|
img { |
|
height: 175px; |
|
cursor: pointer; |
|
} |
|
} |
|
</style> |