|
|
|
@ -16,7 +16,7 @@ import { Button, Checkbox, Col, Divider, Dropdown, Form, Input, List, Menu, mess
|
|
|
|
|
import { PageContainer } from '@ant-design/pro-layout';
|
|
|
|
|
import ProDescriptions from '@ant-design/pro-descriptions';
|
|
|
|
|
import styles from './index.less'
|
|
|
|
|
import { saveRules, querySubjectList, queryRulesView, queryTempQuestionList, saveQuestionTypeScore } from '../../service';
|
|
|
|
|
import { saveRules, querySubjectList, queryRulesView, queryTempQuestionList, saveQuestionTypeScore, queryRulesPaper, updateScore } from '../../service';
|
|
|
|
|
import { queryCourseView } from '@/pages/course/option/service';
|
|
|
|
|
import { queryQuestionList, queryQuestionById, queryQuestionType } from '@/pages/questionbank/service';
|
|
|
|
|
import { PlusOutlined, DownOutlined, DeleteOutlined, DownloadOutlined, UploadOutlined, EyeInvisibleOutlined, EyeOutlined, EditOutlined, ArrowDownOutlined, ArrowUpOutlined } from '@ant-design/icons';
|
|
|
|
@ -85,13 +85,6 @@ const handleAppend = async (rules_id: number, rows: any[]) => {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const waitTime = (time: number = 100) => {
|
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
resolve(true);
|
|
|
|
|
}, time);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
const labels = ['A','B','C','D','E','F','G','H','I','J','K']
|
|
|
|
|
// 模拟考试规则维护
|
|
|
|
|
export default () => {
|
|
|
|
@ -103,10 +96,15 @@ export default () => {
|
|
|
|
|
const [subjectId, setSubjectId] = useState<number>(0); // 关联主题id
|
|
|
|
|
const [subjectName, setSubjectName] = useState(''); // 关联主题name
|
|
|
|
|
|
|
|
|
|
const [questionTypeValues, setQuestionTypeValues] = useState([]); // 题型数据[{count:0, score:0, score_harf:0}]
|
|
|
|
|
|
|
|
|
|
const [uuidPaper, setUuidPaper] = useState<number>(0);
|
|
|
|
|
const [createType, setCreateType] = useState<number>(1); // 组卷类型
|
|
|
|
|
const [rulesName, setRulesName] = useState<string>(''); // 组卷类型
|
|
|
|
|
const [sumScore, setSumScore] = useState<number>(0); // 总分
|
|
|
|
|
const [passSocre, setPassSocre] = useState<number>(0); // 通过分数线
|
|
|
|
|
|
|
|
|
|
const [typeQuestionCount, setTypeQuestionCount] = useState([0, 0, 0]); // 临时卷 各题型数量
|
|
|
|
|
|
|
|
|
|
const formRef = useRef<ProFormInstance>();
|
|
|
|
|
|
|
|
|
@ -141,7 +139,38 @@ export default () => {
|
|
|
|
|
/** 组卷,查询试题临时表(当前选题列表) */
|
|
|
|
|
const { data: questions, run } = useRequest(async (params) => {
|
|
|
|
|
console.log('questions', questions)
|
|
|
|
|
return queryTempQuestionList(params);
|
|
|
|
|
const _data = await queryTempQuestionList(params);
|
|
|
|
|
return _data;
|
|
|
|
|
},{
|
|
|
|
|
manual: true,
|
|
|
|
|
formatResult: (result) => {
|
|
|
|
|
return result?.table_List;
|
|
|
|
|
}});
|
|
|
|
|
|
|
|
|
|
/** 从临时表中计算各题型数量 */
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
let _data = [0, 0, 0]; // 当前仅支持 单选 / 多选 / 判断 的顺序
|
|
|
|
|
console.log('questions-info', questions)
|
|
|
|
|
questions?.forEach((item)=>{
|
|
|
|
|
_data[Number(item?.question_type)] += 1
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
setTypeQuestionCount(_data);
|
|
|
|
|
return ()=>{
|
|
|
|
|
/** 退出当前页面清空Map */
|
|
|
|
|
//parsingMap.clear();
|
|
|
|
|
}
|
|
|
|
|
}, [questions]);
|
|
|
|
|
//
|
|
|
|
|
const { data: paperData, run: runPaper } = useRequest(async (params) => {
|
|
|
|
|
console.log('paperData', paperData)
|
|
|
|
|
/**
|
|
|
|
|
* rules_id: params?.id,
|
|
|
|
|
page_number: value.current,
|
|
|
|
|
page_size: value.pageSize
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
return queryRulesPaper(params);
|
|
|
|
|
},{
|
|
|
|
|
manual: true,
|
|
|
|
|
formatResult: (result) => {
|
|
|
|
@ -275,6 +304,7 @@ export default () => {
|
|
|
|
|
onFinish={async () => {
|
|
|
|
|
console.log(formRef.current?.getFieldsValue());
|
|
|
|
|
setCurrentStep(2) // 设置步骤号
|
|
|
|
|
runPaper({rules_id: params?.id })
|
|
|
|
|
return true;
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
@ -359,7 +389,7 @@ export default () => {
|
|
|
|
|
<Divider style={{ margin: '6px 0', opacity: 0.5 }} />
|
|
|
|
|
<Space direction="vertical">
|
|
|
|
|
{ questionType.map((item)=>{
|
|
|
|
|
return <Typography>{item?.name} 共 { '-' } 题 { '-' } 分</Typography>
|
|
|
|
|
return <Typography>{item?.name} 共 { typeQuestionCount[Number(item.code)] } 题 { '-' } 分</Typography>
|
|
|
|
|
}
|
|
|
|
|
)}
|
|
|
|
|
</Space>
|
|
|
|
@ -378,6 +408,14 @@ export default () => {
|
|
|
|
|
}}>选择试题</Button>
|
|
|
|
|
|
|
|
|
|
<Button size="large" block onClick={()=>{
|
|
|
|
|
/**
|
|
|
|
|
* 设置分值前需要题型数据
|
|
|
|
|
* [{count: 0, score: 0, score_harf: 0},{count: 0, score: 0, score_harf: 0},{count: 0, score: 0, score_harf: 0}]
|
|
|
|
|
*/
|
|
|
|
|
//setQuestionTypeValues()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
console.log('typeQuestionCount', typeQuestionCount);
|
|
|
|
|
handleScoreModalVisible(true)
|
|
|
|
|
}}>批量设置分值</Button>
|
|
|
|
|
<Button size="large" type="primary" block onClick={async ()=>{
|
|
|
|
@ -428,10 +466,11 @@ export default () => {
|
|
|
|
|
<ProDescriptions.Item dataIndex="examination_time" label="考试时长" valueType="text" renderText={(text)=>(`${text} 分钟`)} />
|
|
|
|
|
|
|
|
|
|
<ProDescriptions.Item dataIndex="grade" label="试卷信息" valueType="text" render={()=>{
|
|
|
|
|
{/** 需要从试卷 或 临时试卷 中读取 */}
|
|
|
|
|
return <Space direction="vertical">
|
|
|
|
|
<span>共 0 道题, 100 分</span>
|
|
|
|
|
<span>单选: 0 道题 单选: 0 道题 单选: 0 道题</span>
|
|
|
|
|
<span>通过线 60 分</span>
|
|
|
|
|
<span>通过线 {0} 分</span>
|
|
|
|
|
</Space>
|
|
|
|
|
|
|
|
|
|
}} />
|
|
|
|
@ -447,11 +486,9 @@ export default () => {
|
|
|
|
|
|
|
|
|
|
<ModalForm
|
|
|
|
|
title={`手动组卷`}
|
|
|
|
|
//
|
|
|
|
|
width="60%"
|
|
|
|
|
visible={selectorModalVisible}
|
|
|
|
|
onVisibleChange={handleSelectorModalVisible}
|
|
|
|
|
footer={null}
|
|
|
|
|
onFinish={async (values) => {
|
|
|
|
|
console.log('v::::', values.name);
|
|
|
|
|
const rows = selectorRef?.current?.getSelectedRows()
|
|
|
|
@ -466,8 +503,7 @@ export default () => {
|
|
|
|
|
page_number: 1
|
|
|
|
|
}); // 获取当前选题列表
|
|
|
|
|
// message.success('提交成功');
|
|
|
|
|
handleSelectorModalVisible(false)
|
|
|
|
|
|
|
|
|
|
handleSelectorModalVisible(false)
|
|
|
|
|
return true;
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
@ -499,11 +535,24 @@ export default () => {
|
|
|
|
|
visible={scoreModalVisible}
|
|
|
|
|
onVisibleChange={handleScoreModalVisible}
|
|
|
|
|
footer={null}
|
|
|
|
|
onFinish={async () => {
|
|
|
|
|
onFinish={async () => {
|
|
|
|
|
console.log('typeQuestionCount', typeQuestionCount)
|
|
|
|
|
const values = setterRef.current?.getData()
|
|
|
|
|
console.log('批量设置分值v::::', values);
|
|
|
|
|
|
|
|
|
|
console.log('批量设置分值v::::2', values);
|
|
|
|
|
// 题型分数
|
|
|
|
|
const {code, data: paper, msg} = await saveQuestionTypeScore({rules_id:Number(params?.id), type_score: JSON.stringify(values)})
|
|
|
|
|
// 总分及通过分
|
|
|
|
|
let _sumScore = 0;
|
|
|
|
|
values?.forEach((item)=>{
|
|
|
|
|
console.log('item--',item)
|
|
|
|
|
_sumScore += item?.score
|
|
|
|
|
})
|
|
|
|
|
console.log('_sumScore', _sumScore)
|
|
|
|
|
|
|
|
|
|
console.log('passSocre',passSocre)
|
|
|
|
|
console.log('sumScore',sumScore)
|
|
|
|
|
const {success} = await updateScore({rules_id:Number(params?.id), pass_socre: passSocre, sum_score: _sumScore})
|
|
|
|
|
setSumScore(_sumScore)
|
|
|
|
|
console.log('paper', paper)
|
|
|
|
|
// setUuidPaper(paper?.paper_uuid)
|
|
|
|
|
// message.success('提交成功');
|
|
|
|
@ -511,7 +560,7 @@ export default () => {
|
|
|
|
|
return true;
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<ScoreSetter ref={setterRef} />
|
|
|
|
|
<ScoreSetter ref={setterRef} questionTypeValues={questionTypeValues || false} />
|
|
|
|
|
</ModalForm>
|
|
|
|
|
</PageContainer>
|
|
|
|
|
|
|
|
|
|