Commit 2e580d79 by wufan

Merge branch 'feature/yuananting/20210712/exam-optimize' into 'master'

Feature/yuananting/20210712/exam optimize

See merge request !69
parents 75624ae3 020e12a3
/* /*
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2020-08-31 09:34:31 * @Date: 2020-08-31 09:34:31
* @LastEditors: Please set LastEditors * @LastEditors: yuananting
* @LastEditTime: 2021-06-24 19:34:21 * @LastEditTime: 2021-07-12 17:40:26
* @Description: * @Description:
* @Copyright: 杭州杰竞科技有限公司 版权所有 * @Copyright: 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -115,6 +115,10 @@ class Axios { ...@@ -115,6 +115,10 @@ class Axios {
window.RCHistory.replace('/login'); window.RCHistory.replace('/login');
return Promise.reject(); return Promise.reject();
break; break;
case 504:
message.error('网络状况不稳定,如果出现数据异常,请刷新页面');
Promise.reject();
break;
default: default:
message.error(error.message); message.error(error.message);
break; break;
......
...@@ -312,7 +312,7 @@ class LiveCourseList extends React.Component { ...@@ -312,7 +312,7 @@ class LiveCourseList extends React.Component {
return ( return (
<div className='related-task'> <div className='related-task'>
<Choose> <Choose>
<When condition={record.relatedPlanLis}> <When condition={record.relatedPlanList}>
<Tooltip title={this.handlePlanName(record.relatedPlanList)} placement='top' arrowPointAtCenter> <Tooltip title={this.handlePlanName(record.relatedPlanList)} placement='top' arrowPointAtCenter>
{record.relatedPlanList.map((item, index) => { {record.relatedPlanList.map((item, index) => {
return ( return (
......
/* /*
* @Author: yuananting * @Author: yuananting
* @Date: 2021-02-22 10:59:43 * @Date: 2021-02-22 10:59:43
* @LastEditors: fusanqiasng * @LastEditors: yuananting
* @LastEditTime: 2021-06-15 11:20:48 * @LastEditTime: 2021-07-13 11:54:21
* @Description: 助学工具-侧边课程分类树 * @Description: 助学工具-侧边课程分类树
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -20,7 +20,7 @@ class CourseCategorySiderTree extends Component { ...@@ -20,7 +20,7 @@ class CourseCategorySiderTree extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {
selectedKeys: ['QUESTION_INDEX', 'PAPER_INDEX'].includes(props.fromModule) ? [getParameterByName('categoryId') || 'null'] : ['null'], selectedKeys: ['null'],
treeData: props.treeData || [], treeData: props.treeData || [],
autoExpandParent: false, autoExpandParent: false,
}; };
......
...@@ -36,12 +36,14 @@ function AddExam(props: any) { ...@@ -36,12 +36,14 @@ function AddExam(props: any) {
const [getData, setGetData] = useState(false); const [getData, setGetData] = useState(false);
const [preview, setPreview] = useState(false); const [preview, setPreview] = useState(false);
const [examTotal, setExamTotal] = useState(0); const [examTotal, setExamTotal] = useState(0);
const [examList, setExamList] = useState([]);
const request = useRef(false); const request = useRef(false);
const { match } = props; const { match } = props;
const [examDuration, setExamDuration] = useState(undefined); const [examDuration, setExamDuration] = useState(undefined);
useEffect(() => { useEffect(() => {
queryExamList();
switch (props.type) { switch (props.type) {
case "copy": // 考试列表-复制考试进入 case "copy": // 考试列表-复制考试进入
case "edit": // 考试列表-编辑考试进入 case "edit": // 考试列表-编辑考试进入
...@@ -52,6 +54,7 @@ function AddExam(props: any) { ...@@ -52,6 +54,7 @@ function AddExam(props: any) {
case "editPaperToAddExam": // 组卷页面-编辑保存试卷并组织考试 case "editPaperToAddExam": // 组卷页面-编辑保存试卷并组织考试
setGetData(true); setGetData(true);
setPaperInfo(props.paperInfo); setPaperInfo(props.paperInfo);
setExamName(props.paperInfo?.paperName)
break; break;
} }
}, []) }, [])
...@@ -72,6 +75,22 @@ function AddExam(props: any) { ...@@ -72,6 +75,22 @@ function AddExam(props: any) {
return current && current < moment().startOf('day'); return current && current < moment().startOf('day');
} }
function queryExamList() {
let param = {
current: 1,
size: 9999,
order: 'EXAM_START_TIME_DESC',
userId: User.getStoreUserId(),
tenantId: User.getStoreId(),
source: 0,
}
Service.Hades('public/hades/queryExamPageList', param).then(res=> {
console.log(res)
const { result = {} } = res;
setExamList(result.records)
})
}
function queryExamDetail() { function queryExamDetail() {
Service.Hades("public/hades/queryExamDetail", { Service.Hades("public/hades/queryExamDetail", {
examId: match.params.id, examId: match.params.id,
...@@ -137,6 +156,11 @@ function AddExam(props: any) { ...@@ -137,6 +156,11 @@ function AddExam(props: any) {
return return
} }
if(checkExist(param.examName)) {
message.warning('此考试名称已存在');
return
}
if (!paperId) { if (!paperId) {
message.warning('请选择试卷'); message.warning('请选择试卷');
return return
...@@ -250,6 +274,26 @@ function AddExam(props: any) { ...@@ -250,6 +274,26 @@ function AddExam(props: any) {
}) })
} }
// 校验考试名称是否存在
function checkExist(examName: any) {
var result:any = null;
examList.forEach((item:any) => {
if (result != null) {
return result;
}
if (props.type === 'edit') {
if (item.examName === examName && item.examId !== match.params.id) {
result = item;
}
} else {
if (item.examName === examName) {
result = item;
}
}
});
return result;
};
let title = ''; let title = '';
switch (props.type) { switch (props.type) {
case 'add': case 'add':
...@@ -281,8 +325,8 @@ function AddExam(props: any) { ...@@ -281,8 +325,8 @@ function AddExam(props: any) {
layout="horizontal" layout="horizontal"
> >
<Form.Item label="考试名称" <Form.Item label="考试名称"
validateStatus={(check && (!examName ? '请输入考试名称' : (examName.length > 40) && '考试名称最多40字')) ? 'error' : ''} validateStatus={(check && (!examName || (examName.length > 40 || checkExist(examName)) )) ? 'error' : ''}
help={check && (!examName ? '请输入考试名称' : (examName.length > 40) && '考试名称最多40字')} help={check && (!examName ? '请输入考试名称' : (examName.length > 40 ? '考试名称最多40字' : (checkExist(examName) && '此考试名称已存在')))}
required> required>
<Input placeholder='请输入考试名称(40字以内)' maxLength={40} value={examName} onChange={(e) => { <Input placeholder='请输入考试名称(40字以内)' maxLength={40} value={examName} onChange={(e) => {
......
/* /*
* @Author: yuananting * @Author: yuananting
* @Date: 2021-03-27 16:15:13 * @Date: 2021-03-27 16:15:13
* @LastEditors: fusanqiasng * @LastEditors: yuananting
* @LastEditTime: 2021-07-01 16:30:38 * @LastEditTime: 2021-07-13 12:01:37
* @Description: 助学工具-新建/复制/编辑试卷 * @Description: 助学工具-新建/复制/编辑试卷
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -118,7 +118,7 @@ class OperatePaper extends Component { ...@@ -118,7 +118,7 @@ class OperatePaper extends Component {
portionScore: 0, portionScore: 0,
totalQuestion: 0, totalQuestion: 0,
}, },
] ],
}; };
} }
...@@ -352,20 +352,6 @@ class OperatePaper extends Component { ...@@ -352,20 +352,6 @@ class OperatePaper extends Component {
return result; return result;
}; };
validatePaperName = (paperName) => {
if (this.state.check && !paperName) {
return '请输入试卷名称';
}
if (this.checkExist(paperName)) {
return '该试卷名称已存在';
}
if (paperName && paperName.length > 40) {
return '试卷名称最多40字';
}
};
// 保存试卷 // 保存试卷
savePaper = (saveType) => { savePaper = (saveType) => {
this.setState({ check: true }); this.setState({ check: true });
...@@ -373,8 +359,17 @@ class OperatePaper extends Component { ...@@ -373,8 +359,17 @@ class OperatePaper extends Component {
const categoryId = getParameterByName('categoryId'); const categoryId = getParameterByName('categoryId');
const { match } = this.props; const { match } = this.props;
let questionList = []; let questionList = [];
if (!formData.passRate || !formData.paperName || this.checkExist(formData.paperName) || (formData.paperName && formData.paperName.length > 40)) { if(!formData.paperName) {
return; return message.warning('请输入试卷名称')
}
if(formData.paperName.length > 40) {
return message.warning('试卷名称最多40字')
}
if (this.checkExist(formData.paperName)) {
return message.warning('该试卷名称已存在')
}
if(!formData.passRate) {
return message.warning('请输入及格线')
} }
if (selectQuestionList.length === 0) { if (selectQuestionList.length === 0) {
return message.warning('请选择题目'); return message.warning('请选择题目');
...@@ -410,18 +405,14 @@ class OperatePaper extends Component { ...@@ -410,18 +405,14 @@ class OperatePaper extends Component {
}); });
} else { } else {
message.success(currentOperate === 'new' ? '新建成功' : '复制成功'); message.success(currentOperate === 'new' ? '新建成功' : '复制成功');
window.RCHistory.push({ window.RCHistory.goBack();
pathname: `/paper-manage-index?categoryId=${categoryId}`,
});
Bus.trigger('queryPaperPageList', categoryId, selectQuestionList.length); Bus.trigger('queryPaperPageList', categoryId, selectQuestionList.length);
Bus.trigger('queryCategoryTree', 'remain'); Bus.trigger('queryCategoryTree', 'remain');
} }
} }
}) })
.catch((e) => { .catch((e) => {
window.RCHistory.push({ window.RCHistory.goBack();
pathname: `/paper-manage-index?categoryId=${categoryId}`,
});
Bus.trigger('queryPaperPageList', categoryId, selectQuestionList.length); Bus.trigger('queryPaperPageList', categoryId, selectQuestionList.length);
Bus.trigger('queryCategoryTree', 'remain'); Bus.trigger('queryCategoryTree', 'remain');
}); });
...@@ -438,17 +429,13 @@ class OperatePaper extends Component { ...@@ -438,17 +429,13 @@ class OperatePaper extends Component {
}); });
} else { } else {
message.success('编辑成功'); message.success('编辑成功');
window.RCHistory.push({ window.RCHistory.goBack();
pathname: `/paper-manage-index?categoryId=${categoryId}`,
});
Bus.trigger('queryPaperPageList', categoryId, selectQuestionList.length); Bus.trigger('queryPaperPageList', categoryId, selectQuestionList.length);
} }
} }
}) })
.catch((e) => { .catch((e) => {
window.RCHistory.push({ window.RCHistory.goBack();
pathname: `/paper-manage-index?categoryId=${categoryId}`,
});
Bus.trigger('queryPaperPageList', categoryId, selectQuestionList.length); Bus.trigger('queryPaperPageList', categoryId, selectQuestionList.length);
}); });
} }
...@@ -482,9 +469,7 @@ class OperatePaper extends Component { ...@@ -482,9 +469,7 @@ class OperatePaper extends Component {
cancelText: '留在本页', cancelText: '留在本页',
icon: <span className='icon iconfont default-confirm-icon'>&#xe6f4;</span>, icon: <span className='icon iconfont default-confirm-icon'>&#xe6f4;</span>,
onOk: () => { onOk: () => {
window.RCHistory.push({ window.RCHistory.goBack()
pathname: `/paper-manage-index?categoryId=${getParameterByName('categoryId')}`,
});
Bus.trigger('queryCategoryTree', 'remain'); Bus.trigger('queryCategoryTree', 'remain');
Bus.trigger('queryPaperPageList', getParameterByName('categoryId'), 0); Bus.trigger('queryPaperPageList', getParameterByName('categoryId'), 0);
}, },
...@@ -822,8 +807,8 @@ class OperatePaper extends Component { ...@@ -822,8 +807,8 @@ class OperatePaper extends Component {
name='paperName' name='paperName'
label='试卷名称:' label='试卷名称:'
required required
validateStatus={this.validatePaperName(paperName) ? 'error' : ''} validateStatus={(check && (!paperName || paperName.length > 40 || this.checkExist(paperName))) ? 'error' : ''}
help={this.validatePaperName(paperName)}> help={check && (!paperName ? '请输入试卷名称' : (paperName.length > 40 ? '试卷名称最多40字' : (this.checkExist(paperName) && '该试卷名称已存在')))}>
<Input <Input
value={paperName} value={paperName}
autoComplete='off' autoComplete='off'
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: yuananting * @Author: yuananting
* @Date: 2021-02-25 11:23:47 * @Date: 2021-02-25 11:23:47
* @LastEditors: yuananting * @LastEditors: yuananting
* @LastEditTime: 2021-06-03 17:13:30 * @LastEditTime: 2021-07-13 15:16:52
* @Description: 助学工具-题库-试卷列表数据 * @Description: 助学工具-题库-试卷列表数据
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -362,9 +362,9 @@ class PaperList extends Component { ...@@ -362,9 +362,9 @@ class PaperList extends Component {
{isPermiss && ( {isPermiss && (
<div <div
className="record-operate__item" className="record-operate__item"
onClick={() => this.copyPaper(record)} onClick={() => this.organizeExam(record)}
> >
复制 组织考试
</div> </div>
)} )}
{isPermiss && ( {isPermiss && (
...@@ -391,7 +391,7 @@ class PaperList extends Component { ...@@ -391,7 +391,7 @@ class PaperList extends Component {
<span onClick={() => this.editPaper(item)}>编辑</span> <span onClick={() => this.editPaper(item)}>编辑</span>
</Menu.Item> </Menu.Item>
<Menu.Item key="organizeExam"> <Menu.Item key="organizeExam">
<span onClick={() => this.organizeExam(item)}>组织考试</span> <span onClick={() => this.copyPaper(item)}>复制</span>
</Menu.Item> </Menu.Item>
<Menu.Item key="del"> <Menu.Item key="del">
<span onClick={() => this.confirmDeletePaper(item)}>删除</span> <span onClick={() => this.confirmDeletePaper(item)}>删除</span>
......
/* /*
* @Author: yuananting * @Author: yuananting
* @Date: 2021-02-25 13:46:35 * @Date: 2021-02-25 13:46:35
* @LastEditors: wufan * @LastEditors: yuananting
* @LastEditTime: 2021-05-24 11:32:47 * @LastEditTime: 2021-07-13 11:51:56
* @Description: 助学工具-题库-新建/编辑题目 * @Description: 助学工具-题库-新建/编辑题目
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -161,9 +161,7 @@ class OperateQuestion extends Component { ...@@ -161,9 +161,7 @@ class OperateQuestion extends Component {
<span className="icon iconfont default-confirm-icon">&#xe6f4;</span> <span className="icon iconfont default-confirm-icon">&#xe6f4;</span>
), ),
onOk: () => { onOk: () => {
window.RCHistory.push({ window.RCHistory.goBack();
pathname: `/question-manage-index?categoryId=${getParameterByName("categoryId")}`,
});
Bus.trigger("queryCategoryTree", "remain"); Bus.trigger("queryCategoryTree", "remain");
Bus.trigger("queryQuestionPageList", getParameterByName("categoryId")); Bus.trigger("queryQuestionPageList", getParameterByName("categoryId"));
}, },
...@@ -248,9 +246,7 @@ class OperateQuestion extends Component { ...@@ -248,9 +246,7 @@ class OperateQuestion extends Component {
this.handleRest(type); this.handleRest(type);
} }
if (next === "close") { if (next === "close") {
window.RCHistory.push({ window.RCHistory.goBack();
pathname: `/question-manage-index?categoryId=${categoryId}`,
});
Bus.trigger("queryCategoryTree", "remain") Bus.trigger("queryCategoryTree", "remain")
Bus.trigger("queryQuestionPageList", categoryId) Bus.trigger("queryQuestionPageList", categoryId)
} }
...@@ -271,9 +267,7 @@ class OperateQuestion extends Component { ...@@ -271,9 +267,7 @@ class OperateQuestion extends Component {
this.handleRest(type); this.handleRest(type);
} }
if (next === "close") { if (next === "close") {
window.RCHistory.push({ window.RCHistory.goBack();
pathname: `/question-manage-index?categoryId=${categoryId}`,
});
Bus.trigger("queryCategoryTree", "remain") Bus.trigger("queryCategoryTree", "remain")
Bus.trigger("queryQuestionPageList", categoryId) Bus.trigger("queryQuestionPageList", categoryId)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment