master
zhengpengju 3 years ago
parent 577403e081
commit 39ca84e2f6

@ -177,7 +177,7 @@ const ExaminationRules: React.FC = () => {
valueType: 'text', valueType: 'text',
hideInSearch: true, hideInSearch: true,
hideInForm: false, hideInForm: false,
renderText: (val: string) => `${val}`, renderText: (val: string) => `${val || '-'}`,
}, },
{ {
title: '通过线', title: '通过线',
@ -186,7 +186,7 @@ const ExaminationRules: React.FC = () => {
valueType: 'text', valueType: 'text',
hideInSearch: true, hideInSearch: true,
hideInForm: false, hideInForm: false,
renderText: (val: string) => `${val}`, renderText: (val: string) => `${val || '-'}`,
}, },
{ {
title: '操作', title: '操作',

@ -8,7 +8,7 @@ import { Button, Checkbox, Col, Divider, Input, List, Menu, message, Radio, Row,
import { PageContainer } from '@ant-design/pro-layout'; import { PageContainer } from '@ant-design/pro-layout';
import ProDescriptions from '@ant-design/pro-descriptions'; import ProDescriptions from '@ant-design/pro-descriptions';
import styles from './index.less' import styles from './index.less'
import { saveRules, querySubjectList, queryRulesView, queryRulesList, queryRulesPaper, saveQuestionTypeScore, autoPaperOfficial, queryPaperQuestionList } from '../../service'; import { saveRules, querySubjectList, queryRulesView, queryRulesList, queryRulesPaper, saveQuestionTypeScore, autoPaperOfficial, queryPaperQuestionList, updateScore } from '../../service';
import { queryQuestionList, queryQuestionType } from '@/pages/questionbank/service'; import { queryQuestionList, queryQuestionType } from '@/pages/questionbank/service';
import ProTable, { ActionType, EditableProTable, ProColumns } from '@ant-design/pro-table'; import ProTable, { ActionType, EditableProTable, ProColumns } from '@ant-design/pro-table';
//import { TableListPagination } from '@/pages/ListTableList2/data'; //import { TableListPagination } from '@/pages/ListTableList2/data';
@ -120,7 +120,7 @@ export default () => {
valueType: 'text', valueType: 'text',
hideInSearch: true, hideInSearch: true,
hideInForm: false, hideInForm: false,
renderText: (val: string) => `${val || 0}`, renderText: (val: string) => `${val || '-'}`,
}, },
{ {
title: '通过线', title: '通过线',
@ -478,32 +478,31 @@ export default () => {
width="60%" width="60%"
visible={scoreModalVisible} visible={scoreModalVisible}
onVisibleChange={handleScoreModalVisible} onVisibleChange={handleScoreModalVisible}
footer={null}
onFinish={async () => { onFinish={async () => {
const values = setterRef.current?.getData() const values = setterRef.current?.getData() // 获取题型分值数据
const passSocre = setterRef.current?.getValue() // 获取通过分数线
console.log('批量设置分值v::::', values); console.log('批量设置分值v::::', values);
const {code, data: paper, msg} = await saveQuestionTypeScore({rules_id:Number(params?.id), type_score: JSON.stringify(values)}) const {code, data: paper, msg} = await saveQuestionTypeScore({rules_id:Number(params?.id), type_score: JSON.stringify(values)})
console.log('paper', paper) console.log('paper', paper)
// 总分及通过分 // 总分及通过分
let _sumScore = 0; let _sumScore = 0;
values?.forEach((item)=>{ values?.forEach((item: { score: number; })=>{
console.log('item--',item) console.log('item--',item)
_sumScore += item?.score _sumScore += item?.score
}) })
console.log('_sumScore', _sumScore) console.log('_sumScore', _sumScore)
/*
// 需要处理 // 需要处理
console.log('passSocre',passSocre) console.log('passSocre',passSocre)
console.log('sumScore',sumScore) //console.log('sumScore',sumScore)
const {success} = await updateScore({rules_id:Number(params?.id), pass_socre: passSocre, sum_score: _sumScore})*/ const {success} = await updateScore({rules_id:Number(params?.id), pass_socre: passSocre, sum_score: _sumScore})
setSumScore(_sumScore) //setSumScore(_sumScore)
// setUuidPaper(paper?.paper_uuid) // setUuidPaper(paper?.paper_uuid)
// message.success('提交成功'); // message.success('提交成功');
handleScoreModalVisible(false) handleScoreModalVisible(false)
return true; return true;
}} }}
> >
<ScoreSetter ref={setterRef} questionTypeValues={questionTypeValues} /> <ScoreSetter ref={setterRef} questionTypeValues={questionTypeValues || false} />
</ModalForm> </ModalForm>
<ModalForm <ModalForm
title={`试卷详情`} title={`试卷详情`}

@ -163,7 +163,7 @@ const QuestionPaper = (props: any, ref: any) => {
parsingMap.clear(); parsingMap.clear();
} }
}, [data]); }, [data]);
//saveQuestion //saveQuestion
return ( return (
<PageContainer content={false} extraContent={false} className={styles.questionbank}> <PageContainer content={false} extraContent={false} className={styles.questionbank}>
@ -315,7 +315,7 @@ const QuestionPaper = (props: any, ref: any) => {
console.log('item', item); console.log('item', item);
return ( return (
<List.Item> <List.Item>
<Typography.Text mark={false}>{`${(record?.question_type === 2) ? ['T','F'][key] : labels[key]}. ${item?.answer}`}</Typography.Text> <Typography.Text mark={false}>{`${(record?.question_type === 2) ? ['A','B'][key] : labels[key]}. ${item?.answer}`}</Typography.Text>
</List.Item>) </List.Item>)
}} }}
/> />
@ -335,7 +335,7 @@ const QuestionPaper = (props: any, ref: any) => {
answer = labels?.filter((x, idx, self)=>answertrue[idx] === `${idx}`).toString() answer = labels?.filter((x, idx, self)=>answertrue[idx] === `${idx}`).toString()
break; break;
case 2: // 判断 case 2: // 判断
answer = ['T', 'F']?.filter((x, idx, self)=>answertrue[idx] === `${idx}`).toString() answer = ['A', 'B']?.filter((x, idx, self)=>answertrue[idx] === `${idx}`).toString()
break; break;
} }
console.log('expandedDescRowKeys', expandedDescRowKeys) console.log('expandedDescRowKeys', expandedDescRowKeys)

@ -35,8 +35,11 @@ export type TableListItem = {
// React.forwardRef 接受渲染函数作为参数。React 将使用 props 和 ref 作为参数来调用此函数。此函数应返回 React 节点。 // React.forwardRef 接受渲染函数作为参数。React 将使用 props 和 ref 作为参数来调用此函数。此函数应返回 React 节点。
const ScoreSetter = (props: any, ref: any) => { const ScoreSetter = (props: any, ref: any) => {
const {questionTypeValues} = props const {questionTypeValues } = props
console.log('questionTypeValues:::', questionTypeValues) console.log('questionTypeValues:::', questionTypeValues)
//console.log('passScoreValue:::', passScoreValue)
const match = useRouteMatch(); const match = useRouteMatch();
console.log('match', match); console.log('match', match);
@ -48,6 +51,7 @@ const ScoreSetter = (props: any, ref: any) => {
//const [selectedRowsState, setSelectedRows] = useState<API.RuleListItem[]>([]); //const [selectedRowsState, setSelectedRows] = useState<API.RuleListItem[]>([]);
//const [addType, setAddType] = useState({name: '', value: 0}); //const [addType, setAddType] = useState({name: '', value: 0});
const [sumScore, setSumScore] = useState(0); const [sumScore, setSumScore] = useState(0);
const [passScore, setPassScore] = useState(0); // 设置通过分数线
//let sumScore = 0 // 总分 //let sumScore = 0 // 总分
@ -187,6 +191,9 @@ const ScoreSetter = (props: any, ref: any) => {
getData: () => { getData: () => {
return typeScore; return typeScore;
}, },
getValue: () => {
return passScore;
},
})); }));
return ( return (
@ -196,7 +203,9 @@ const ScoreSetter = (props: any, ref: any) => {
<EditableProTable <EditableProTable
title={()=>{ title={()=>{
return <Space> {sumQuestion} , {sumScore} 线 return <Space> {sumQuestion} , {sumScore} 线
<Form.Item style={{margin:0}} name='win' initialValue={0}><InputNumber min={0} /></Form.Item> <Form.Item style={{margin:0}} name='pass_socre' initialValue={0}><InputNumber min={0} onChange={(value)=>{
setPassScore(value)
}} /></Form.Item>
</Space>}} </Space>}}
//formMapRef={formMapRef} //formMapRef={formMapRef}
//rowKey={'code'} //rowKey={'code'}

@ -47,15 +47,7 @@ type DataSourceType = {
children?: DataSourceType[]; children?: DataSourceType[];
}; };
const defaultData: DataSourceType[] = new Array(10).fill(1).map((_, index) => { // 需要处理
return {
id: (Date.now() + index).toString(),
title: `章节${index}`,
decs: '这个活动真好玩',
state: 'open',
created_at: '2020-05-26T09:42:56Z',
};
});
// React.forwardRef 接受渲染函数作为参数。React 将使用 props 和 ref 作为参数来调用此函数。此函数应返回 React 节点。 // React.forwardRef 接受渲染函数作为参数。React 将使用 props 和 ref 作为参数来调用此函数。此函数应返回 React 节点。
const AutoSelector = (props: any, ref: any) => { const AutoSelector = (props: any, ref: any) => {
/** 获取章节数据 */ /** 获取章节数据 */
@ -86,7 +78,7 @@ const AutoSelector = (props: any, ref: any) => {
//key: 'code', //key: 'code',
dataIndex: `type${item?.code}`, dataIndex: `type${item?.code}`,
render: ( item, { defaultRender, ...rest }, form) => { render: ( item, { defaultRender, ...rest }, form) => {
return <Form.Item style={{margin:0}} ><InputNumber defaultValue={1} return <Form.Item style={{margin:0}} ><InputNumber min={0} defaultValue={1}
onChange={(value)=>{ onChange={(value)=>{
// //
const _data = []; const _data = [];
@ -105,8 +97,8 @@ const AutoSelector = (props: any, ref: any) => {
// 暴露组件的方法 接受外部获取的ref // 暴露组件的方法 接受外部获取的ref
useImperativeHandle(ref, () => ({ useImperativeHandle(ref, () => ({
// 构造ref的获取数据方法 // 构造ref的获取数据方法
createPaper: () => { // 组卷 getData: () => { // 组卷数据
//return selectedRowsState; return [];
}, },
})); }));
@ -148,10 +140,10 @@ const AutoSelector = (props: any, ref: any) => {
// setDataSource // setDataSource
}} }}
toolBarRender={false} toolBarRender={false}
/* /*
editable={{ editable={{
type: 'multiple', type: 'multiple',
editableKeys, //editableKeys,
actionRender: (row, config, defaultDoms) => { actionRender: (row, config, defaultDoms) => {
return [defaultDoms.delete]; return [defaultDoms.delete];
}, },
@ -159,9 +151,9 @@ const AutoSelector = (props: any, ref: any) => {
console.log('rrrr',record, recordList) console.log('rrrr',record, recordList)
// setDataSource(recordList); // setDataSource(recordList);
}, },
onChange: setEditableRowKeys, //onChange: setEditableRowKeys,
}} }}
*/ */
/> />
</> </>
); );

@ -315,7 +315,7 @@ const QuestionPaper = (props: any, ref: any) => {
console.log('item', item); console.log('item', item);
return ( return (
<List.Item> <List.Item>
<Typography.Text mark={false}>{`${(record?.question_type === 2) ? ['T','F'][key] : labels[key]}. ${item?.answer}`}</Typography.Text> <Typography.Text mark={false}>{`${(record?.question_type === 2) ? ['A','B'][key] : labels[key]}. ${item?.answer}`}</Typography.Text>
</List.Item>) </List.Item>)
}} }}
/> />
@ -335,7 +335,7 @@ const QuestionPaper = (props: any, ref: any) => {
answer = labels?.filter((x, idx, self)=>answertrue[idx] === `${idx}`).toString() answer = labels?.filter((x, idx, self)=>answertrue[idx] === `${idx}`).toString()
break; break;
case 2: // 判断 case 2: // 判断
answer = ['T', 'F']?.filter((x, idx, self)=>answertrue[idx] === `${idx}`).toString() answer = ['A', 'B']?.filter((x, idx, self)=>answertrue[idx] === `${idx}`).toString()
break; break;
} }
console.log('expandedDescRowKeys', expandedDescRowKeys) console.log('expandedDescRowKeys', expandedDescRowKeys)

@ -152,7 +152,7 @@ const ExaminationRules: React.FC = () => {
valueType: 'text', valueType: 'text',
hideInForm: false, hideInForm: false,
hideInSearch: true, hideInSearch: true,
renderText: (val: string) => `${val}`, renderText: (val: string) => `${val || '-'}`,
}, },
{ {
title: '通过线', title: '通过线',
@ -161,7 +161,7 @@ const ExaminationRules: React.FC = () => {
valueType: 'text', valueType: 'text',
hideInForm: false, hideInForm: false,
hideInSearch: true, hideInSearch: true,
renderText: (val: string) => `${val}`, renderText: (val: string) => `${val || '-'}`,
}, },
{ {
title: '操作', title: '操作',

@ -30,6 +30,7 @@ import ScoreSetter from '../../components/ScoreSetter';
import AutoSelector from '../components/AutoSelector'; import AutoSelector from '../components/AutoSelector';
import { ConsoleMessage } from 'puppeteer-core'; import { ConsoleMessage } from 'puppeteer-core';
import { getSubjectInfo } from '@/pages/course/subject/service'; import { getSubjectInfo } from '@/pages/course/subject/service';
import { forEach } from 'lodash';
/** /**
* *
@ -102,7 +103,7 @@ export default () => {
const [createType, setCreateType] = useState<number>(1); // 组卷类型 const [createType, setCreateType] = useState<number>(1); // 组卷类型
const [rulesName, setRulesName] = useState<string>(''); // 组卷类型 const [rulesName, setRulesName] = useState<string>(''); // 组卷类型
const [sumScore, setSumScore] = useState<number>(0); // 总分 const [sumScore, setSumScore] = useState<number>(0); // 总分
const [passSocre, setPassSocre] = useState<number>(0); // 通过分数线 const [passScore, setPassScore] = useState<number>(0); // 通过分数线
const [typeQuestionCount, setTypeQuestionCount] = useState([0, 0, 0]); // 临时卷 各题型数量 const [typeQuestionCount, setTypeQuestionCount] = useState([0, 0, 0]); // 临时卷 各题型数量
@ -118,6 +119,7 @@ export default () => {
const [questionType, setQuestionType] = useState([]); // 题型 const [questionType, setQuestionType] = useState([]); // 题型
const [scoreValues, SetscoreValues] = useState([]); // 分值 [{"question_type": "0","score": "3","score_harf": "0"},] const [scoreValues, SetscoreValues] = useState([]); // 分值 [{"question_type": "0","score": "3","score_harf": "0"},]
const [paperInfo, setPaperInfo] = useState({})
/** 获取题型 */ /** 获取题型 */
const { data: questionTypeData } = useRequest(() => { const { data: questionTypeData } = useRequest(() => {
@ -169,14 +171,22 @@ export default () => {
page_number: value.current, page_number: value.current,
page_size: value.pageSize page_size: value.pageSize
*/ */
return queryRulesPaper(params); return queryRulesPaper(params);
},{ },{
manual: true, manual: true,
formatResult: (result) => { formatResult: (result) => {
return result?.table_List; return result?.question_list;
}}); }});
useEffect(() => {
console.log('paperData2', paperData)
if(paperData?.length > 0){
console.log('paperData[0]', paperData[0])
setPaperInfo(paperData[0])
}
console.log('PaperInfo', paperInfo)
}, [paperData]);
console.log(params, 'params'); console.log(params, 'params');
let ruleData = {} let ruleData = {}
@ -285,7 +295,7 @@ export default () => {
width="md" width="md"
initialValue={ruleData?.examination_time} initialValue={ruleData?.examination_time}
rules={[{ required: true, message: '请输入考试时长' }]} rules={[{ required: true, message: '请输入考试时长' }]}
tooltip="限制考试时长的情况下,用户考试中离开,倒计时不会停止。" /> tooltip="单位(分钟)" />
</> </>
)} )}
</Col> </Col>
@ -412,9 +422,12 @@ export default () => {
* *
* [{count: 0, score: 0, score_harf: 0},{count: 0, score: 0, score_harf: 0},{count: 0, score: 0, score_harf: 0}] * [{count: 0, score: 0, score_harf: 0},{count: 0, score: 0, score_harf: 0},{count: 0, score: 0, score_harf: 0}]
*/ */
//setQuestionTypeValues() //
const _data = []
typeQuestionCount?.forEach((item)=>{
_data.push({count: item, score: 0, score_harf: 0})
})
setQuestionTypeValues(_data)
console.log('typeQuestionCount', typeQuestionCount); console.log('typeQuestionCount', typeQuestionCount);
handleScoreModalVisible(true) handleScoreModalVisible(true)
}}></Button> }}></Button>
@ -468,14 +481,11 @@ export default () => {
<ProDescriptions.Item dataIndex="grade" label="试卷信息" valueType="text" render={()=>{ <ProDescriptions.Item dataIndex="grade" label="试卷信息" valueType="text" render={()=>{
{/** 需要从试卷 或 临时试卷 中读取 */} {/** 需要从试卷 或 临时试卷 中读取 */}
return <Space direction="vertical"> return <Space direction="vertical">
<span> 0 , 100 </span> <span> 0 , {paperInfo?.sum_score} </span>
<span>: 0 : 0 : 0 </span> <span>: 0 : 0 : 0 </span>
<span>线 {0} </span> <span>线 {paperInfo?.pass_score} </span>
</Space> </Space>
}} /> }} />
</ProDescriptions> </ProDescriptions>
} }
</Col> </Col>
@ -515,11 +525,13 @@ export default () => {
width="60%" width="60%"
visible={autoModalVisible} visible={autoModalVisible}
onVisibleChange={ handleAutoModalVisible } onVisibleChange={ handleAutoModalVisible }
footer={null} onFinish={async () => {
onFinish={async () => { // 需要处理
const values = autoRef?.current?.getData() //console.log('111')
const {code, data: paper, msg} = await autoPaper({rules_id: Number(params?.id), auto_param: JSON.stringify(values)}) //const values = autoRef?.current?.getData()
console.log('paper', paper) //console.log('2222')
//const {code, data: paper, msg} = await autoPaper({rules_id: Number(params?.id), auto_param: JSON.stringify(values)})
//console.log('paper', paper)
//setUuidPaper(paper?.paper_uuid) //setUuidPaper(paper?.paper_uuid)
// message.success('提交成功'); // message.success('提交成功');
handleAutoModalVisible(false) handleAutoModalVisible(false)
@ -534,10 +546,11 @@ export default () => {
width="60%" width="60%"
visible={scoreModalVisible} visible={scoreModalVisible}
onVisibleChange={handleScoreModalVisible} onVisibleChange={handleScoreModalVisible}
footer={null}
onFinish={async () => { onFinish={async () => {
console.log('typeQuestionCount', typeQuestionCount) console.log('typeQuestionCount', typeQuestionCount)
const values = setterRef.current?.getData() const values = setterRef.current?.getData() // 获取题型分值数据
const passSocre = setterRef.current?.getValue() // 获取通过分数线
console.log('批量设置分值v::::2', values); console.log('批量设置分值v::::2', values);
// 题型分数 // 题型分数
const {code, data: paper, msg} = await saveQuestionTypeScore({rules_id:Number(params?.id), type_score: JSON.stringify(values)}) const {code, data: paper, msg} = await saveQuestionTypeScore({rules_id:Number(params?.id), type_score: JSON.stringify(values)})
@ -547,10 +560,10 @@ export default () => {
console.log('item--',item) console.log('item--',item)
_sumScore += item?.score _sumScore += item?.score
}) })
console.log('_sumScore', _sumScore) //console.log('_sumScore', _sumScore)
console.log('passSocre',passSocre) //console.log('passScore',passScore)
console.log('sumScore',sumScore) console.log('sumScore',sumScore)
const {success} = await updateScore({rules_id:Number(params?.id), pass_socre: passSocre, sum_score: _sumScore}) const {success} = await updateScore({rules_id:Number(params?.id), pass_socre: passSocre, sum_score: _sumScore})
setSumScore(_sumScore) setSumScore(_sumScore)
console.log('paper', paper) console.log('paper', paper)

@ -430,7 +430,7 @@ const QuestionBank = () => {
console.log('item', item); console.log('item', item);
return ( return (
<List.Item> <List.Item>
<Typography.Text mark={false}>{`${(record?.question_type === 2) ? ['T','F'][key] : labels[key]}. ${item?.answer}`}</Typography.Text> <Typography.Text mark={false}>{`${(record?.question_type === 2) ? ['A','B'][key] : labels[key]}. ${item?.answer}`}</Typography.Text>
</List.Item>) </List.Item>)
}} }}
/> />
@ -450,7 +450,7 @@ const QuestionBank = () => {
answer = labels?.filter((x, idx, self)=>`${answertrue[idx]}` === `1`).toString() answer = labels?.filter((x, idx, self)=>`${answertrue[idx]}` === `1`).toString()
break; break;
case 2: // 判断 case 2: // 判断
answer = ['T', 'F']?.filter((x, idx, self)=>`${answertrue[idx]}` === `1`).toString() answer = ['A', 'B']?.filter((x, idx, self)=>`${answertrue[idx]}` === `1`).toString()
break; break;
} }
console.log('expandedDescRowKeys', expandedDescRowKeys) console.log('expandedDescRowKeys', expandedDescRowKeys)

Loading…
Cancel
Save