diff --git a/public/react/src/modules/developer/components/myMonacoEditor/index.js b/public/react/src/modules/developer/components/myMonacoEditor/index.js
index a3bf6c069..d9acbe5ee 100644
--- a/public/react/src/modules/developer/components/myMonacoEditor/index.js
+++ b/public/react/src/modules/developer/components/myMonacoEditor/index.js
@@ -33,6 +33,7 @@ function MyMonacoEditor(props, ref) {
identifier,
hadCodeUpdate,
showOrHideControl,
+ // saveUserInputCode,
onCodeChange,
onRestoreInitialCode,
onUpdateNotice
@@ -48,6 +49,10 @@ function MyMonacoEditor(props, ref) {
const [height, setHeight] = useState('calc(100% - 56px)');
const editorRef = useRef(null);
+ // useEffect(() => {
+ // setEditCode(props.code || '');
+ // }, [props]);
+
useEffect(() => {
setHeight(showOrHideControl ? 'calc(100% - 378px)' : 'calc(100% - 56px)');
}, [showOrHideControl]);
@@ -70,20 +75,21 @@ function MyMonacoEditor(props, ref) {
}
// 文本框内容变化时,记录文本框内容
- const handleEditorChange = (origin, monaco) => {
+ const handleEditorChange = (_, monaco) => {
editorRef.current = monaco; // 获取当前monaco实例
- // setEditCode(origin); // 保存编辑器初始值
- editorRef.current.onDidChangeModelContent(e => { // 监听编辑器内容的变化
- // TODO 需要优化 节流
- const val = editorRef.current.getValue();
- // setEditCode(val);
- // console.log('编辑器代码====>>>>', val);
- onCodeChange(val);
- // 值一变化保存当前代码值
- // saveUserInputCode(val);
- });
}
+ useEffect(() => {
+ if (editorRef.current) {
+ editorRef.current.onDidChangeModelContent(e => { // 监听编辑器内容的变化
+ const val = editorRef.current.getValue();
+ onCodeChange(val);
+ });
+ }
+ }, [
+ editorRef.current
+ ])
+
// 配置编辑器属性
const editorOptions = {
selectOnLineNumbers: true,
diff --git a/public/react/src/modules/developer/newOrEditTask/index.js b/public/react/src/modules/developer/newOrEditTask/index.js
index 0e94431ba..69fdbf8cb 100644
--- a/public/react/src/modules/developer/newOrEditTask/index.js
+++ b/public/react/src/modules/developer/newOrEditTask/index.js
@@ -8,23 +8,19 @@
import './index.less';
import React, { useEffect } from 'react';
import { connect } from 'react-redux';
-import SplitPane from 'react-split-pane';// import { Form } from 'antd';
+import SplitPane from 'react-split-pane';
import { Button } from 'antd';
import LeftPane from './leftpane';
import RightPane from './rightpane';
import { withRouter } from 'react-router';
import { toStore, CNotificationHOC } from 'educoder';
import UserInfo from '../components/userInfo';
-// import RightPane from './rightpane/index';
import actions from '../../../redux/actions';
-// import {ModalConfirm} from '../../../common/components/ModalConfirm';
const NewOrEditTask = (props) => {
const {
publishLoading,
handlePublish,
- // testCases = [],
- // ojTestCaseValidate = [],
identifier,
isPublish,
userInfo,
@@ -38,15 +34,10 @@ const NewOrEditTask = (props) => {
getQuestion,
saveSearchParams,
setOjInitialValue,
- courseQuestions
- // updateTestAndValidate,
} = props;
- // 表单提交
const handleSubmitForm = () => {
- // 改变loading状态
changeSubmitLoadingStatus(true);
- // 调用输入表单验证功能
if (props.identifier) {
props.handleUpdateOjForm(props);
} else {
@@ -54,12 +45,10 @@ const NewOrEditTask = (props) => {
}
};
+ const id = props.match.params.id;
useEffect(() => {
// 获取用户信息
getUserInfoForNew();
- // console.log('获取路由参数: ====', props.match.params);
- const id = props.match.params.id;
- // 保存OJForm的id号,指明是编辑还是新增
props.saveOJFormId(id);
// 获取地址栏查询参数
const $searchs = window.location.search && window.location.search.substring(1);
@@ -80,21 +69,16 @@ const NewOrEditTask = (props) => {
tag_discipline_id: tag_arrs
});
}
- saveSearchParams({searchParams: $searchs, curPage: obj['pages']});
+ saveSearchParams({ searchParams: $searchs, curPage: obj['pages'] });
}
// 获取课程列表
getQuestion({
source: 'question'
});
if (id) { // id号即 identifier
- // TODO id 存在时, 编辑, 获取 store 中的记录数
props.getOJFormById(id);
- } else {
- // 清空store中的测试用例集合
- // props.clearOJFormStore();
}
- return () => { }
- }, []);
+ }, [id])
// 模拟挑战
const imitationChallenge = () => {
@@ -107,11 +91,9 @@ const NewOrEditTask = (props) => {
// 开始挑战
const startChallenge = () => {
// 调用 start 接口, 成功后跳转到开启实战
- // TODO
identifier && validateOjForm(props, 'challenge', () => {
startProgramQuestion(identifier, props);
});
- // identifier && startProgramQuestion(identifier, props);
}
// 取消
@@ -120,16 +102,11 @@ const NewOrEditTask = (props) => {
props.clearOJFormStore();
// 清空描述信息
toStore('oj_description', '');
- // props.history.push('/problems');
props.history.push(`/problemset?${props.searchParams}`);
}
// 发布
const handleClickPublish = () => {
- // ModalConfirm('提示', (
发布后即可应用到自己管理的课堂
是否确认发布?
), () => {
- // changePublishLoadingStatus(true);
- // handlePublish(props, 'publish');
- // });
props.confirm({
title: '提示',
content: (发布后即可应用到自己管理的课堂
是否确认发布?
),
@@ -141,10 +118,6 @@ const NewOrEditTask = (props) => {
}
// 撤销发布
const handleClickCancelPublish = () => {
- // ModalConfirm('提示', (是否确认撤销发布?
), () => {
- // changePublishLoadingStatus(true);
- // handleCancelPublish(props, identifier);
- // });
props.confirm({
title: '提示',
content: ((是否确认撤销发布?
)),
@@ -174,33 +147,33 @@ const NewOrEditTask = (props) => {
// 发布/模拟挑战
const renderPubOrFight = () => {
const pubButton = isPublish
- ? ()
- : ();
+ ? ()
+ : ();
// 未发布: 模拟挑战 已发布: 开始挑战
const challengeBtn = isPublish ? (
) : (
-
- );
+
+ );
if (isPublish) {
return (
{pubButton}
+ type="primary"
+ loading={submitLoading}
+ onClick={handleSubmitForm}
+ >保存
{challengeBtn}
);
@@ -208,10 +181,10 @@ const NewOrEditTask = (props) => {
return (
+ type="primary"
+ loading={submitLoading}
+ onClick={handleSubmitForm}
+ >保存
{pubButton}
{challengeBtn}
@@ -248,7 +221,6 @@ const NewOrEditTask = (props) => {
- {/* 控制台 */}
{
/* 录入时: 取消 保存 */
diff --git a/public/react/src/modules/developer/studentStudy/rightpane/index.js b/public/react/src/modules/developer/studentStudy/rightpane/index.js
index 0282d5b7b..6fd291eff 100644
--- a/public/react/src/modules/developer/studentStudy/rightpane/index.js
+++ b/public/react/src/modules/developer/studentStudy/rightpane/index.js
@@ -37,16 +37,6 @@ const RightPane = (props) => {
const [noteClazz, setNoteClazz] = useState('editor_nodte_area');
const [noteCount] = useState(5000);
- // const [code, setCode] = useState(editor_code || hack.code);
- // let initFlag = true;
-
- // useEffect(() => {
- // if (editor_code) {
- // setEditorCode(editor_code);
- // } else {
- // setEditorCode(hack.code);
- // }
- // }, [hack, editor_code]);
const handleSubmitForm = () => {
@@ -56,22 +46,18 @@ const RightPane = (props) => {
let timer = null; // 定时器
// 代码块内容变化时
const handleCodeChange = (value) => {
- // console.log('编辑器代码 ======》》》》》》》》》++++++++++', value);
saveUserInputCode(value);
- // setEditorCode(value);
if (!timer) {
timer = setInterval(function () {
clearInterval(timer);
timer = null;
saveUserCodeForInterval(identifier);
- }, 3000);
+ }, 10000);
}
}
// 代码调试
const handleDebuggerCode = (value) => {
- // 调用保存代码块接口,成功后,调用调试接口
- // saveOpacityType('debug');
updateCode(identifier, value, 'debug');
}
// 恢复初始代码
@@ -104,7 +90,6 @@ const RightPane = (props) => {
}
});
}
-
const { getFieldDecorator } = props.form;
return (
diff --git a/public/react/src/redux/actions/ojForUser.js b/public/react/src/redux/actions/ojForUser.js
index a5650d481..3069cb917 100644
--- a/public/react/src/redux/actions/ojForUser.js
+++ b/public/react/src/redux/actions/ojForUser.js
@@ -25,11 +25,10 @@ import { notification } from "antd";
// 进入编程页面时,首先调用开启编程题接口
export const startProgramQuestion = (id, props) => {
return (dispatch, getState) => {
- const {searchParams} = getState().ojFormReducer;
fetchStartProgram(id).then(res => {
const { status, data } = res;
if (status === 200) {
- const {identifier} = data;
+ const { identifier } = data;
dispatch({
type: types.SAVE_USER_PROGRAM_ID,
payload: identifier
@@ -41,13 +40,6 @@ export const startProgramQuestion = (id, props) => {
});
// 跳转至开启编程
if (identifier) {
- // let data = Object.assign({}, props);
- // const path = {
- // pathname: `/myproblems/${identifier}`,
- // state: data
- // }
- // console.log(path);
- // props.history.push(`/myproblems/${identifier}`);
props.history.push({
pathname: `/myproblems/${identifier}`,
});
@@ -115,24 +107,18 @@ export const saveUserCodeForInterval = (identifier, code) => {
type: types.AUTO_UPDATE_CODE,
payload: true
});
- // console.log('+++', userCode);
fetchUpdateCode(identifier, {
code: Base64.encode(userCode)
}).then(res => {
if (res.data.status === 401) {
return;
};
- // dispatch({
- // type: types.RESTORE_INITIAL_CODE,
- // payload: userCode
- // });
setTimeout(() => {
dispatch({
type: types.AUTO_UPDATE_CODE,
payload: false
})
}, 1000);
- // console.log('代码保存成功', res);
}).catch(() => {
dispatch({
type: types.AUTO_UPDATE_CODE,
@@ -190,7 +176,7 @@ export const codeEvaluate = (dispatch, identifier, type, time_limit, hackStatus,
* @param {*} count 执行次数
* @param {*} timer 定时器
*/
- function getCodeSubmit (intervalTime, finalTime, count, timer){
+ function getCodeSubmit(intervalTime, finalTime, count, timer) {
const excuteTime = (count++) * intervalTime; // 当前执行时间
fetchCodeSubmit(identifier, { mode: type }).then(res => {
const { status } = res.data; // 评测返回结果
@@ -290,7 +276,7 @@ export const codeEvaluate = (dispatch, identifier, type, time_limit, hackStatus,
* @param {*} inputValue 输入值: 自定义 | 系统返回的
* @param {*} type 测评类型 debug | submit
*/
-export const debuggerCode = (identifier,value, type) => {
+export const debuggerCode = (identifier, value, type) => {
return (dispatch, getState) => {
// 调用之前 先保存 code
// TODO
@@ -337,19 +323,26 @@ export const debuggerCode = (identifier,value, type) => {
// 获取提交记录
export const getUserCommitRecord = (identifier) => {
return (dispatch, getState) => {
- const { pages: { limit, page } } = getState().ojForUserReducer;
- fetchUserCommitRecord(identifier, {
- limit,
- page
- }).then(res => {
- const {status, data} = res;
- if (status === 200) {
- dispatch({
- type: types.COMMIT_RECORD,
- payload: data
- })
- }
- });
+ try {
+ const { pages: { limit, page } } = getState().ojForUserReducer;
+ fetchUserCommitRecord(identifier, {
+ limit,
+ page
+ }).then(res => {
+ if (res) {
+ const { status, data } = res;
+ if (status === 200) {
+ dispatch({
+ type: types.COMMIT_RECORD,
+ payload: data
+ })
+ }
+ }
+ })
+ } catch (error) {
+ console.log(error, '-------')
+ }
+ ;
}
}
// 获取提交记录详情
@@ -401,11 +394,10 @@ export const changeUserCodeTab = (key) => {
*/
export const submitUserCode = (identifier, inputValue, type) => {
return (dispatch, getState) => {
- const { userCode, isUpdateCode, hack} = getState().ojForUserReducer;
+ const { userCode, isUpdateCode, hack } = getState().ojForUserReducer;
- function userCodeSubmit () {
+ function userCodeSubmit() {
fetchUserCodeSubmit(identifier).then(res => {
- // console.log('用户提交代码成功======》》》》》', res);
if (res.status === 200) {
if (res.data.status === 401) {
dispatch({
@@ -415,7 +407,6 @@ export const submitUserCode = (identifier, inputValue, type) => {
return;
};
// 测评
- console.log('hack=====', hack);
codeEvaluate(dispatch, identifier, type, hack.time_limit, hack.status, hack.score, hack.passed);
}
}).catch(() => {
@@ -427,10 +418,9 @@ export const submitUserCode = (identifier, inputValue, type) => {
}
if (isUpdateCode) {
fetchUpdateCode(identifier, {
- code: userCode
+ code: Base64.encode(userCode)
}).then(res => {
// 是否更新了代码, 目的是当代码没有更新时不调用更新代码接口,目录没有实现
- // TODO 需要优化
if (res.data.status === 401) {
dispatch({
type: types.SUBMIT_LOADING_STATUS,
@@ -460,8 +450,7 @@ export const restoreInitialCode = (identifier, msg) => {
return (dispatch) => {
fetchRestoreInitialCode(identifier).then(res => {
if (res.data.status === 401) return;
- // console.log('恢复初始代码====》》》》', res);
- const {status, data} = res;
+ const { status, data } = res;
if (status === 200) {
dispatch({
type: types.RESTORE_INITIAL_CODE,
@@ -515,7 +504,6 @@ export const changeRecordPagination = (page) => {
export const addNotes = (identifier, params, cb) => {
return (dispatch) => {
fetchAddNotes(identifier, params).then(res => {
- // console.log('添加笔记成功===>>', res);
dispatch({
type: types.LOADING_STATUS,
payload: false