From ae4a4a2f9927413f76017926c6588939e55e015f Mon Sep 17 00:00:00 2001
From: tangjiang <465264938@qq.com>
Date: Thu, 12 Dec 2019 08:49:50 +0800
Subject: [PATCH 1/5] add author
---
public/react/src/modules/developer/DeveloperHome.js | 10 ++++++++--
.../react/src/modules/developer/studentStudy/index.js | 4 ++--
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/public/react/src/modules/developer/DeveloperHome.js b/public/react/src/modules/developer/DeveloperHome.js
index 178e13ef5..6ca297f80 100644
--- a/public/react/src/modules/developer/DeveloperHome.js
+++ b/public/react/src/modules/developer/DeveloperHome.js
@@ -421,6 +421,7 @@ class DeveloperHome extends React.PureComponent {
// const { testReducer, handleClick } = this.props;
const {
ojListReducer: {hacks_list, top_data, hacks_count},
+ user,
pagination
} = this.props;
const {passed_count = 0, simple_count = 0, medium_count = 0, diff_count = 0} = top_data;
@@ -443,7 +444,11 @@ class DeveloperHome extends React.PureComponent {
>{ctx}
)});
};
-
+ // console.log('=====>>>>>>>>>.', this.props);
+
+ const newBtnStyle = user && (user.admin || (user.is_teacher && user.professional_certification) || user.business)
+ ? { display: 'block'}
+ : { display: 'none'};
return (
@@ -457,7 +462,8 @@ class DeveloperHome extends React.PureComponent {
-
diff --git a/public/react/src/modules/developer/studentStudy/index.js b/public/react/src/modules/developer/studentStudy/index.js
index e218092a0..91ad6778f 100644
--- a/public/react/src/modules/developer/studentStudy/index.js
+++ b/public/react/src/modules/developer/studentStudy/index.js
@@ -4,7 +4,7 @@
* @Github:
* @Date: 2019-11-23 10:53:19
* @LastEditors: tangjiang
- * @LastEditTime: 2019-12-10 19:16:18
+ * @LastEditTime: 2019-12-11 17:35:49
*/
import './index.scss';
import React, { useEffect } from 'react';
@@ -70,7 +70,7 @@ const StudentStudy = (props) => {
{/* to={`/problems/${_hack_id}/edit`} */}
-
+
编辑
{/* to="/problems" */}
From a99b4d3aac095c0932922a0ac4399d9b0fc669f8 Mon Sep 17 00:00:00 2001
From: tangjiang <465264938@qq.com>
Date: Thu, 12 Dec 2019 20:10:57 +0800
Subject: [PATCH 2/5] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BB=A3=E7=A0=81?=
=?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8F=90=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../modules/developer/studentStudy/index.js | 54 +++++++++++++++++--
1 file changed, 49 insertions(+), 5 deletions(-)
diff --git a/public/react/src/modules/developer/studentStudy/index.js b/public/react/src/modules/developer/studentStudy/index.js
index 91ad6778f..923017ffa 100644
--- a/public/react/src/modules/developer/studentStudy/index.js
+++ b/public/react/src/modules/developer/studentStudy/index.js
@@ -4,10 +4,10 @@
* @Github:
* @Date: 2019-11-23 10:53:19
* @LastEditors: tangjiang
- * @LastEditTime: 2019-12-11 17:35:49
+ * @LastEditTime: 2019-12-12 19:08:24
*/
import './index.scss';
-import React, { useEffect } from 'react';
+import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import SplitPane from 'react-split-pane';
import LeftPane from './leftpane';
@@ -15,18 +15,22 @@ import RightPane from './rightpane';
// import { Link } from 'react-router-dom';
// import { getImageUrl } from 'educoder'
// import RightPane from '../newOrEditTask/rightpane';
-import { Icon } from 'antd';
+import { Icon, Modal } from 'antd';
import UserInfo from '../components/userInfo';
import actions from '../../../redux/actions';
import { fromStore} from 'educoder';
import { withRouter } from 'react-router';
-const StudentStudy = (props) => {
+function StudentStudy (props) {
const {
userInfo,
hack_identifier
} = props;
+
+ // 是否更新
+ const [isUpdate, setIsUpdate] = useState(true);
+
useEffect(() => {
const {
match: { params },
@@ -35,13 +39,53 @@ const StudentStudy = (props) => {
} = props;
let { id } = params;
- // console.log(id);
// 保存当前的id
saveUserProgramIdentifier(id);
// startProgramQuestion(id);
getUserProgramDetail(id);
}, []);
+ useEffect(() => {
+ console.log('=======>>>>>>>>');
+ const { hack = {} } = props;
+ if (!hack.modify_code && isUpdate) { // 代码更改,提示是否需要更新代码
+ setIsUpdate(false);
+ Modal.confirm({
+ title: '提示',
+ content: (
+
+ 代码文件有更新啦
+ 还未提交的代码,请自行保存
+
+ ),
+ okText: '立即更新',
+ cancelText: '稍后再说',
+ onOk () {
+ console.log('更新代码....');
+ }
+ });
+ }
+ }, [props]);
+ // useEffect(() => {
+ // const {hack} = props;
+ // if (!hack.modify_code) { // 代码更改,提示是否需要更新代码
+ // Modal.confirm({
+ // title: '提示',
+ // content: (
+ //
+ // 代码文件有更新啦
+ // 还未提交的代码,请自行保存
+ //
+ // ),
+ // okText: '立即更新',
+ // cancelText: '稍后再说',
+ // onOk () {
+ // console.log('更新代码....');
+ // }
+ // });
+ // }
+ // }, [props]);
+
const _hack_id = hack_identifier || fromStore('hack_identifier');
// 处理编辑
From 806630e1e46ceee14a4099eaa901196e22fe01cb Mon Sep 17 00:00:00 2001
From: tangjiang <465264938@qq.com>
Date: Fri, 13 Dec 2019 10:55:35 +0800
Subject: [PATCH 3/5] add author
---
.../src/common/components/ModalConfirm.js | 30 +++++
.../src/modules/developer/DeveloperHome.js | 24 +++-
.../modules/developer/newOrEditTask/index.js | 70 +++++++-----
public/react/src/redux/actions/index.js | 2 +
public/react/src/redux/actions/ojForm.js | 104 ++++++++++--------
public/react/src/services/ojService.js | 8 +-
6 files changed, 160 insertions(+), 78 deletions(-)
create mode 100644 public/react/src/common/components/ModalConfirm.js
diff --git a/public/react/src/common/components/ModalConfirm.js b/public/react/src/common/components/ModalConfirm.js
new file mode 100644
index 000000000..bb29fed03
--- /dev/null
+++ b/public/react/src/common/components/ModalConfirm.js
@@ -0,0 +1,30 @@
+/*
+ * @Description:
+ * @Author: tangjiang
+ * @Github:
+ * @Date: 2019-12-13 10:28:15
+ * @LastEditors: tangjiang
+ * @LastEditTime: 2019-12-13 10:37:17
+ */
+import { Modal } from 'antd';
+
+export function ModalConfirm (
+ title,
+ content,
+ handleOk,
+ handleCancel
+) {
+
+ Modal.confirm({
+ title,
+ content,
+ okText: '确定',
+ cancelText: '取消',
+ onOk () {
+ handleOk && handleOk();
+ },
+ onCancel () {
+ handleCancel && handleCancel();
+ }
+ });
+}
diff --git a/public/react/src/modules/developer/DeveloperHome.js b/public/react/src/modules/developer/DeveloperHome.js
index 6ca297f80..5f787659e 100644
--- a/public/react/src/modules/developer/DeveloperHome.js
+++ b/public/react/src/modules/developer/DeveloperHome.js
@@ -44,6 +44,13 @@ const maps = {
'value': '2'
}
],
+ 'languageMenu': [
+ {
+ 'key': 'c',
+ 'name': 'C语言',
+ 'value': 'c'
+ }
+ ],
'difficultMenu': [
{
'key': '1',
@@ -119,15 +126,14 @@ class DeveloperHome extends React.PureComponent {
>
{/* */}
- this.handleClickDelete(record)}
>
- {/* */}
),
@@ -197,7 +203,6 @@ class DeveloperHome extends React.PureComponent {
componentDidMount() {
// 是否是我的,如果是我的 显示编辑按钮
const { isMySource } = this.props;
- console.log(this.props);
if (isMySource) {
this.handleFilterSearch({come_from: 'mine'});
let _columns = this.columns.concat([this.options]);
@@ -346,6 +351,14 @@ class DeveloperHome extends React.PureComponent {
});
this.handleFilterSearch({category: +item.key === 0 ? '' : +item.key});
}
+ // 下拉语言
+ handleLanguageMenuClick = (item) => {
+ this.addShowFilterCtx({
+ type: 'language',
+ key: item.key
+ });
+ this.handleFilterSearch({language: item.key})
+ }
// 难度下拉
handleHardMenuClick = (item) => {
this.addShowFilterCtx({
@@ -474,6 +487,9 @@ class DeveloperHome extends React.PureComponent {
分类
+
+ 语言
+
难度
diff --git a/public/react/src/modules/developer/newOrEditTask/index.js b/public/react/src/modules/developer/newOrEditTask/index.js
index 6ffe46985..e750cee0a 100644
--- a/public/react/src/modules/developer/newOrEditTask/index.js
+++ b/public/react/src/modules/developer/newOrEditTask/index.js
@@ -9,7 +9,7 @@ import './index.scss';
import React, { useEffect } from 'react';
import { connect } from 'react-redux';
import SplitPane from 'react-split-pane';// import { Form } from 'antd';
-import { Button } from 'antd';
+import { Button, Modal } from 'antd';
import LeftPane from './leftpane';
import RightPane from './rightpane';
import { withRouter } from 'react-router';
@@ -17,6 +17,7 @@ import { toStore } 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 {
@@ -32,17 +33,18 @@ const NewOrEditTask = (props) => {
changePublishLoadingStatus,
startProgramQuestion,
getUserInfoForNew,
+ handleCancelPublish,
// updateTestAndValidate,
} = props;
// 表单提交
const handleSubmitForm = () => {
+ // 改变loading状态
+ changeSubmitLoadingStatus(true);
// 调用输入表单验证功能
if (props.identifier) {
props.handleUpdateOjForm(props);
} else {
- // 改变loading状态
- changeSubmitLoadingStatus(true);
props.handleFormSubmit(props); // 提交表单
}
};
@@ -66,6 +68,9 @@ const NewOrEditTask = (props) => {
}, []);
// 模拟挑战
+ const imitationChallenge = () => {
+ }
+ // 开始挑战
const startChallenge = () => {
// 调用 start 接口, 成功后跳转到模拟页面
startProgramQuestion(identifier, props);
@@ -84,9 +89,20 @@ const NewOrEditTask = (props) => {
// 发布
const handleClickPublish = () => {
- // console.log('public has click');
- changePublishLoadingStatus(true);
- handlePublish(props, 'publish');
+ ModalConfirm('提示', (发布后即可应用到自己管理的课堂
是否确认发布?
), () => {
+ changePublishLoadingStatus(true);
+ handlePublish(props, 'publish');
+ });
+
+
+ }
+ // 撤销发布
+ const handleClickCancelPublish = () => {
+ ModalConfirm('提示', (是否确认撤销发布?
), () => {
+ changePublishLoadingStatus(true);
+ handleCancelPublish(props, identifier);
+ });
+
}
// 取消保存/取消按钮
@@ -107,11 +123,23 @@ const NewOrEditTask = (props) => {
}
// 发布/模拟挑战
const renderPubOrFight = () => {
- const pubButton = isPublish ? '' : (立即发布);
+ const pubButton = isPublish
+ ? (撤销发布)
+ : (立即发布);
+ // 未发布: 模拟挑战 已发布: 开始挑战
+ const challengeBtn = isPublish ? (
+ 开始挑战
+ ) : (
+ 模拟挑战
+ );
return (
{
onClick={handleSubmitForm}
>更新
{pubButton}
- 模拟挑战
+ {challengeBtn}
+ {/* 模拟挑战 */}
)
}
@@ -142,24 +171,9 @@ const NewOrEditTask = (props) => {
return (
- {/*
-
后退
- */}
{props.name || ''}
{ renderQuit() }
- {/* 退出 */}
- {/* 立即发布 */}
@@ -206,6 +220,8 @@ const mapDispatchToProps = (dispatch) => ({
handleFormSubmit: (props) => dispatch(actions.validateOjForm(props)),
// 发布表单
handlePublish: (props, type) => dispatch(actions.validateOjForm(props, type)),
+ // 撤销发布
+ handleCancelPublish: (props, identifier) => dispatch(actions.handleClickCancelPublish(props, identifier)),
// 更新OJForm
handleUpdateOjForm: (props) => dispatch(actions.validateOjForm(props)),
// 根据id号获取表单信息
diff --git a/public/react/src/redux/actions/index.js b/public/react/src/redux/actions/index.js
index e52b88fc5..c19fa7e41 100644
--- a/public/react/src/redux/actions/index.js
+++ b/public/react/src/redux/actions/index.js
@@ -31,6 +31,7 @@ import {
testCaseOutputChange,
updateTestAndValidate,
updateOpenTestCaseIndex,
+ handleClickCancelPublish,
} from './ojForm';
import {
@@ -79,6 +80,7 @@ export default {
validateOjTimeLimit,
validateOjCategory,
validateOpenOrNot,
+ handleClickCancelPublish,
addTestCase,
deleteTestCase,
testCaseInputChange,
diff --git a/public/react/src/redux/actions/ojForm.js b/public/react/src/redux/actions/ojForm.js
index c49e628f3..b7fbd6e80 100644
--- a/public/react/src/redux/actions/ojForm.js
+++ b/public/react/src/redux/actions/ojForm.js
@@ -4,11 +4,16 @@
* @Github:
* @Date: 2019-11-20 16:35:46
* @LastEditors: tangjiang
- * @LastEditTime: 2019-12-10 19:54:56
+ * @LastEditTime: 2019-12-13 10:46:15
*/
import types from './actionTypes';
import CONST from '../../constants';
-import { fetchPostOjForm, fetchGetOjById, publishTask } from '../../services/ojService';
+import {
+ fetchPostOjForm,
+ fetchGetOjById,
+ publishTask,
+ cancelPublicTask
+} from '../../services/ojService';
import { Base64 } from 'js-base64';
import { message, notification, Modal } from 'antd';
import { toStore } from 'educoder';
@@ -80,6 +85,18 @@ const payloadInfo = (key, value, errMsg, validateInfo) => ({
}
});
+// 接口调用成功后,跳转至列表页
+function linkToDev (dispatch, props) {
+ toStore('oj_description', '');
+ dispatch({
+ type: types.IS_MY_SOURCE,
+ payload: true
+ });
+ setTimeout(() => {
+ props.history.push('/problems');
+ }, 1000);
+}
+
// 表单提交验证
export const validateOjForm = (props, type) => {
return (dispatch, getState) => {
@@ -229,59 +246,31 @@ export const validateOjForm = (props, type) => {
paramsObj['identifier'] = identifier;
}
- // 接口调用成功后,跳转至列表页
- function linkToDev () {
- toStore('oj_description', '');
- dispatch({
- type: types.IS_MY_SOURCE,
- payload: true
- });
- setTimeout(() => {
- props.history.push('/problems');
- }, 1000);
- }
-
// 调用保存或更新
if (type === 'publish') {
// 提示发布信息
- Modal.confirm({
- title: '提示',
- content: `
- 发布后即可应用到自己管理的课堂,
- 是否确定发布?`,
- okText: '确定',
- cancelText: '取消',
- onOk () {
- publishTask(identifier).then(res => {
- if (res.data.status === 0) {
- message.success('发布成功!');
- linkToDev();
- }
- dispatch({
- type: types.PUBLISH_LOADING_STATUS,
- payload: false
- });
- }).catch(() => {
- dispatch({
- type: types.PUBLISH_LOADING_STATUS,
- payload: false
- });
- });
- },
- onCancel () {
- dispatch({
- type: types.PUBLISH_LOADING_STATUS,
- payload: false
- });
+ publishTask(identifier).then(res => {
+ if (res.data.status === 0) {
+ message.success('发布成功!');
+ linkToDev(dispatch, props);
}
+ dispatch({
+ type: types.PUBLISH_LOADING_STATUS,
+ payload: false
+ });
+ }).catch(() => {
+ dispatch({
+ type: types.PUBLISH_LOADING_STATUS,
+ payload: false
+ });
});
} else {
// 调用更新
fetchPostOjForm(paramsObj).then(res => {
if (res.status === 200) { // 保存成功后,重新跳转至列表页
- if (res.data.identifier) {
- message.success('保存成功!');
- linkToDev();
+ if (res.data.status === 0) {
+ message.success(paramsObj['submitType'] === 'update' ? '更新成功' : '保存成功');
+ linkToDev(dispatch, props);
}
dispatch({
type: types.SUBMIT_LOADING_STATUS,
@@ -299,6 +288,29 @@ export const validateOjForm = (props, type) => {
}
}
};
+// 撤销发布
+export const handleClickCancelPublish = (props, identifier) => {
+ return (dispatch) => {
+ cancelPublicTask(identifier).then(res => {
+ dispatch({
+ type: types.PUBLISH_LOADING_STATUS,
+ payload: false
+ });
+ if (res.status = 200) {
+ const { data} = res;
+ if (data.status === 0) {
+ message.success('撤销发布成功!');
+ linkToDev(dispatch, props);
+ }
+ }
+ }).catch(() => {
+ dispatch({
+ type: types.PUBLISH_LOADING_STATUS,
+ payload: false
+ });
+ })
+ }
+}
// 保存提交的代码
export const saveOjFormCode = (value) => {
return {
diff --git a/public/react/src/services/ojService.js b/public/react/src/services/ojService.js
index 74c243379..9700f7031 100644
--- a/public/react/src/services/ojService.js
+++ b/public/react/src/services/ojService.js
@@ -4,7 +4,7 @@
* @Github:
* @Date: 2019-11-20 10:55:38
* @LastEditors: tangjiang
- * @LastEditTime: 2019-12-10 20:46:16
+ * @LastEditTime: 2019-12-13 10:09:12
*/
import axios from 'axios';
@@ -95,6 +95,12 @@ export async function publishTask (identifier) {
return axios.post(url);
}
+// 撤销发布
+export async function cancelPublicTask (identifier) {
+ const url = `/problems/${identifier}/cancel_publish.json`;
+ return axios.post(url);
+}
+
// 更新用户编辑代码
export async function fetchUpdateCode (identifier, params) {
const url = `/myproblems/${identifier}/update_code.json`;
From 74586f166adccffc701d2906042e7ea6e933d149 Mon Sep 17 00:00:00 2001
From: tangjiang <465264938@qq.com>
Date: Fri, 13 Dec 2019 13:30:55 +0800
Subject: [PATCH 4/5] update test cases
---
.../modules/developer/newOrEditTask/index.js | 22 ++++++++++++++-----
.../leftpane/editorTab/AddTestDemo.js | 6 ++---
.../newOrEditTask/leftpane/editorTab/index.js | 3 ++-
.../react/src/redux/reducers/ojFormReducer.js | 12 ++++++----
4 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/public/react/src/modules/developer/newOrEditTask/index.js b/public/react/src/modules/developer/newOrEditTask/index.js
index e750cee0a..bc905fdf7 100644
--- a/public/react/src/modules/developer/newOrEditTask/index.js
+++ b/public/react/src/modules/developer/newOrEditTask/index.js
@@ -140,16 +140,26 @@ const NewOrEditTask = (props) => {
) : (
模拟挑战
);
+
+ // 更新
+ // const updateBtn = isPublish
+ // ? ''
+ // : (
+ // 更新
+ // );
return (
- 更新
+ 更新
{pubButton}
{challengeBtn}
- {/* 模拟挑战 */}
)
}
diff --git a/public/react/src/modules/developer/newOrEditTask/leftpane/editorTab/AddTestDemo.js b/public/react/src/modules/developer/newOrEditTask/leftpane/editorTab/AddTestDemo.js
index d34efc080..4c4131fa9 100644
--- a/public/react/src/modules/developer/newOrEditTask/leftpane/editorTab/AddTestDemo.js
+++ b/public/react/src/modules/developer/newOrEditTask/leftpane/editorTab/AddTestDemo.js
@@ -4,7 +4,7 @@
* @Github:
* @Date: 2019-11-21 09:19:38
* @LastEditors: tangjiang
- * @LastEditTime: 2019-12-10 19:37:35
+ * @LastEditTime: 2019-12-13 11:58:46
*/
import './index.scss';
import React, { useState } from 'react';
@@ -16,7 +16,7 @@ const { TextArea } = Input;
const FormItem = Form.Item;
const AddTestDemo = (props) => {
const {
- // key,
+ key,
onSubmitTest,
onDeleteTest,
testCase,
@@ -138,7 +138,7 @@ const AddTestDemo = (props) => {
return (
handleChangeCollapse()}>
-
+