Merge branches 'dev_aliyun' and 'dev_jupyter' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_jupyter

chromesetting
杨树明 5 years ago
commit 04f714c384

@ -23,7 +23,7 @@ class HackUserLastestCodesController < ApplicationController
# 同步代码
def sync_code
@my_hack.update_attributes(code: @hack.code, modify_time: @hack.modify_time)
@my_hack.update_attributes(code: @hack.code, modify_time: Time.now)
end
# 调试代码

@ -12,4 +12,5 @@ json.homework_type homework.homework_type
if homework.homework_type == "practice"
json.shixun_identifier homework.shixuns.take.try(:identifier)
json.shixun_id homework.shixuns.take.try(:id)
json.shixun_status homework.shixuns.take.try(:status).to_i
end

@ -29,6 +29,7 @@ json.homeworks @homework_commons.each do |homework|
if @user_course_identity < Course::STUDENT
if homework.homework_type == "practice"
json.shixun_identifier homework.shixuns.take.try(:identifier)
json.shixun_status homework.shixuns.take.try(:status).to_i
end
elsif @user_course_identity == Course::STUDENT
if homework.homework_type == "practice"

@ -4,7 +4,7 @@
* @Github:
* @Date: 2019-11-27 16:02:36
* @LastEditors: tangjiang
* @LastEditTime: 2019-12-10 09:30:27
* @LastEditTime: 2019-12-13 17:32:33
*/
import './index.scss';
import React, { useState, useRef } from 'react';
@ -84,7 +84,7 @@ const ControlSetting = (props) => {
<Tabs
className={classNames}
activeKey={defaultActiveKey}
tabBarStyle={{ backgroundColor: '#000', color: '#fff' }}
tabBarStyle={{ backgroundColor: 'rgba(48,48,48,1)', color: '#fff' }}
onChange={handleTabChange}
>
<TabPane tab={'自定义测试用例'} key={'1'} style={{ height: '280px', overflowY: 'auto' }}>

@ -2,6 +2,7 @@
position: absolute;
bottom: 0;
width: 100%;
background:rgba(30,30,30,1);
// height: 56px;
.control_tab{
position: absolute;
@ -51,7 +52,8 @@
height: 56px;
padding-right: 30px;
padding-left: 10px;
background: #000;
// background: #000;
background:rgba(48,48,48,1);
}
.setting_drawer{

@ -4,7 +4,7 @@
* @Github:
* @Date: 2019-11-27 19:46:14
* @LastEditors: tangjiang
* @LastEditTime: 2019-12-10 09:31:00
* @LastEditTime: 2019-12-13 17:38:42
*/
import './index.scss';
import React, { useState, useEffect, useRef, useImperativeHandle, forwardRef } from 'react';
@ -50,6 +50,7 @@ function InitTabCtx (props, ref) {
],
initialValue: inputValue
})(<TextArea
className="input_textarea_style"
rows={8}
placeholder="请填写测试用例的输入值,点击“调试代码”"
/>)

@ -47,4 +47,11 @@
.flex_r{
padding: 0 20px 0 10px;
}
.input_textarea_style{
background:rgba(30,30,30,1) !important;
color: #fff;
border-color: transparent;
outline: none;
}
}

@ -4,11 +4,11 @@
* @Github:
* @Date: 2019-11-27 15:02:52
* @LastEditors: tangjiang
* @LastEditTime: 2019-12-10 09:20:42
* @LastEditTime: 2019-12-13 16:16:56
*/
import './index.scss';
import React, { useState, useRef, useEffect } from 'react';
import { Icon, Drawer, Modal } from 'antd';
import { Drawer, Modal } from 'antd';
import { fromStore } from 'educoder';
import { connect } from 'react-redux';
import MonacoEditor from '@monaco-editor/react';

@ -1,11 +1,13 @@
.monaco_editor_area{
height: 100%;
background-color: rgba(30,30,30,1);
.code_title{
display: flex;
align-items: center;
// justify-content: space-between;
// background: #000;
background: #333333;
// background: #333333;
background-color: rgba(48,48,48,1);
color: #fff;
height: 56px;
padding: 0 30px;

@ -4,7 +4,7 @@
* @Github:
* @Date: 2019-11-23 10:53:19
* @LastEditors: tangjiang
* @LastEditTime: 2019-12-12 19:08:24
* @LastEditTime: 2019-12-13 17:19:15
*/
import './index.scss';
import React, { useEffect, useState } from 'react';
@ -23,22 +23,24 @@ import { withRouter } from 'react-router';
function StudentStudy (props) {
const [hasUpdate, setHasUpdate] = useState(true);
const {
// hack,
userInfo,
hack_identifier
hack_identifier,
// user_program_identifier,
restoreInitialCode
} = props;
// 是否更新
const [isUpdate, setIsUpdate] = useState(true);
useEffect(() => {
const {
match: { params },
getUserProgramDetail,
saveUserProgramIdentifier
} = props;
const {
match: { params },
getUserProgramDetail,
saveUserProgramIdentifier
} = props;
let { id } = params;
let { id } = params;
useEffect(() => {
// 保存当前的id
saveUserProgramIdentifier(id);
// startProgramQuestion(id);
@ -46,10 +48,9 @@ function StudentStudy (props) {
}, []);
useEffect(() => {
console.log('=======>>>>>>>>');
const { hack = {} } = props;
if (!hack.modify_code && isUpdate) { // 代码更改,提示是否需要更新代码
setIsUpdate(false);
if (hack.modify_code && hasUpdate) { // 代码更改,提示是否需要更新代码
setHasUpdate(false);
Modal.confirm({
title: '提示',
content: (
@ -61,30 +62,11 @@ function StudentStudy (props) {
okText: '立即更新',
cancelText: '稍后再说',
onOk () {
console.log('更新代码....');
restoreInitialCode(id, '更新成功');
}
});
}
}, [props]);
// useEffect(() => {
// const {hack} = props;
// if (!hack.modify_code) { // 代码更改,提示是否需要更新代码
// Modal.confirm({
// title: '提示',
// content: (
// <p>
// 代码文件有更新啦 <br />
// 还未提交的代码,请自行保存
// </p>
// ),
// okText: '立即更新',
// cancelText: '稍后再说',
// onOk () {
// console.log('更新代码....');
// }
// });
// }
// }, [props]);
}, [props, hasUpdate, setHasUpdate]);
const _hack_id = hack_identifier || fromStore('hack_identifier');
@ -110,7 +92,7 @@ function StudentStudy (props) {
</div> */}
<UserInfo userInfo={userInfo}/>
<div className={'study_name'}>
<span>乘积最大序列</span>
<span>乘积最大序列 {hasUpdate}</span>
</div>
<div className={'study_quit'}>
{/* to={`/problems/${_hack_id}/edit`} */}
@ -146,11 +128,13 @@ function StudentStudy (props) {
const mapStateToProps = (state) => {
const { userInfo } = state.userReducer;
const { hack_identifier } = state.ojForUserReducer;
const { hack_identifier, user_program_identifier, hack } = state.ojForUserReducer;
return {
hack,
userInfo,
user_program_identifier,
hack_identifier
};
};
};
const mapDispatchToProps = (dispatch) => ({
@ -159,7 +143,9 @@ const mapDispatchToProps = (dispatch) => ({
// 调用编程题详情
getUserProgramDetail: (id) => dispatch(actions.getUserProgramDetail(id)),
saveUserProgramIdentifier: (id) => dispatch(actions.saveUserProgramIdentifier(id)),
saveEditorCodeForDetail: (code) => dispatch(actions.saveEditorCodeForDetail(code))
saveEditorCodeForDetail: (code) => dispatch(actions.saveEditorCodeForDetail(code)),
// 恢复初始代码
restoreInitialCode: (identifier, msg) => dispatch(actions.restoreInitialCode(identifier, msg)),
});
export default withRouter(connect(

@ -4,7 +4,7 @@
* @Github:
* @Date: 2019-11-27 14:59:51
* @LastEditors: tangjiang
* @LastEditTime: 2019-12-10 19:00:30
* @LastEditTime: 2019-12-13 16:50:40
*/
import React, { useState, useEffect } from 'react';
import {connect} from 'react-redux';
@ -66,7 +66,7 @@ const RightPane = (props) => {
}
// 恢复初始代码
const handleRestoreInitialCode = () => {
restoreInitialCode(identifier);
restoreInitialCode(identifier, '恢复初始代码成功');
}
return (
@ -110,7 +110,7 @@ const mapDispatchToProps = (dispatch) => ({
// 保存用户代码至后台
saveUserCodeForInterval: (identifier, code) => dispatch(actions.saveUserCodeForInterval(identifier, code)),
// 恢复初始代码
restoreInitialCode: (identifier) => dispatch(actions.restoreInitialCode(identifier)),
restoreInitialCode: (identifier, msg) => dispatch(actions.restoreInitialCode(identifier, msg)),
});
export default connect(

@ -4,7 +4,7 @@
* @Github:
* @Date: 2019-11-27 13:42:11
* @LastEditors: tangjiang
* @LastEditTime: 2019-12-10 19:05:36
* @LastEditTime: 2019-12-13 16:49:42
*/
import types from "./actionTypes";
import { Base64 } from 'js-base64';
@ -19,6 +19,7 @@ import {
fetchUserCodeSubmit,
fetchRestoreInitialCode
} from "../../services/ojService";
import { notification } from "antd";
// 进入编程页面时,首先调用开启编程题接口
export const startProgramQuestion = (id, props) => {
@ -384,17 +385,21 @@ export const submitUserCode = (identifier, inputValue, type) => {
}
// 恢复初始代码
export const restoreInitialCode = (identifier) => {
export const restoreInitialCode = (identifier, msg) => {
return (dispatch) => {
fetchRestoreInitialCode(identifier).then(res => {
if (res.data.status === 401) return;
console.log('恢复初始代码====》》》》', res);
// console.log('恢复初始代码====》》》》', res);
const {status, data} = res;
if (status === 200) {
dispatch({
type: types.RESTORE_INITIAL_CODE,
payload: data.code
})
});
notification.success({
message: '提示',
description: msg
});
}
});
}

@ -4,7 +4,7 @@
* @Github:
* @Date: 2019-11-20 16:35:46
* @LastEditors: tangjiang
* @LastEditTime: 2019-12-13 10:46:15
* @LastEditTime: 2019-12-13 16:56:22
*/
import types from './actionTypes';
import CONST from '../../constants';
@ -251,7 +251,11 @@ export const validateOjForm = (props, type) => {
// 提示发布信息
publishTask(identifier).then(res => {
if (res.data.status === 0) {
message.success('发布成功!');
// message.success('发布成功!');
notification.success({
message: '提示',
description: '发布成功!'
});
linkToDev(dispatch, props);
}
dispatch({
@ -269,7 +273,11 @@ export const validateOjForm = (props, type) => {
fetchPostOjForm(paramsObj).then(res => {
if (res.status === 200) { // 保存成功后,重新跳转至列表页
if (res.data.status === 0) {
message.success(paramsObj['submitType'] === 'update' ? '更新成功' : '保存成功');
// message.success(paramsObj['submitType'] === 'update' ? '更新成功' : '保存成功');
notification.success({
message: '提示',
description: paramsObj['submitType'] === 'update' ? '更新成功' : '保存成功'
});
linkToDev(dispatch, props);
}
dispatch({
@ -299,7 +307,11 @@ export const handleClickCancelPublish = (props, identifier) => {
if (res.status = 200) {
const { data} = res;
if (data.status === 0) {
message.success('撤销发布成功!');
// message.success('撤销发布成功!');
notification.success({
message: '提示',
description: '撤销发布成功!'
});
linkToDev(dispatch, props);
}
}

@ -4,7 +4,7 @@
* @Github:
* @Date: 2019-11-20 10:55:38
* @LastEditors: tangjiang
* @LastEditTime: 2019-12-13 10:09:12
* @LastEditTime: 2019-12-13 17:03:47
*/
import axios from 'axios';
@ -84,10 +84,10 @@ export async function fetchUserCommitRecordDetail (identifier) {
}
// 恢复初始代码
export async function restoreInitialCode (identifier) {
const url = `/myproblems/${identifier}/restore_initial_code.json`;
return axios.get(url);
}
// export async function restoreInitialCode (identifier) {
// const url = `/myproblems/${identifier}/restore_initial_code.json`;
// return axios.get(url);
// }
// 发布任务
export async function publishTask (identifier) {
@ -115,7 +115,8 @@ export async function fetchUserCodeSubmit (identifier) {
// 恢复初始代码
export async function fetchRestoreInitialCode (identifier) {
const url = `/myproblems/${identifier}/restore_initial_code.json`;
// const url = `/myproblems/${identifier}/restore_initial_code.json`;
const url = `/myproblems/${identifier}/sync_code.json`;
return axios.post(url);
}

Loading…
Cancel
Save