|
|
|
@ -161,24 +161,12 @@ export default { |
|
|
|
|
ready() { |
|
|
|
|
this.$refs.myCmGenerate.codemirror.setSize("auto", "calc(100vh - 149px)"); |
|
|
|
|
}, |
|
|
|
|
// 下载文件 |
|
|
|
|
downloadFile(fileName,url) { |
|
|
|
|
var x = new XMLHttpRequest() |
|
|
|
|
x.open("GET", url, true) |
|
|
|
|
x.responseType = 'blob' |
|
|
|
|
x.onload=function(e) { |
|
|
|
|
var url = window.URL.createObjectURL(x.response) |
|
|
|
|
var a = document.createElement('a') |
|
|
|
|
a.href = url |
|
|
|
|
a.download = fileName |
|
|
|
|
a.click() |
|
|
|
|
} |
|
|
|
|
x.send() |
|
|
|
|
}, |
|
|
|
|
// python代码里如果有input函数的话,是做了单独的处理的,原理是先把所有input函数都替换成exit函数,再在exit函数里加上特定标识,再通过接口传给后端去执行 |
|
|
|
|
// 因为exit函数是跟input有类似的效果,就是都会产生阻塞,所以python引擎一旦遇到exit,进程就会被停止,然后返回exit函数里面的值,而这个值,就是上面说的特定标识加上原本这个input函数里的值 |
|
|
|
|
// 然后就可以通过这个返回的值来提示给用户,让用户继续输入 |
|
|
|
|
// 下面这个函数就是递归执行这个input输入过程的函数 |
|
|
|
|
/** |
|
|
|
|
* python代码里如果有input函数的话,是做了单独的处理的,原理是先把所有input函数都替换成exit函数,再在exit函数里加上特定标识,再通过接口传给后端去执行 |
|
|
|
|
* 因为exit函数是跟input有类似的效果,就是都会产生阻塞,所以python引擎一旦遇到exit,进程就会被停止,然后返回exit函数里面的值,而这个值,就是上面说的特定标识加上原本这个input函数里的值 |
|
|
|
|
* 然后就可以通过这个返回的值来提示给用户,让用户继续输入 |
|
|
|
|
* 下面这个函数就是递归执行这个input输入过程的函数 |
|
|
|
|
*/ |
|
|
|
|
confirmInput(msg){ |
|
|
|
|
let receiveResult = msg.replace('validing:','') |
|
|
|
|
this.runResult += receiveResult |
|
|
|
@ -299,37 +287,36 @@ export default { |
|
|
|
|
const data = res.code |
|
|
|
|
const photo = data.photoUrl |
|
|
|
|
const result = data.runResult |
|
|
|
|
this.$emit('cache') |
|
|
|
|
this.$emit('cache') // 每次运行代码都要把代码传给后端做缓存 |
|
|
|
|
this.loadIns.close() |
|
|
|
|
this.picSrc = '' |
|
|
|
|
this.$emit('update:codeId', res.codeId) |
|
|
|
|
this.$emit('update:answer', result) |
|
|
|
|
if(photo){ |
|
|
|
|
this.isError = '' |
|
|
|
|
const text = result.replace(photo, '') |
|
|
|
|
this.$emit('update:codeId', res.codeId) // 更新coddeId |
|
|
|
|
this.$emit('update:answer', result) // 更新运行结果 |
|
|
|
|
let imgList = '' |
|
|
|
|
try { |
|
|
|
|
imgList = eval(result) |
|
|
|
|
} catch (error) {} |
|
|
|
|
// 如果是下载图片的代码,则要显示图片和运行结果,不用显示对错,换成显示下载图片 |
|
|
|
|
if (photo) { |
|
|
|
|
this.isError = '' // 对错隐藏 |
|
|
|
|
const text = result.replace(photo, '') // 结果里包含了图片路径,所以要把图片路径给去掉 |
|
|
|
|
this.runResult = text |
|
|
|
|
this.picSrc = photo |
|
|
|
|
}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) |
|
|
|
|
} else if (imgList instanceof Array && imgList.length && (imgList[0].includes('.jpg') || imgList[0].includes('.png') || imgList[0].includes('img'))) { |
|
|
|
|
/** |
|
|
|
|
* 这段是为要下载图片的项目案例写的,后端会返回图片名称的数组,前端负责循环这个数组,然后下载下来 |
|
|
|
|
* 只有该系统有这段代码,因为其他7个系统没有下载图片的项目,后续如果加了,直接把这段代码复制过去即可 |
|
|
|
|
*/ |
|
|
|
|
imgList.map((n,i) => { |
|
|
|
|
util.downloadFile(`${i+1}.jpg`,n) |
|
|
|
|
}) |
|
|
|
|
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() |
|
|
|
|