You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
235 lines
7.2 KiB
235 lines
7.2 KiB
/*
|
|
* @Description: 用户编程信息
|
|
* @Author: tangjiang
|
|
* @Github:
|
|
* @Date: 2019-11-27 13:41:48
|
|
* @LastEditors : tangjiang
|
|
* @LastEditTime : 2019-12-27 16:52:30
|
|
*/
|
|
import types from "../actions/actionTypes";
|
|
import { Base64 } from 'js-base64';
|
|
import actions from "../actions";
|
|
|
|
const initialState = {
|
|
user_program_identifier: '', // 开启OJ题的唯一标题
|
|
hack: {}, // 编程题主要内容
|
|
test_case: {}, // 测试用例
|
|
commitTestRecordDetail: {}, // 调试代码执行结果
|
|
commitRecordDetail: {}, // 提交成功后记录提交的详情
|
|
commitRecord: [], // 提交记录
|
|
userCode: '', // 保存当前用户输入的代码
|
|
isUpdateCode: false, // 是否更新了代码内容
|
|
userCodeTab: 'task', // 学员测评tab位置: task | record | comment
|
|
userTestInput: '', // 用户自定义输入值
|
|
recordDetail: {}, // 根据id号获取的记录详情
|
|
hack_identifier: '', // 用户界面编辑时
|
|
editor_code: '', // 保存编辑代码
|
|
notice: false, // 通知
|
|
hadCodeUpdate: false, // 更新代码
|
|
operateType: '', // 点击类型: 调度或提交
|
|
comment_identifier: '', // 用户评论时使用的 identifier
|
|
pages: {
|
|
limit: 15,
|
|
page: 1,
|
|
total: 1
|
|
}
|
|
};
|
|
|
|
const ojForUserReducer = (state = initialState, action) => {
|
|
let tempDetail = null;
|
|
switch (action.type) {
|
|
case types.SAVE_USER_PROGRAM_ID:
|
|
return {
|
|
...state,
|
|
user_program_identifier: action.payload
|
|
}
|
|
case types.USER_PROGRAM_DETAIL:
|
|
const { hack, test_case } = action.payload;
|
|
const { code }= hack;
|
|
let tempCode = Base64.decode(code)
|
|
let tempDesc;
|
|
try {
|
|
tempDesc = JSON.parse(hack.description);
|
|
} catch (error) {
|
|
tempDesc = hack.description;
|
|
}
|
|
Object.assign(hack, {code: tempCode, description: tempDesc});
|
|
return {
|
|
...state,
|
|
hack: Object.assign({}, hack),
|
|
test_case: Object.assign({}, test_case),
|
|
comment_identifier: hack.identifier
|
|
}
|
|
case types.COMMIT_RECORD_DETAIL:
|
|
let result = action.payload.data;
|
|
if (result['expected_output']) {
|
|
result['expected_output'] = Base64.decode(result['expected_output'])
|
|
}
|
|
if (result['output']) {
|
|
result['output'] = Base64.decode(result['output']);
|
|
}
|
|
try {
|
|
result['error_msg'] = Base64.decode(result['error_msg']);
|
|
} catch (e) {
|
|
console.log('错误信息:', e);
|
|
}
|
|
if (action.payload.type === 'submit') {
|
|
return {
|
|
...state,
|
|
commitRecordDetail: Object.assign({}, result)
|
|
}
|
|
} else {
|
|
return {
|
|
...state,
|
|
commitTestRecordDetail: Object.assign({}, result)
|
|
}
|
|
}
|
|
|
|
case types.COMMIT_RECORD:
|
|
const {records, records_count} = action.payload;
|
|
return {
|
|
...state,
|
|
commitRecord: records,
|
|
pages: Object.assign({}, state.pages, { total: records_count })
|
|
}
|
|
case types.SAVE_USER_CODE:
|
|
let curCode = Base64.encode(action.payload);
|
|
return {
|
|
...state,
|
|
userCode: curCode,
|
|
isUpdateCode: true,
|
|
}
|
|
case types.IS_UPDATE_CODE:
|
|
return {
|
|
...state,
|
|
isUpdateCode: action.payload
|
|
}
|
|
case types.CHANGE_USER_CODE_TAB:
|
|
return {
|
|
...state,
|
|
userCodeTab: action.payload
|
|
}
|
|
case types.GET_COMMIT_RECORD_DETAIL_BY_ID:
|
|
tempDetail = action.payload.data;
|
|
if (tempDetail['error_msg']) {
|
|
tempDetail['error_msg'] = Base64.decode(tempDetail['error_msg']);
|
|
}
|
|
if (tempDetail['expected_output']) {
|
|
tempDetail['expected_output'] = Base64.decode(tempDetail['expected_output']);
|
|
}
|
|
if (tempDetail['output']) {
|
|
tempDetail['output'] = Base64.decode(tempDetail['output']);
|
|
}
|
|
if (tempDetail['code']) {
|
|
tempDetail['code'] = Base64.decode(tempDetail['code']);
|
|
}
|
|
return {
|
|
...state,
|
|
recordDetail: tempDetail
|
|
}
|
|
case types.RESTORE_INITIAL_CODE:
|
|
const curHack = state.hack;
|
|
let restoreCode = action.payload
|
|
if (restoreCode) {
|
|
curHack['code'] = Base64.decode(restoreCode);
|
|
} else {
|
|
curHack['code'] = '';
|
|
}
|
|
console.log(curHack);
|
|
return {
|
|
...state,
|
|
hack: Object.assign({}, state.hack, curHack)
|
|
}
|
|
case types.SAVE_HACK_IDENTIFIER:
|
|
return {
|
|
...state,
|
|
hack_identifier: action.payload
|
|
}
|
|
case types.SAVE_EDITOR_CODE:
|
|
return {
|
|
...state,
|
|
editor_code: action.payload
|
|
}
|
|
case types.SAVE_USE_TEST_CASE_VALUE:
|
|
return {
|
|
...state,
|
|
userTestInput: action.payload.input
|
|
}
|
|
case types.SAVE_NOTICE_COUNT:
|
|
return {
|
|
...state,
|
|
notice: action.payload
|
|
};
|
|
case types.AUTO_UPDATE_CODE:
|
|
return {
|
|
...state,
|
|
hadCodeUpdate: action.payload
|
|
};
|
|
case types.CLICK_OPERATE_TYPE:
|
|
return {
|
|
...state,
|
|
operateType: action.payload
|
|
}
|
|
case types.CLEAR_OJ_FOR_USER_REDUCER:
|
|
return {
|
|
...state,
|
|
user_program_identifier: '', // 开启OJ题的唯一标题
|
|
hack: {}, // 编程题主要内容
|
|
test_case: {}, // 测试用例
|
|
commitTestRecordDetail: {}, // 调试代码执行结果
|
|
commitRecordDetail: {}, // 提交成功后记录提交的详情
|
|
commitRecord: [], // 提交记录
|
|
userCode: '', // 保存当前用户输入的代码
|
|
isUpdateCode: false, // 是否更新了代码内容
|
|
userCodeTab: 'task', // 学员测评tab位置: task | record | comment
|
|
userTestInput: '', // 用户自定义输入值
|
|
recordDetail: {}, // 根据id号获取的记录详情
|
|
hack_identifier: '', // 用户界面编辑时
|
|
editor_code: '', // 保存编辑代码
|
|
notice: false, // 通知
|
|
hadCodeUpdate: false, // 更新代码
|
|
operateType: '', // 点击类型: 调度或提交
|
|
};
|
|
// 保存评论时用的 identifer
|
|
case types.SAVE_COMMENT_IDENTIFIER:
|
|
return {
|
|
...state,
|
|
comment_identifier: actions.payload
|
|
};
|
|
// 是否点赞
|
|
case types.ADD_OJ_LIKE_COUNT:
|
|
let _count = state.hack.praises_count;
|
|
let _user_praise = state.hack.user_praise;
|
|
_count = +action.payload > 0 ? _count + 1 : _count - 1;
|
|
_user_praise = +action.payload > 0 ? true : false;
|
|
const _hack = Object.assign({}, state.hack, {praises_count: _count, user_praise: _user_praise});
|
|
return {
|
|
...state,
|
|
hack: _hack
|
|
}
|
|
case types.CHANGE_RECORD_PAGINATION_PAGE:
|
|
return {
|
|
...state,
|
|
pages: Object.assign({}, state.pages, { page: action.payload})
|
|
}
|
|
case types.UPDATE_OJ_FOR_USER_COMMENT_COUNT:
|
|
const {comments_count} = state.hack;
|
|
const _comments_count = action.payload === 'add' ? comments_count + 1 : comments_count - 1;
|
|
return {
|
|
...state,
|
|
hack: Object.assign({}, state.hack, { comments_count: _comments_count })
|
|
}
|
|
// 修改笔记内容
|
|
case types.UPDATE_NOTE_CONTENT:
|
|
const _hack1 = Object.assign({}, state.hack, {notes: action.payload });
|
|
return {
|
|
...state,
|
|
hack: _hack1
|
|
}
|
|
default:
|
|
return state;
|
|
}
|
|
}
|
|
|
|
export default ojForUserReducer;
|