diff --git a/public/react/src/common/SnackbarHOC.js b/public/react/src/common/SnackbarHOC.js
index a59607bf4..d66b697ca 100644
--- a/public/react/src/common/SnackbarHOC.js
+++ b/public/react/src/common/SnackbarHOC.js
@@ -23,22 +23,31 @@ export function SnackbarHOC(options = {}) {
}
// 全局的snackbar this.props.showSnackbar调用即可
- showSnackbar(description, message = "提示",icon) {
- // this.setState({
- // snackbarOpen: true,
- // snackbarText: text,
- // snackbarVertical: vertical,
- // snackbarHorizontal: horizontal,
- // })
- const data = {
- message,
- description
- }
- if (icon) {
- data.icon = icon;
+ // showSnackbar(description, message = "提示",icon) {
+ // // this.setState({
+ // // snackbarOpen: true,
+ // // snackbarText: text,
+ // // snackbarVertical: vertical,
+ // // snackbarHorizontal: horizontal,
+ // // })
+ // const data = {
+ // message,
+ // description
+ // }
+ // if (icon) {
+ // data.icon = icon;
+ // }
+ // notification.open(data);
+ // }
+
+ showSnackbar(text, vertical, horizontal) {
+ this.setState({
+ snackbarOpen: true,
+ snackbarText: text,
+ snackbarVertical: vertical,
+ snackbarHorizontal: horizontal,
+ })
}
- notification.open(data);
- }
render() {
const { snackbarOpen, snackbarText, snackbarHorizontal, snackbarVertical } = this.state;
diff --git a/public/react/src/context/TPIContextProvider.js b/public/react/src/context/TPIContextProvider.js
index ae88bf865..3cb725c34 100644
--- a/public/react/src/context/TPIContextProvider.js
+++ b/public/react/src/context/TPIContextProvider.js
@@ -54,6 +54,8 @@ const testSetsExpandedArrayInitVal = [false, false, false, false, false,
false, false, false, false, false,
false, false, false, false, false]
window.__fetchAllFlag = false; // 是否调用过fetchAll TODO 如何多次使用provider?
+
+const $ = window.$
class TPIContextProvider extends Component {
constructor(props) {
super(props)
@@ -592,13 +594,49 @@ pop_box_new(htmlvalue, 480, 182);
currentPassedGameGainExperience: experience,
})
}
+ initDisplayInterval = () => {
+ const challenge = this.state.challenge
+ if (this.showWebDisplayButtonTimeout) {
+ window.clearTimeout(this.showWebDisplayButtonTimeout)
+ }
+ this.showWebDisplayButtonTimeout = window.setTimeout(() => {
+ this.setState({ challenge: update(challenge,
+ {
+ showWebDisplayButton: { $set: false },
+ })
+ })
+ this.showWebDisplayButtonTimeout = null
+ }, 61 * 1000)
+
+ let remain = 60
+ if (this.displayInterval) {
+ window.clearInterval(this.displayInterval)
+ }
+ this.displayInterval = window.setInterval(() => {
+ const button = $('#showWebDisplayButton');
+ if (button.length) {
+ button.html(`查看效果(${remain})`)
+ if (remain == 0) {
+ button.html('查看效果')
+ }
+ }
+ if (remain == 0) {
+ window.clearInterval(this.displayInterval)
+ this.displayInterval = null
+ return;
+ }
+
+ remain -= 1;
+ }, 1000)
+ }
language_display(data) {
const { game, tomcat_url } = this.state;
- const $ = window.$;
const challenge = Object.assign({}, this.state.challenge)
if(challenge.isWeb && data.port != -1) {
// var $result = $("#php_display");
challenge.showWebDisplayButton = true; // ActionView处是否出现查看效果按钮
+ this.initDisplayInterval()
+
const path = challenge.web_route || challenge.path
const webDisplayUrl = `${tomcat_url}:${data.port}/${path}`
challenge.webDisplayUrl = webDisplayUrl
@@ -653,24 +691,11 @@ pop_box_new(htmlvalue, 480, 182);
const currentGamePassed = this.props.game !== 2 && status === 2
- currentGamePassed && this.language_display(response);
+
// 评测通过了,立即同步costTime
currentGamePassed && this._updateCostTime(true, true);
- if (currentGamePassed) {
- game.status = 2;
- game.next_game = next_game;
-
- } else {
- this.showDialog({
- contentText:
,
- isSingleButton: true
- })
- }
const output_sets = {
"test_sets": test_sets,
@@ -689,6 +714,31 @@ pop_box_new(htmlvalue, 480, 182);
// output_sets.test_sets_array = test_sets_array;
// }
+ // 检查是否编译通过
+ let compileSuccess = false;
+ if (test_sets && test_sets.length) {
+ test_sets.some((item) => {
+ if (item.compile_success) {
+ compileSuccess = true;
+ return true;
+ }
+ })
+ }
+
+ compileSuccess && this.language_display(response);
+ if (currentGamePassed) {
+ game.status = 2;
+ game.next_game = next_game;
+ } else {
+ this.showDialog({
+ contentText: ,
+ isSingleButton: true
+ })
+ }
+
this.setState({
testSetsExpandedArray: testSetsExpandedArrayInitVal.slice(0), // 重置测试集展开状态
diff --git a/public/react/src/modules/courses/Resource/Fileslistitem.js b/public/react/src/modules/courses/Resource/Fileslistitem.js
index 1af027757..6a1e16d6d 100644
--- a/public/react/src/modules/courses/Resource/Fileslistitem.js
+++ b/public/react/src/modules/courses/Resource/Fileslistitem.js
@@ -5,7 +5,8 @@ import {Link} from 'react-router-dom';
import {getImageUrl} from 'educoder';
import axios from 'axios'
import {getUrl} from 'educoder';
-import moment from 'moment';
+import moment from 'moment'
+import { Base64 } from 'js-base64';
import CoursesListType from '../coursesPublic/CoursesListType';
import Showoldfiles from "../coursesPublic/Showoldfiles";
import Modals from '../../modals/Modals';
@@ -26,8 +27,18 @@ class Fileslistitem extends Component{
})
this.props.Settingtypes(discussMessage.id)
}
- showfiles=(value)=>{
+ downloadfiles=(url,name)=>{
+ const aLink = document.createElement('a');
+ aLink.style.display='none';
+ console.log(name)
+ aLink.setAttribute('download',name)
+ aLink.href = url;
+ document.body.appendChild(aLink);
+ aLink.click();
+ // document.body.removeChild(aLink);
+ }
+ showfiles=(value)=>{
let {discussMessage,coursesId}=this.props
let file_id=discussMessage.id
let url="/files/"+file_id+"/histories.json"
@@ -38,35 +49,14 @@ class Fileslistitem extends Component{
}).then((result)=>{
if(result.data.attachment_histories.length===0){
-
- let link = document.createElement('a');
- document.body.appendChild(link);
- link.href = result.data.url;
- console.log(value)
- link.download = value;
- //兼容火狐浏览器
- let evt = document.createEvent("MouseEvents");
- evt.initEvent("click", false, false);
- link.dispatchEvent(evt);
- document.body.removeChild(link);
-
-
- // // window.location.href=result.data.url;
- // let url = window.URL.createObjectURL(new Blob([result.data.url]));
- // let link = document.createElement('a');
- // link.style.display = 'none';
- // link.href = url;
- // link.setAttribute('download',result.data.title);
- // document.body.appendChild(link);
- // link.click();
-
- }else{
+ this.downloadfiles(result.data.url,result.data.title)
+ }else{
this.setState({
Showoldfiles:true,
allfiles:result.data
})
}
- // console.log(result)
+
}).catch((error)=>{
console.log(error)
})
diff --git a/public/react/src/modules/courses/shixunHomework/Listofworks.js b/public/react/src/modules/courses/shixunHomework/Listofworks.js
index db008e2c4..5dd049441 100644
--- a/public/react/src/modules/courses/shixunHomework/Listofworks.js
+++ b/public/react/src/modules/courses/shixunHomework/Listofworks.js
@@ -1340,14 +1340,15 @@ class Listofworks extends Component {
// 导出实习报告批量
internshipreport = (url)=>{
console.log("internshipreport");
- // params: {
- // homework_common_id: homeworkid,
- // work_status: this.state.course_groupyslstwo,
- // course_group: this.state.checkedValuesineinfo,
- // search: this.state.searchtext,
- // }
- // let url = "/zip/shixun_report";
- // let homeworkid = this.props.match.params.homeworkid;
+ var struy="";
+ try {
+ struy = moment().format('YYYY-MM-DD')+"-"+moment().format('hh-mm');
+ struy=struy.replace(/-/g,"");
+ }catch (e) {
+ console.log(1347);
+ console.log(e);
+ }
+
axios.get((url),{responseType: 'blob'}).then((response) => {
console.log("1350");
console.log(response);
@@ -1363,19 +1364,10 @@ class Listofworks extends Component {
const blob = new Blob([response.data], { type: type })
const downloadElement = document.createElement('a')
const href = window.URL.createObjectURL(blob)
- //后台再header中传文件名
- // console.log(Base64.decode(response.headers['content-disposition'].split('=')[1]));
const string = Base64.decode(response.headers['content-disposition'].split('=')[1]);
+ console.log(response.headers['content-disposition'].split('=')[1]);
downloadElement.href = href
- var now="";
- try {
- now = moment().year()+""+(moment().month()+1)+""+moment().date()+""+moment().hour()+""+moment().minute()+""
- console.log(now);
-
- } catch (e) {
- console.log("1376");
- }
- downloadElement.download = string+now+".zip"
+ downloadElement.download = string+struy+".zip"
document.body.appendChild(downloadElement)
downloadElement.click()
document.body.removeChild(downloadElement) // 下载完成移除元素
@@ -1388,6 +1380,17 @@ class Listofworks extends Component {
// 课堂学生成绩的导出下载
Classstudentachievement=(url)=>{
console.log("Classstudentachievement");
+ // console.log();
+ var struy="";
+ try {
+ struy = moment().format('YYYY-MM-DD')+"-"+moment().format('hh-mm');
+ struy=struy.replace(/-/g,"");
+ }catch (e) {
+ console.log(1397);
+ console.log(e);
+ }
+
+
axios.get((url),{responseType: 'blob'}).then((response) => {
console.log("1374");
console.log(response);
@@ -1401,21 +1404,10 @@ class Listofworks extends Component {
const blob = new Blob([response.data], { type: type })
const downloadElement = document.createElement('a')
const href = window.URL.createObjectURL(blob)
- //后台再header中传文件名
- // console.log("1409");
- // console.log(Base64.decode(response.headers['content-disposition'].split('=')[1]));
const string = Base64.decode(response.headers['content-disposition'].split('=')[1]);
- var now="";
- try {
- now = moment().year()+""+(moment().month()+1)+""+moment().date()+""+moment().hour()+""+moment().minute()+""
- console.log("1422");
- console.log(now);
-
- } catch (e) {
- console.log("1432");
- }
+ console.log(response.headers['content-disposition'].split('=')[1]);
downloadElement.href = href
- downloadElement.download =string+now+".xlsx";
+ downloadElement.download =string+struy+".xlsx";
document.body.appendChild(downloadElement)
downloadElement.click()
document.body.removeChild(downloadElement) // 下载完成移除元素
diff --git a/public/react/src/modules/page/main/ActionView.js b/public/react/src/modules/page/main/ActionView.js
index e0e52de9e..fff7d416d 100644
--- a/public/react/src/modules/page/main/ActionView.js
+++ b/public/react/src/modules/page/main/ActionView.js
@@ -25,7 +25,14 @@ const styles = theme => ({
color: '#4CACFF',
border: '1px solid #4CACFF'
}
+ },
+ hoverButton: {
+ margin: theme.spacing.unit,
+ height: '30px',
+ padding: '0 16px',
+ color: '#4CACFF',
+ border: '1px solid #4CACFF'
},
buttonText: {
color: '#1B4061 !important',
@@ -64,11 +71,12 @@ class ActionView extends Component {
{/*将第一个按钮改为visibility方式隐藏,不然加载时测评按钮会出现没有垂直居中的情况*/}
-
-
+
+
+
{
!gameBuilding &&