实验缓存

ui
jialong.yu 3 years ago
parent cba2750588
commit 352be7ca95
  1. 262
      src/components/TestPanel.vue
  2. 259
      src/components/codemirror.vue
  3. 19
      src/utils/api.js
  4. 86
      src/views/Home.vue

@ -6,7 +6,7 @@
<div class="flex" style="width: 28%">
<p>实训项目</p>
<el-select
v-model="value1"
v-model="projectId"
placeholder="请选择"
class="select"
:disabled="projectPermissions != 0"
@ -14,7 +14,7 @@
style="flex: 1"
>
<el-option
v-for="item in value"
v-for="item in projectList"
:key="item.projectId"
:label="item.projectName"
:value="item.projectId"
@ -44,7 +44,7 @@
v-show="projectPermissions == 0"
@click="reload"
>重新开始</el-button>
<el-button style="margin-right:7px" @click="Submit()" :disabled="isSubmit">提交</el-button>
<el-button style="margin-right:7px" @click="Submit" :disabled="isSubmit">提交</el-button>
</div>
</div>
</el-header>
@ -96,7 +96,7 @@
</div>
</el-aside>
<el-main>
<el-tabs v-model="activeName" type="card">
<el-tabs v-model="pannelTab" type="card">
<el-tab-pane label="案例" name="first">
<div class="break-all" v-html="experimentDescription"></div>
</el-tab-pane>
@ -105,13 +105,13 @@
<el-collapse-item v-for="(loop, index) in points" :key="index">
<template slot="title">
<i class="el-icon-s-ticket"></i>
<span style="font-size:16px">{{loop.experimentalRequirements}}</span>
<div class="break-all" v-html="loop.experimentalRequirements"></div>
</template>
<div class="break-all" v-html="loop.experimentalRequirements"></div>
<div class="break-all" v-html="loop.expserimentalRequirements"></div>
</el-collapse-item>
</el-collapse>
</el-tab-pane>
<el-tab-pane label="实验提示" name="fifth" v-if="isstartexperimentSuggests">
<el-tab-pane label="实验提示" name="fifth" v-if="hintOpen">
<div class="break-all" v-html="experimentHint"></div>
</el-tab-pane>
</el-tabs>
@ -139,15 +139,23 @@ import util from '@/util'
export default {
data() {
return {
userId: util.getCookie("userId"),
studentId: util.getCookie("studentId"),
courseId: util.getCookie("courseId"),
projectId: util.getCookie("projectId"),
assessmentId: util.getCookie("assessmentId"),
projectPermissions: 0, // (0 1 2)
isSubmit: false,
entryTime: util.formatDate('yyyy-MM-dd hh:mm:ss'),
startTime: util.getCookie("startTime") ? new Date(util.getCookie("startTime")).getTime() : '',
stopTime: util.getCookie("stopTime") ? new Date(util.getCookie("stopTime")).getTime() : '',
test: [],
ishow: true,
grade: "00",
exampleData: "",
codeid: "",
codeIds: [],
judgmentPointsIds: [],
text: "",
isStart: false,
isStart: false, //
globalTimer: null, //setInterval
millisecond: 0,
countVal: this.defaultVal, //
@ -156,10 +164,9 @@ export default {
seconds: 0,
minutes: 0,
hour: 0,
createTime: "", //
actEndTime: "", //
value1: "", //
value: [],
createTime: '', //
actEndTime: '', //
projectList: [],
experimentTarget: "", //
experimentDescription: "", //
experimentHint: "", //
@ -167,21 +174,9 @@ export default {
points: [],
activeNames: [],
tableData: [],
activeName: "first",
studentId: "",
courseId: "",
projectId: "",
assessmentId: "",
projectPermissions: 0, //(0 1 2)
isSubmit: false,
entryTime: util.formatDate('yyyy-MM-dd hh:mm:ss'),
startTime: '',
stopTime: '',
isSelected: false,
userId: '',
workbenchCus: this.workbench,
isRecovery: false,
isstartexperimentSuggests: 1
pannelTab: "first",
isSelected: false, // true
hintOpen: 1 //
};
},
watch: {
@ -240,51 +235,23 @@ export default {
}
},
mounted() {
this.assessmentId = util.getCookie("assessmentId");
this.userId = util.getCookie("userId");
this.studentId = util.getCookie("studentId");
this.projectId = util.getCookie("projectId");
this.courseId = util.getCookie("courseId");
this.startTime = util.getCookie("startTime") ? new Date(util.getCookie("startTime")).getTime() : ''
this.stopTime = util.getCookie("stopTime") ? new Date(util.getCookie("stopTime")).getTime() : ''
this.projectPermissions = this.projectId ? 1 : 0
if(this.projectId){
this.getQueryProject();
}else{
console.log(33)
this.getProjects();
let codeCache = localStorage.getItem('codeCache')
if(codeCache){
codeCache = JSON.parse(codeCache)
// if(codeCache.systemId && codeCache.systemId == this.$config.systemId){
// this.$confirm('', '', {
// confirmButtonText: '',
// cancelButtonText: '',
// type: 'success'
// }).then(() => {
// this.value1 = codeCache.projectId
// this.workbenchCus = codeCache.workbench
// this.isRecovery = true
// this.selectProject()
// let codeIds = []
// codeCache.workbench.map(n => codeIds.push(n.code.codeId))
// codeIds = codeIds.filter(n => n)
// this.codeIds = codeIds
// this.$emit('recoveryCode',codeCache.workbench1)
// }).catch(() => {
// localStorage.removeItem('codeCache')
// })
// }
}
this.projectPermissions = this.projectId ? 1 : 0 // /
if(this.projectId){ // projectId)
this.getProDetail()
}else{ //
//
this.getList().then(() => {
let cache = localStorage.getItem('codeCache')
if(cache){
cache = JSON.parse(cache)
this.getCache(cache.projectId, cache.judgmentId)
}
}).catch(res => {})
}
this.assessmentId && this.projectId && this.checkVer()
this.codeId && this.codeIds.push(this.codeId)
//
newmain.$on("codeid", val => {
this.codeid = val;
let codeId = this.codeid;
this.codeIds.push(codeId);
});
// tableData
newmain.$on("updateJud", item => {
@ -296,32 +263,44 @@ export default {
});
},
methods: {
checkVer() {
let data = {
userId: this.userId,
id: this.assessmentId
}
this.$get(this.api.qualifications,data).then(res => {
if(res.message == 'false'){
this.isSubmit = true;
newmain.$emit("isSubmit", this.isSubmit);
//
getCache(projectId, judgmentId) {
this.$post(this.api.getLastCache, {
bcId: judgmentId ? judgmentId : this.judgmentId,
cid: this.courseId,
projectId: projectId ? projectId : this.projectId
}).then(res => {
const code = res.getLastCache
if (code) {
this.$confirm('是否要继续上次的实验?', '提示', {
confirmButtonText: '是',
cancelButtonText: '否',
type: 'success'
}).then(() => {
localStorage.removeItem('codeCache')
this.projectId = projectId
this.judgmentId = judgmentId
this.points[0].code = code
this.$emit("tell", this.projectId, this.projectPermissions, this.points)
// this.$emit('recoveryCode', cache.curTab)
}).catch(() => {
localStorage.removeItem('codeCache')
})
}
});
}).catch(res => {})
},
//
reload() {
this.$post(this.api.DeleteCodes, this.codeIds).then(res => {
this.$post(this.api.DeleteCodes).then(res => {
this.getClearTime()
this.grade = '00'
localStorage.removeItem('codeCache')
this.codeIds = []
this.isSubmit = false
newmain.$emit("isSubmit", this.isSubmit)
let workbench = this.workbench
workbench.map(n => {
n.code = {
code: '',
codeId: ''
code: ''
}
})
this.$emit('recoveryCode',workbench)
@ -334,29 +313,24 @@ export default {
this.startCountFn()
});
},
//
Submit() {
if(!this.codeIds.length) return this.$message.error('请先完成实验')
// if(!this.codeIds.length) return this.$message.error('')
this.$confirm("此操作将视为结束考试, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
center: true
})
.then(() => {
}).then(() => {
this.actEndTime = new Date().getTime();
this.getClearTime();
//
this.$post(this.api.Submit, {
// projectPermissions: 0,
createTime: this.startTime,
endTime: this.stopTime,
projectId: this.projectId,
projectPermissions: this.projectPermissions,
// assessmentId: 1,
assessmentId: this.assessmentId ? this.assessmentId : '',
codeIds: this.codeIds,
judgmentPointsIds: this.judgmentPointsIds,
// studentId: 54,
studentId: this.studentId,
record: {
courseId: 1,
@ -394,20 +368,17 @@ export default {
});
})
.catch(err => {});
})
.catch(() => {
}).catch(() => {
this.$message({
type: "info",
message: "已取消提交"
});
});
},
//
timeFormat(param) {
return param < 10 ? "0" + param : param;
},
//
step() {
$(".m_step").toggleClass("n_step");
@ -428,45 +399,26 @@ export default {
// this.text = ''
// }
},
handleData(project,type){
if(!this.isSelected){
this.value = project;
this.value1 = project[0].projectId;
}
this.projectId = type == 2 ? project[0].projectId : this.projectId
if(type == 2) this.getQueryProject(0,1)
this.projectPermissions = type == 1 ? project[0].projectPermissions : this.projectPermissions
this.experimentTarget = project[0].experimentTarget;
this.experimentDescription = project[0].experimentDescription;
this.experimentHint = project[0].experimentHint;
this.actEndTime = project[0].endTime;
this.isRecovery = false
},
getQueryProject(projectId,type) {
//++++
this.$get(this.api.QueryProject, {
projectId: projectId ? projectId : this.projectId
})
.then(res => {
if(!type){
this.handleData(res.projectManage,1)
this.projectId = res.projectManage[0].projectId
}
// debugger
this.points = res.projectJudgmentVos;
this.$emit("tell", this.value1, this.projectPermissions, this.points);
// -
if (this.points.length) {
this.$parent.workbench1 = '0';
}
this.tableData = res.message.projectJudgmentVos;
let arr1 = this.tableData;
let result1 = arr1.map(e => e.judgmentPointsId);
this.judgmentPointsIds = this.judgmentPointsIds.concat(result1)
this.isstartexperimentSuggests = !res.message.project[0].isstartexperimentSuggests //01
//
getProDetail() {
const projectId = this.projectId
return new Promise((resolve, reject) => {
this.$get(this.api.QueryProject, {
projectId
}).then(res => {
const points = res.projectJudgmentVos
const project = res.projectManage
points.map(e => {
e.code = ''
})
this.points = points
this.judgmentId = points[0].judgmentId
this.experimentTarget = project.experimentTarget
this.experimentDescription = project.experimentDescription
this.experimentHint = project.experimentHint
// this.actEndTime = project[0].endTime
this.hintOpen = !res.projectManage.hintOpen // 01
this.$emit("tell", projectId, this.projectPermissions, this.points)
if (this.projectPermissions == "1") {
this.text = "剩余";
var interval = setInterval(() => {
@ -511,25 +463,41 @@ export default {
this.startCountFn();
}
}
resolve()
}).catch(err => {
reject()
})
.catch(err => {});
})
},
getProjects(){
//
getList(){
let data = {
systemId: 1,
cId: this.courseId,
permissions: this.projectPermissions
systemId: 1,
cId: this.courseId, // id
permissions: this.projectPermissions
}
this.$get(`${this.api.queryTestProject}`,data).then(res => {
this.handleData(res.projects,2)
}).catch(res => {});
return new Promise((resolve, reject) => {
this.$get(`${this.api.queryTestProject}`,data).then(res => {
const list = res.projects
this.projectList = list
this.projectId = list ? list[0].projectId : 0
this.getProDetail().then(() => {
resolve()
}).catch(res => {
reject()
})
}).catch(res => {
reject()
})
})
},
//
selectProject(){
this.isSelected = true
this.assessmentId = ''
this.judgmentPointsIds = []
this.codeIds = []
this.getQueryProject(this.value1)
// -
this.$parent.workbench1 = '0'
this.getProDetail()
this.isSubmit = false
this.countVal = 0
this.grade = 0
@ -552,9 +520,9 @@ export default {
this.minutes = minutes;
this.seconds = seconds;
},
//
startCountFn() {
if (!this.isStart) {
if (!this.isStart) { //
this.countVal = this.countVal ? this.countVal : 0;
let timer = setInterval(() => {
this.counterFn(this.countVal++);

@ -2,24 +2,22 @@
<div style="display:flex;">
<div class="left">
<codemirror
v-model="exampleData"
:value="codeid"
v-model="codeVal"
:options="cmOption"
class="code-mirror"
@ready="onCmReady3"
@ready="ready"
ref="myCmGenerate"
></codemirror>
<div v-if="isSubmit" class="code-mask"></div>
<el-button
type="warning"
@click="AnswerTips()"
:disabled="isAnswerTips"
@click="runCode"
:disabled="runEnable"
style="width:100px;position:absolute;z-index:99;background:#FDCA17;color:black;right: 50px;bottom:15px;"
>运行</el-button>
</div>
<div class="code-right answer">
<p class="text-wrapper" v-html="modifys"></p>
<!-- <p class="text-wrapper">{{modifys}}</p> -->
<p class="text-wrapper" v-html="runResult"></p>
<div class="pic-wrap" v-if="picSrc">
<div style="margin-bottom: 5px;text-align: center">
<img class="pic" :src="picSrc" alt="">
@ -27,17 +25,14 @@
<el-button class="download-btn" type="primary" size="mini" @click="$refs.picLink.click()">下载图片</el-button>
<a ref="picLink" style="display: none;" download="运行结果.png" :href="picSrc">下载图片</a>
</div>
<div class="code_yes" v-show="this.isError == 0">
<div class="code_yes" v-show="this.isError">
<img src="../assets/img/yes.png" alt />运行成功
</div>
<div class="code_error" v-show="this.isError == 1">
<div class="code_error" v-show="this.isError === 0">
<img src="../assets/img/error.png" alt />
{{num}}行出现错误
<!-- <el-button
style="color:rgba(255,49,49,1);background:rgba(255,255,255,1);margin-left:80px"
>求助</el-button>-->
<el-button class="tips-btn" @click="getQueryAnswer()" v-show="ShowAssessmentId">提示</el-button>
<el-dialog title="答案提示" center :visible.sync="error">
{{errLine}}行出现错误
<el-button class="tips-btn" @click="getTips" v-show="showTips">提示</el-button>
<el-dialog title="答案提示" center :visible.sync="tipsVisible">
<el-tabs>
<el-tab-pane label="参考答案">
<div class="answer-wrap" v-html="answer"></div>
@ -90,37 +85,27 @@ import "codemirror/addon/fold/xml-fold.js";
//
import "codemirror/theme/monokai.css";
import "codemirror/theme/base16-light.css";
import * as $ from "jquery";
import { Loading } from 'element-ui';
import axios from 'axios';
import util from '@/util'
const CANCEL_TOKEN = axios.CancelToken
const CANCEL_TOKEN = axios.CancelToken // input
export default {
props: ["workbench1", "code", "codeid", "projectId"],
props: ["workbench1", "code", "projectId"],
data() {
return {
courseId: util.getCookie("courseId"),
datas: [],
ShowAssessmentId: false,
answer: "",
exampleData: this.code,
codeId: this.codeid,
codes: [],
submit: "",
modifys: "", //
isError: 2,
timer: "",
after: "",
num: "",
userId: '',
studentId: "",
isSubmit: "", //
isAnswerTips: false,
error: false,
picVisible: false,
picSrc: '',
loadIns: null,
submiting: false,
assessmentId: util.getCookie("assessmentId"), // id
courseId: util.getCookie("courseId"), // id
showTips: false, //
answer: '', //
codeVal: this.code,
runResult: '', //
isError: false, //
errLine: '', //
isSubmit: false, //
runEnable: false, //
tipsVisible: false, //
picSrc: '', // url
loadIns: null, // loading
cmOption: {
scrollbarStyle: "native",
tabSize: 2, // tab
@ -149,41 +134,34 @@ export default {
theme: "monokai", //
extraKeys: { Ctrl: "autocomplete" } // keyMap
},
inputTextReg: /^((?!#).*?(,|\(|\[|\{|\s)+)?input(?!\w)\(['|"]([\s\S]+?)['|"]\)/m,// input()
requestList: [],
sourceCode: '',
requestTimer: null,
assessmentId: util.getCookie("assessmentId"),
inputTextReg: /^((?!#).*?(,|\(|\[|\{|\s)+)?input(?!\w)\(['|"]([\s\S]+?)['|"]\)/m, // input()
requestList: [], // inputaxios
sourceCode: '', // inputexit
requestTimer: null //
};
},
components: {
codemirror
},
watch: {
list() {
this.timer();
},
exampleData(val) {
this.$emit("update:code", val);
},
codeId(val) {
this.$emit("update:codeid", val);
codeVal(val) {
this.$emit("update:code", val)
}
},
mounted() {
if (!this.assessmentId) {
this.ShowAssessmentId = true;
}
if (!this.assessmentId) this.showTips = true
//
newmain.$on("isSubmit", isSubmit => {
this.isSubmit = isSubmit;
});
this.isSubmit = isSubmit
})
},
methods: {
onCmReady3() {
//
ready() {
this.$refs.myCmGenerate.codemirror.setSize("auto", "calc(100vh - 149px)");
},
//
downloadFile(fileName,url) {
var x = new XMLHttpRequest()
x.open("GET", url, true)
@ -203,11 +181,11 @@ export default {
// input
confirmInput(msg){
let receiveResult = msg.replace('validing:','')
this.modifys += receiveResult
this.runResult += receiveResult
this.$prompt(receiveResult, "提示", {
confirmButtonText: "确定"
}).then(({ value }) => {
this.modifys += `${value}<br>`
this.runResult += `${value}<br>`
// exit
this.sourceCode = this.sourceCode.replace(`exit('validing:${receiveResult.replace(/[\r\n]*/g,'')}')`,val => {
return `'${value}'`
@ -222,8 +200,8 @@ export default {
this.requestList.map(n => n('interrupt'))
},1000)
axios.post(this.api.UpdateCode,{
code: this.exampleData,
axios.post(this.api.runPythonCode,{
code: this.codeVal,
bcId: this.workbench1,
cid: this.courseId,
projectId: this.projectId
@ -236,19 +214,15 @@ export default {
let result = res.message.result
if(result.includes('File ')){
let modify = res.message.result
this.modifys = modify
this.after = modify.substring(
modify.indexOf("line") + 4,
modify.length
);
this.num = parseInt(this.after)
this.runResult = modify
this.errLine = parseInt(modify.substring(modify.indexOf("line") + 4, modify.length))
this.isError = res.message.isError
}else if(result.includes('validing:')){
this.isError = 0
this.confirmInput(result)
}else if(!res.message.isError){
this.isError = 0
this.modifys += result
this.runResult += result
newmain.$emit("updateJud",{
id: res.data.judgmentPointsId,
isError: res.data.isError
@ -256,31 +230,30 @@ export default {
}
}).catch(e => {
if(e && e.message == 'interrupt'){
this.AnswerTips(true)
this.runCode(true)
this.requestList = []
}
})
}).catch(err => {})
},
AnswerTips(isWhile) {// isWhiletruewhile
if (this.isSubmit == "") {
this.submit = 1;
if (this.codeid == "") {
runCode(isWhile) { // isWhiletruewhile
if (!this.isSubmit) {
if (!this.codeVal) {
this.$message({
message: "警告哦,内容为空不可运行",
type: "warning"
});
})
} else {
let inputTextReg = this.inputTextReg
let inputFuncReg = /input\(['|"]/g
// input
if (inputTextReg.test(this.exampleData)) {
let sourceCode = this.exampleData
if (inputTextReg.test(this.codeVal)) {
let sourceCode = this.codeVal
sourceCode = sourceCode.replace(inputTextReg,val => {
return val.replace(/\\n/g,"")
})
this.exampleData = sourceCode
this.codeVal = sourceCode
// inputexit"validing:"便
sourceCode = sourceCode.replace(inputFuncReg,val => {
@ -288,9 +261,9 @@ export default {
})
this.sourceCode = sourceCode
if(!isWhile) this.modifys = ''
this.$post(this.api.UpdateCode, {
code: this.exampleData,
if(!isWhile) this.runResult = ''
this.$post(this.api.runPythonCode, {
code: this.codeVal,
bcId: this.workbench1,
cid: this.courseId,
projectId: this.projectId
@ -299,16 +272,12 @@ export default {
if(result.includes('File ')){
let modify = res.message.result
if(isWhile){
this.modifys += modify
this.runResult += modify
}else{
this.modifys = modify
this.runResult = modify
}
this.after = modify.substring(
modify.indexOf("line") + 4,
modify.length
);
this.num = parseInt(this.after)
this.errLine = parseInt(modify.substring(modify.indexOf("line") + 4, modify.length))
this.isError = res.message.isError
}else if(result.includes('validing:')){
this.isError = 0
@ -319,93 +288,65 @@ export default {
this.loadIns = Loading.service({
background: 'transparent'
})
//()
this.$post(this.api.UpdateCode, {
code: this.exampleData,
// Python
this.$post(this.api.runPythonCode, {
code: this.codeVal,
bcId: this.workbench1,
cid: this.courseId,
projectId: this.projectId
})
.then(res => {
this.loadIns.close()
this.picSrc = ''
if(typeof res.message == 'string'){
this.isError = res.message.isError;
this.modifys = ''
this.picSrc = `${res.message}?id=${new Date().getTime()}`
newmain.$emit("updateJud",{
id: res.data.judgmentPointsId,
isError: res.data.isError
})
}else{
//
// 7
if(!res.message.isError){
let result = ''
try {
result = eval(res.message.result)
} catch (error) {}
if(result instanceof Array && result.length && (result[0].includes('.jpg') || result[0].includes('.png') || result[0].includes('.gif'))){
result.map((n,i) => {
this.downloadFile(`${i+1}.jpg`,n)
})
this.isError = 0
this.modifys = '下载完成'
}else{
this.isError = res.message.isError;
newmain.$emit("updateJud",{
id: res.data.judgmentPointsId,
isError: res.data.isError
})
var modify = res.message.result;
this.modifys = modify;
this.after = modify.substring(
modify.indexOf("line") + 4,
modify.length
);
this.num = parseInt(this.after);
}
}else{
this.isError = res.message.isError;
newmain.$emit("updateJud",{
id: res.data.judgmentPointsId,
isError: res.data.isError
}).then(res => {
const data = res.code
const photo = data.photoUrl
const result = data.runResult
this.loadIns.close()
this.picSrc = ''
if(photo){
this.isError = 0
this.runResult = ''
this.picSrc = `${photo}?id=${new Date().getTime()}`
}else{
//
// 7
if(0){
if(result instanceof Array && result.length && (result[0].includes('.jpg') || result[0].includes('.png') || result[0].includes('.gif'))){
result.map((n,i) => {
this.downloadFile(`${i+1}.jpg`,n)
})
var modify = res.message.result;
this.modifys = modify;
this.after = modify.substring(
modify.indexOf("line") + 4,
modify.length
);
this.num = parseInt(this.after);
this.isError = 0
this.runResult = '下载完成'
}else{
this.isError = 0
this.runResult = data.runResult
this.errLine = parseInt(result.substring(modify.indexOf("line") + 4, modify.length))
}
} else {
this.isError = data.retResult
this.runResult = result
this.errLine = parseInt(result.substring(result.indexOf("line") + 4, result.length))
}
})
.catch(res => {
res.status == 500 && this.$message.error('检测到代码里有非法代码,请检查是否有调用系统命令。')
this.loadIns.close()
});
clearTimeout(this.timer);
}
}).catch(res => {
res.status == 500 && this.$message.error('检测到代码里有非法代码,请检查是否有调用系统命令。')
this.loadIns.close()
})
}
}
} else {
this.isAnswerTips = true;
this.runEnable = true
this.$message({
message: "警告哦,已提交不可再运行",
type: "warning"
});
})
}
},
getQueryAnswer() {
this.error = true;
getTips() {
this.tipsVisible = true
//
this.$get(this.api.QueryAnswer, {
judgmentPointsId: this.workbench1
})
.then(res => {
this.answer = res.message;
})
.catch(err => {});
}).then(res => {
this.answer = res.message
}).catch(err => {})
}
}
};

@ -2,15 +2,12 @@ import config from '@/config'
let host = `${config.host}`
export default {
QueryProject: `${host}occupationlab/projectManage/getProjectDetail`, //项目选择下拉框+项目信息+判分点信息展示
ProjectId: `${host}/python/projectId`, //判分点下拉框信息展示
Submit: `${host}/python/submit`, //提交代码与判分点进行判断
UpdateCode: `${host}python/python/runPythonCode`, //实时更新编辑器代码(修改代码)
QueryAnswer: `${host}/python/queryAnswer`, //提示答案
DeleteCodes: `${host}/python/deleteCodes`, //重新开始
QueryAllProject: `${host}/python/queryAllProject`, //项目选择下拉框
ChangeCode: `${host}/python/changeCode`, //input交互
queryTestProject: `${host}occupationlab/projectManage/getProjectBySystemId`, //input交互
qualifications: `${host}/python/qualifications`, //input交互
saveCache: `${host}python/python/saveCache` //中途退出实验并保存实验数据(虚拟仿真实验)
QueryProject: `${host}occupationlab/projectManage/getProjectDetail`,
Submit: `${host}/python/submit`,
runPythonCode: `${host}python/python/runPythonCode`,
QueryAnswer: `${host}/python/queryAnswer`,
DeleteCodes: `${host}/python/deleteCodes`,
queryTestProject: `${host}occupationlab/projectManage/getProjectBySystemId`,
saveCache: `${host}python/python/saveCache`,
getLastCache: `${host}python/python/getLastCache`
}

@ -11,11 +11,11 @@
<div class="flex center">
<p v-if="$config.isHh" style="font-size: 18px">{{$config.title}}</p>
<p>编程语言</p>
<el-input placeholder="请输入内容" v-model="value" :disabled="true"></el-input>
<el-input placeholder="请输入内容" v-model="language" :disabled="true"></el-input>
</div>
<div class="tab">
<el-tabs v-model="workbench1" type="card">
<el-tabs v-model="curTab" type="card">
<el-tab-pane
v-for="item in workbench"
:key="item.judgmentId"
@ -57,29 +57,12 @@ import util from '@/util'
export default {
data() {
return {
courseId: util.getCookie("courseId"),
//
isShow: false,
projectPermissions: 0, //(0 1 2)
ops: {
vuescroll: {},
scrollPanel: {},
rail: {
keepShow: true
},
bar: {
hoverStyle: true,
onlyShowBarOnScroll: false, //
background: "red", //
opacity: 0.5, //
"overflow-x": "hidden"
}
},
judgmentPointsId: "",
courseId: util.getCookie("courseId"), // id
projectPermissions: 0, // (0 1 2)
codeId: 0,
value: "Python",
workbench1: "", //
workbench: [],
language: "Python", //
curTab: "", //
workbench: [], //
editableTabs: [],
tabIndex: 2,
name: "",
@ -98,35 +81,42 @@ export default {
codemirror,
testPanel
},
beforeDestroy(){
this.leavePage()
},
mounted() {
this.autoLogout()
if (window.history && window.history.pushState) {
//
history.pushState(null, null, document.URL);
window.addEventListener("popstate", this.goBack, false);
window.onbeforeunload = () => {
this.leavePage()
}
},
destroyed() {
window.removeEventListener("popstate", this.goBack, false);
},
methods: {
//
leavePage(){
if(!this.$refs.mainindex.isSubmit && !this.assessmentId && this.workbench.length){
let data = {
code: '',
bcId: this.workbench1,
cid: this.courseId,
projectId: this.projectId
const list = this.workbench
if(!this.$refs.mainindex.isSubmit && !this.assessmentId && list.length){
if(list.some(e => e.code)){
const cache = {
projectId: this.projectId,
judgmentId: list[this.curTab].judgmentId
}
localStorage.setItem('codeCache', JSON.stringify(cache))
list.map(e => {
if (e.code) {
let data = {
code: e.code,
bcId: e.judgmentId,
cid: this.courseId,
projectId: this.projectId
}
this.$post(this.api.saveCache,data).then(res => {}).catch(e => {})
}
})
}
this.$post(this.api.saveCache,data).then(res => {}).catch(e => {})
}
},
// 退
autoLogout(){
let lastTime = new Date().getTime()
let logout = false
//
document.onmousedown = () => {
lastTime = new Date().getTime()
}
@ -138,23 +128,19 @@ export default {
}
},1000)
},
goBack() {
this.leavePage()
history.back()
},
getDataFromChild(data) {
sessionStorage.setItem("timer", parseInt(data));
},
recoveryCode(workbench){
this.workbench = workbench
this.codeKey++
this.workbench1 = '0'
this.curTab = '0'
},
reload(){
this.$refs.mainindex.reload()
},
// 退
back() {
this.leavePage()
if(this.projectPermissions){
//
if (this.$config.isBeta) { //
@ -173,9 +159,11 @@ export default {
//
getQueryIndex(value1, projectPermissions,workBench) {
//
this.projectId = value1;
this.projectPermissions = projectPermissions;
console.log(5555,workBench)
this.projectId = value1
this.projectPermissions = projectPermissions
this.workbench = workBench
this.codeKey++
},
}
};

Loading…
Cancel
Save