zhengpengju 3 years ago
commit aebc3b7e2e

@ -3,14 +3,15 @@ import { AlignLeftOutlined, PlusOutlined } from '@ant-design/icons';
import { Switch, Button, Card, Col, List, Menu, Progress, Row, Typography, Space, Divider, Radio, Checkbox, Form } from 'antd'; import { Switch, Button, Card, Col, List, Menu, Progress, Row, Typography, Space, Divider, Radio, Checkbox, Form } from 'antd';
import { PageContainer } from '@ant-design/pro-layout'; import { PageContainer } from '@ant-design/pro-layout';
import { useParams, useRequest } from 'umi'; import { useParams, useRequest } from 'umi';
import { useRef, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
const { Text, Link } = Typography; const { Text, Link } = Typography;
import { getRulesPaper, getPaperQuestionList } from '../service'; import { getRulesPaper, getPaperQuestionList, finishExamination } from '../service';
import type { CardListItemDataType } from '../data'; import type { CardListItemDataType } from '../data';
import styles from './style.less'; import styles from './style.less';
import SubMenu from 'antd/lib/menu/SubMenu'; import cookie from 'react-cookies';
import ProCard from '@ant-design/pro-card'; import ProCard from '@ant-design/pro-card';
import { getDirection } from '../../../.umi/plugin-locale/localeExports'; const CheckboxGroup = Checkbox.Group;
const { Paragraph } = Typography; const { Paragraph } = Typography;
@ -24,12 +25,17 @@ const CardList = () => {
//答题卡列表 //答题卡列表
const [questionTypeList, setQuestionTypeList] = useState([]) const [questionTypeList, setQuestionTypeList] = useState([])
// 当前答题id // 当前答题id
const [questionNow, setQuestionNow] = useState([]) const [questionNow, setQuestionNow] = useState({})
// 解析可见
const [parsingShow, setParsingShow] = useState(false)
const [lastBtnShow, setLastBtnShow] = useState(true)
const [nextBtnShow, setNextBtnShow] = useState(false)
const [parsingShow, setParsingShow] = useState(false) // 当前题号
const [questionNowNum, setQuestionNowNum] = useState(0)
const [questionNum, setQuestioNum] = useState(0)
@ -47,8 +53,7 @@ const CardList = () => {
}, },
onSuccess: (result) => { onSuccess: (result) => {
if (result.success) { if (result.success) {
setRulesPaperInfo(result.question_list || []) setRulesPaperInfo(result.question_list[0] || [])
console.log(result, 'result1')
run({ paper_id: result.question_list[0].paper_id, question_type_count: result.question_list[0].question_type_count }) run({ paper_id: result.question_list[0].paper_id, question_type_count: result.question_list[0].question_type_count })
// setQuestionTypeList(result.question_list[0].question_type_count) // setQuestionTypeList(result.question_list[0].question_type_count)
} }
@ -78,6 +83,8 @@ const CardList = () => {
}) })
} }
}) })
// 根据分类拆分试题 左侧答题卡 state:0 未答题 1 已答题 // 根据分类拆分试题 左侧答题卡 state:0 未答题 1 已答题
paperList.map((e) => { paperList.map((e) => {
questionList.map((item, index) => { questionList.map((item, index) => {
@ -94,32 +101,56 @@ const CardList = () => {
questionInfo.push({ ...e, index: index }) questionInfo.push({ ...e, index: index })
}) })
} }
const nowQ = setLabVal(questionInfo[0])
setPaperInfo(questionInfo || []) setPaperInfo(questionInfo || [])
setQuestionNow(nowQ || []) setQuestionNow(questionInfo[0] || [])
setQuestionTypeList(questionList || []) setQuestionTypeList(questionList || [])
setQuestioNum(questionInfo.length)
} }
} }
}); });
const setLabVal = (value: []) => {
const nowQ = value
console.log(nowQ, "888888");
nowQ.answers.map((e, i) => {
console.log(e, 'eeeeee'); const { run: runFinishExamination } = useRequest(finishExamination,
nowQ.answers[i].label = e.answer {
nowQ.answers[i].value = e.id refreshDeps: [rulesPaperInfo],
}) manual: true,
return nowQ formatResult: (result) => {
return result;
},
onSuccess: (result, params) => {
console.log(result, 'questionFinish server', params)
} }
});
useEffect(() => {
// 已选择题目回显
formRef?.current?.setFieldsValue({ note: questionNow.answerId });
paperInfo.map((item, index) => {
if (item.id === questionNow.id) {
setQuestionNowNum(index + 1)
}
})
}, [questionNow]);
useEffect(() => {
console.log(questionNowNum, questionNum);
setLastBtnShow(questionNowNum == 1 ? true : false)
setNextBtnShow(questionNowNum == questionNum ? true : false)
}, [questionNowNum])
const content = ( const content = (
<div className={styles.pageHeaderContent}> <div className={styles.pageHeaderContent}>
<p> <p>
{rulesPaperInfo[0]?.rules_name} {/* 试卷信息:{rulesPaperInfo?.question_list[0].rules_name} */}
</p> </p>
</div> </div>
); );
@ -173,16 +204,12 @@ const CardList = () => {
<PageContainer content={content} extraContent={false}> <PageContainer content={content} extraContent={false}>
<Row> <Row>
<Col span={6} style={{ paddingRight: 24 }}> <Col span={6} style={{ paddingRight: 24 }}>
<Button onClick={() => {
formRef?.current.setFieldsValue({ note: '11' });
}}>111111</Button>
<ProCard <ProCard
title="题号列表" title="题号列表"
bordered bordered
className='answerSheet' className='answerSheet'
headStyle={{ padding: 24, border: '#d9d9d9 solid 1px' }} headStyle={{ padding: 24, border: '#d9d9d9 solid 1px' }}
> >
{console.log("当前题号:", questionNow, "试题顺序:", paperInfo, "二维数组:", questionTypeList)}
{ {
questionTypeList && ( questionTypeList && (
@ -208,22 +235,15 @@ const CardList = () => {
// 查看解析关闭 // 查看解析关闭
setParsingShow(false) setParsingShow(false)
paperInfo.map((e) => { paperInfo.map((e) => {
if (e.id === item.id) { if (e.id === item.id) {
console.log(e.id, e.index, item) // 重写单选的label、valueindex保存当前试题的index。
setQuestionNow({ ...item, index: e.index })
const dQ = setLabVal(item)
setQuestionNow({ ...dQ, index: e.index })
} }
}) })
console.log(questionTypeList);
formRef?.current.setFieldsValue({ note: e.answerId });
}} }}
>{index}</Button> </List.Item> >{index + 1}</Button> </List.Item>
}} }}
style={{ background: '#ffffff', margin: '-25px -24px 24px -24px' }} style={{ background: '#ffffff', margin: '-25px -24px 24px -24px' }}
/> />
@ -232,19 +252,6 @@ const CardList = () => {
)} )}
<List
header={<div>. </div>}
footer={false}
bordered
dataSource={numbers}
renderItem={item => (
<List.Item>
<Typography.Text mark={item.id === '3' ? false : true}><span className="number">{item.id}</span></Typography.Text>
</List.Item>
)}
style={{ background: '#ffffff', margin: '-1px -24px' }}
/>
</ProCard> </ProCard>
</Col> </Col>
<Col span={13} style={{ background: '#ffffff', padding: 0 }}> <Col span={13} style={{ background: '#ffffff', padding: 0 }}>
@ -258,62 +265,91 @@ const CardList = () => {
headerBordered headerBordered
> >
<Space direction="vertical" style={{ width: '100%', padding: '24px 48px' }}> <Space direction="vertical" style={{ width: '100%', padding: '24px 48px' }}>
{/* <Typography style={{ marginBottom: 16, fontSize: 18 }}>
{questionNow?.question_stem}
{/* {console.log(questionNow.answerId, 'answerId', questionNow.answerId)} */}
</Typography>
<Space direction="vertical" style={{ fontSize: 16 }}>
<Form
ref={formRef} name="control-ref"
>
<Form.Item name="note" label="Note" rules={[{ required: true }]}>
{questionNow.question_type === 0 ?
(
<Space direction="vertical"> <Radio.Group>
<Radio.Group <Space direction="vertical">{questionNow?.answers?.map((item, index) => {
options={questionNow.answers}
onChange={(item) => {
return <Radio key={item.id}
onChange={() => {
const qArr = [] const qArr = []
// 默认输出答案0000 // 默认输出答案0000
questionNow?.answers?.map((e, i) => { questionNow?.answers?.map(() => {
console.log(e, i, "ei"); qArr.push("0")
item.target.value === e.id ? qArr.push("1") : qArr.push("0")
}) })
console.log(qArr, 'Arr') // 修改用户答案
qArr[index] = item.is_true
const questionList = questionTypeList const questionList = questionTypeList
const questionAnswer = qArr.join(",") const questionAnswer = qArr.join(",")
// 修改答题卡状态 写入答案以及修改答题状态 // 修改答题卡状态 写入答案以及修改答题状态
const qX = questionNow?.question_type; const qX = questionNow?.question_type;
const qI = questionNow?.index; const qI = questionNow?.index;
questionList[qX].children[qI].answerSelect = questionAnswer; questionList[qX].children[qI].answerSelect = questionAnswer;
// 答题状态 // 答题状态
questionList[qX].children[qI].state = 1 questionList[qX].children[qI].state = 1
questionList[qX].children[qI].answerId = item.target.value questionList[qX].children[qI].answerId = item.id
console.log(questionList, 'questionList11', questionAnswer)
// 提交答题卡 // 提交答题卡
setQuestionTypeList(questionList) setQuestionTypeList(questionList)
// console.log('0', questionList, questionNow, item, qX, qI, questionList[qX].children[qI].answerSelect, questionAnswer) // console.log('0', questionList, questionNow, item, qX, qI)
}} defaultValue={questionNow.answerId} /> }}
</Space> value={item.id}
style={{ padding: 5, fontSize: 16 }}
>{tiNum(index)}{item.answer}</Radio>
})}</Space></Radio.Group>
) : questionNow.question_type === 1 ? <Checkbox.Group onChange={(e) => {
const qArr = []
// 默认输出答案0000
questionNow?.answers?.map((item) => {
if (e.indexOf(item.id) > -1) {
qArr.push("1")
} else {
qArr.push("0")
}
})
const questionList = questionTypeList
const questionAnswer = qArr.join(",")
// 修改答题卡状态 写入答案以及修改答题状态
const qX = questionNow?.question_type;
const qI = questionNow?.index;
questionList[qX].children[qI].answerSelect = questionAnswer;
// 答题状态
questionList[qX].children[qI].state = 1
questionList[qX].children[qI].answerId = e
// 提交答题卡
setQuestionTypeList(questionList)
// console.log('0', questionList, questionNow, item, qX, qI)
}}>
{questionNow?.answers?.map((item, index) => {
*/} return <Checkbox key={item.id}
<Typography style={{ marginBottom: 16, fontSize: 18 }}> value={item.id}
{questionNow?.question_stem} style={{ padding: 5, fontSize: 16 }}
{console.log(questionNow.answerId, 'answerId', questionNow.answerId)} >{tiNum(index)}{item.answer}</Checkbox>
</Typography>
<Space direction="vertical" style={{ fontSize: 16 }}>
{questionNow.question_type === 0 ?
( })}
<Form </Checkbox.Group> : questionNow.question_type === 2 ? (
ref={formRef} name="control-ref"
>
<Form.Item name="note" label="Note" rules={[{ required: true }]}>
<Radio.Group
defaultValue={questionNow.answerId}> <Radio.Group>
<Space direction="vertical">{questionNow?.answers?.map((item, index) => { <Space direction="vertical">{questionNow?.answers?.map((item, index) => {
console.log(item, 'item')
return <Radio key={item.id} return <Radio key={item.id}
onChange={() => { onChange={() => {
const qArr = [] const qArr = []
@ -336,20 +372,17 @@ const CardList = () => {
// 提交答题卡 // 提交答题卡
setQuestionTypeList(questionList) setQuestionTypeList(questionList)
// console.log('0', questionList, questionNow, item, qX, qI, questionList[qX].children[qI].answerSelect, questionAnswer) // console.log('0', questionList, questionNow, item, qX, qI)
}} }}
value={item.id} value={item.id}
style={{ padding: 5, fontSize: 16 }} style={{ padding: 5, fontSize: 16 }}
>{tiNum(index)}{item.answer}</Radio> >{tiNum(index)}{item.answer}</Radio>
})}</Space></Radio.Group> })}</Space></Radio.Group>
) : ""
}
</Form.Item> </Form.Item>
</Form> </Form>
) : questionNow.question_type === 1 ? questionNow?.answers?.map((item, index) => {
return <Checkbox key={item.id} value={1} style={{ padding: 5, fontSize: 16 }}>{tiNum(index)}{item.answer}</Checkbox>
}) : questionNow.question_type === 2 ? questionNow?.answers?.map((item, index) => {
return <Radio key={item.id} value={1} style={{ padding: 5, fontSize: 16 }}>{tiNum(index)}{item.answer}</Radio>
}) : ""}
</Space> </Space>
<Radio.Group onChange={() => { return true }} value={0} size="large"> <Radio.Group onChange={() => { return true }} value={0} size="large">
@ -370,11 +403,84 @@ const CardList = () => {
<Typography>614</Typography> <Typography>614</Typography>
<Divider style={{ margin: '6px 0', opacity: 0.5 }} /> <Divider style={{ margin: '6px 0', opacity: 0.5 }} />
<strong></strong> <strong></strong>
<Typography>14/80</Typography> <Typography>{questionNowNum}/{questionNum}</Typography>
<Divider style={{ margin: '6px 0', opacity: 0.5 }} /> <Divider style={{ margin: '6px 0', opacity: 0.5 }} />
<Button size="large" block></Button> <Button
<Button size="large" block></Button> size="large"
<Button size="large" type="primary" block></Button> disabled={lastBtnShow}
onClick={() => {
paperInfo.map((e, i) => {
if (e.id === questionNow.id) {
const nextTemp = paperInfo[i - 1]
const questionList = questionTypeList
let nextData = {}
questionList[nextTemp.question_type].children.map((item, index) => {
if (item.id === nextTemp.id) {
nextData = { ...item, index: index }
}
})
setQuestionNow(nextData)
}
})
// console.log(nextQuestionData, "下一题")
}}
block></Button>
<Button size="large"
disabled={nextBtnShow}
block onClick={() => {
paperInfo.map((e, i) => {
if (e.id === questionNow.id) {
const nextTemp = paperInfo[i + 1]
const questionList = questionTypeList
let nextData = {}
questionList[nextTemp.question_type].children.map((item, index) => {
if (item.id === nextTemp.id) {
nextData = { ...item, index: index }
}
})
setQuestionNow(nextData)
}
})
// console.log(nextQuestionData, "下一题")
}}></Button>
<Button size="large" type="primary"
onClick={() => {
console.log(questionTypeList, 'questionFinish')
const questionFinishId = []
questionTypeList.map((e, i) => {
questionTypeList[i].children.map((e, index) => {
const answerId = e.answerId
answerId !== "" ? questionFinishId.push({
answer_id: (answerId instanceof Array) ? answerId.join(',') : answerId,
question_id: e.id,
question_type: e.question_type
}) : ""
})
})
const questionFinish = {
answers: JSON.stringify(questionFinishId),
rules_id: rulesPaperInfo.rules_id,
person_id: cookie.load('person_id'),
paper_id: rulesPaperInfo.paper_id
}
console.log(questionFinish, 'questionFinish', rulesPaperInfo)
runFinishExamination(questionFinish)
}}
block></Button>
</Space> </Space>
</div> </div>
</Col> </Col>

@ -0,0 +1,35 @@
import { DingdingOutlined } from '@ant-design/icons';
import { Button, Card, Steps, Result, Descriptions } from 'antd';
import { Fragment } from 'react';
import { GridContent } from '@ant-design/pro-layout';
import { history, useParams, useRequest } from 'umi';
import styles from './index.less';
const { Step } = Steps;
const extra = (
<Fragment>
<Button type="primary"></Button>
</Fragment>
);
export default () => {
const params = useParams();
const info = params.msg.split(',');
return (
<GridContent>
<Card bordered={false}>
<Result
status="success"
title="资质考试报名成功"
subTitle={'你已报名' + info[0] + '-' + info[1] + ' ' + info[2] + ',准考证号是' + info[3] + ',请准时参加考试!'}
extra={extra}
style={{ marginBottom: 16 }}
/>
</Card>
</GridContent>
)
}

@ -43,6 +43,30 @@ export async function getRulesPaper(params: {
params, params,
}); });
} }
/**
* 14
* /dsideal_yy/zygh/training/person/finishExamination
* @param params
* @returns
*/
export async function finishExamination(
params: ParamsType,
): Promise<{ data: { list: BasicListItemDataType[] } }> {
return request('/dsideal_yy/zygh/training/person/finishExamination', {
method: 'POST',
requestType: 'form',
data: {
...params,
},
});
}
/** /**
* 06 * 06
* /dsideal_yy/zygh/training/rules/getPaperQuestionList * /dsideal_yy/zygh/training/rules/getPaperQuestionList

Loading…
Cancel
Save