Administrator 3 years ago
commit adf1da1a3d

@ -2,7 +2,7 @@
import React, { useState, useRef } from 'react'; import React, { useState, useRef } from 'react';
import { useRequest, history } from 'umi'; import { useRequest, history } from 'umi';
import { PlusOutlined, TagsOutlined, UploadOutlined } from '@ant-design/icons'; import { PlusOutlined, TagsOutlined, UploadOutlined } from '@ant-design/icons';
import { Button, message, Input, Drawer, Modal, Col, Row, Space, Upload, Form, Popconfirm } from 'antd'; import { Button, message, Input, Drawer, Modal, Col, Row, Space, Upload, Form, Popconfirm, Typography } from 'antd';
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout'; import { PageContainer, FooterToolbar } from '@ant-design/pro-layout';
import type { ActionType } from '@ant-design/pro-table'; import type { ActionType } from '@ant-design/pro-table';
import type { ProColumns } from '@ant-design/pro-table'; import type { ProColumns } from '@ant-design/pro-table';
@ -296,10 +296,9 @@ const ExaminationList: React.FC = () => {
}} }}
> >
<a <a
key="detail" key="publish"
> >
{record.b_use == 1 ? "已发布" : "未发布"} {record.b_use == 1 ? <Typography.Text type="success"></Typography.Text> : <Typography.Text type="warning"></Typography.Text>}
</a> </a>
</Popconfirm> </Popconfirm>
@ -312,9 +311,6 @@ const ExaminationList: React.FC = () => {
record.apply_time = [record.apply_start_time, record.apply_end_time] record.apply_time = [record.apply_start_time, record.apply_end_time]
record.examination_time = [record.examination_end_time, record.examination_end_time] record.examination_time = [record.examination_end_time, record.examination_end_time]
record.apply_time = [record.apply_start_time, record.apply_end_time] record.apply_time = [record.apply_start_time, record.apply_end_time]
setCurrentRow(record); setCurrentRow(record);
}} }}
> >

@ -2,7 +2,7 @@
import React, { useState, useRef } from 'react'; import React, { useState, useRef } from 'react';
import { useRequest, history } from 'umi'; import { useRequest, history } from 'umi';
import { PlusOutlined, TagsOutlined, UploadOutlined } from '@ant-design/icons'; import { PlusOutlined, TagsOutlined, UploadOutlined } from '@ant-design/icons';
import { Button, message, Input, Drawer, Modal, Col, Row, Space, Upload } from 'antd'; import { Button, message, Input, Drawer, Modal, Col, Row, Space, Upload, Typography } from 'antd';
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout'; import { PageContainer, FooterToolbar } from '@ant-design/pro-layout';
import type { ProColumns, ActionType } from '@ant-design/pro-table'; import type { ProColumns, ActionType } from '@ant-design/pro-table';
import ProTable from '@ant-design/pro-table'; import ProTable from '@ant-design/pro-table';
@ -222,6 +222,7 @@ const ExaminationRules: React.FC = () => {
}}> }}>
</a>, </a>,
/*
<a <a
key="registration" key="registration"
onClick={() => { onClick={() => {
@ -229,8 +230,8 @@ const ExaminationRules: React.FC = () => {
//setCurrentRow(record); //setCurrentRow(record);
}} }}
> >
{record.b_use == 1 ? <Typography.Text type="success"></Typography.Text> : <Typography.Text type="secondary"></Typography.Text>}
</a>, </a>*/,
] ]
}, },
}, },

@ -20,7 +20,7 @@ import { saveRules, querySubjectList, queryRulesView, queryRulesList, queryRules
import { queryQuestionType } from '@/pages/questionbank/service'; import { 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';
import { PlusOutlined } from '@ant-design/icons'; import { DiffOutlined, PlusOutlined } from '@ant-design/icons';
import { TableListItem } from '../../components/QuestionSelector'; import { TableListItem } from '../../components/QuestionSelector';
import ScoreSetter from '../../components/ScoreSetter'; import ScoreSetter from '../../components/ScoreSetter';
import AutoSelector from '../components/AutoSelector'; import AutoSelector from '../components/AutoSelector';
@ -62,8 +62,8 @@ export default () => {
dataIndex: 'examination_time', dataIndex: 'examination_time',
valueType: 'text', valueType: 'text',
sorter: false, sorter: false,
hideInTable: false, hideInTable: true,
hideInForm: false, hideInForm: true,
hideInSearch: true, hideInSearch: true,
renderText: (val: string) => `${val}`, renderText: (val: string) => `${val}`,
}, },
@ -71,13 +71,13 @@ export default () => {
title: '关联主题', title: '关联主题',
dataIndex: 'subject_name', dataIndex: 'subject_name',
valueType: 'text', valueType: 'text',
hideInTable: false, hideInTable: true,
hideInForm: false, hideInForm: true,
hideInSearch: true, hideInSearch: true,
}, },
{ {
title: '题型设置', title: '题型设置',
dataIndex: 'subject_id', dataIndex: 'question_type_count',
valueType: 'text', valueType: 'text',
hideInTable: true, hideInTable: true,
hideInForm: false, hideInForm: false,
@ -93,9 +93,9 @@ export default () => {
sinfo.push({ label: Items.list[i].subject_name, value: Items.list[i].subject_id }) sinfo.push({ label: Items.list[i].subject_name, value: Items.list[i].subject_id })
} }
console.log(sinfo, 'sinfo'); console.log(sinfo, 'sinfo');
*/ */
return []; return [];
}, },
}, },
{ {
title: '总分', title: '总分',
@ -104,7 +104,7 @@ export default () => {
valueType: 'text', valueType: 'text',
hideInSearch: true, hideInSearch: true,
hideInForm: false, hideInForm: false,
renderText: (val: string) => `${val}`, renderText: (val: string) => `${val || 0} `,
}, },
{ {
title: '通过线', title: '通过线',
@ -113,12 +113,13 @@ export default () => {
valueType: 'text', valueType: 'text',
hideInSearch: true, hideInSearch: true,
hideInForm: false, hideInForm: false,
renderText: (val: string) => `${val}`, renderText: (val: string) => `${val || '-'}`,
}, },
{ {
title: '操作', title: '操作',
dataIndex: 'option', dataIndex: 'option',
valueType: 'option', valueType: 'option',
width: 200,
render: (_dom: any, record: React.SetStateAction<TableListItem | undefined>) => { render: (_dom: any, record: React.SetStateAction<TableListItem | undefined>) => {
console.log(record, 'record') console.log(record, 'record')
return [ return [
@ -305,32 +306,36 @@ export default () => {
> >
<div style={{ margin: '0' }}> <div style={{ margin: '0' }}>
<ProTable<TableListItem, TableListPagination> <ProTable<TableListItem, TableListPagination>
page
headerTitle={false} headerTitle={false}
actionRef={actionRef} actionRef={actionRef}
rowKey="examination_id" rowKey="examination_id"
options={false} options={false}
search={false} search={false}
toolBarRender={() => [ toolBarRender={() => (
<Button <Space style={{margin:-24}} >
type="primary" <Button
key="primary" type="primary"
onClick={() => { key="primary"
handleAutoModalVisible(true) onClick={() => {
}} handleAutoModalVisible(true)
> }}
<PlusOutlined /> >
</Button>, <PlusOutlined />
<Button </Button>
type="primary" <Button
key="primary" type="primary"
onClick={() => { key="primary"
handleScoreModalVisible(true) onClick={() => {
}} handleScoreModalVisible(true)
> }}
<PlusOutlined /> >
</Button> <DiffOutlined />
]} </Button>
</Space>
)}
request={async (value) => { request={async (value) => {
console.log('queryRulesPaper::')
const _data = await queryRulesPaper( const _data = await queryRulesPaper(
{ {
rules_id: params?.id, rules_id: params?.id,
@ -340,7 +345,7 @@ export default () => {
); );
return { return {
current: _data?.pageNumber, current: _data?.pageNumber,
data: _data?.table_List, data: _data?.question_list,
pageSize: _data?.pageSize, pageSize: _data?.pageSize,
total: _data?.totalRow || 0, total: _data?.totalRow || 0,
}; };
@ -407,6 +412,7 @@ export default () => {
console.log('paper', paper) console.log('paper', paper)
// setUuidPaper(paper?.paper_uuid) // setUuidPaper(paper?.paper_uuid)
// message.success('提交成功'); // message.success('提交成功');
actionRef.current?.reload()
handleAutoModalVisible(false) handleAutoModalVisible(false)
return true; return true;
}} }}

@ -2,7 +2,7 @@
import React, { useState, useRef } from 'react'; import React, { useState, useRef } from 'react';
import { useRequest, history } from 'umi'; import { useRequest, history } from 'umi';
import { PlusOutlined, TagsOutlined, UploadOutlined } from '@ant-design/icons'; import { PlusOutlined, TagsOutlined, UploadOutlined } from '@ant-design/icons';
import { Button, message, Input, Drawer, Modal, Col, Row, Space, Upload } from 'antd'; import { Button, message, Input, Drawer, Modal, Col, Row, Space, Upload, Typography } from 'antd';
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout'; import { PageContainer, FooterToolbar } from '@ant-design/pro-layout';
import type { ProColumns, ActionType } from '@ant-design/pro-table'; import type { ProColumns, ActionType } from '@ant-design/pro-table';
import ProTable from '@ant-design/pro-table'; import ProTable from '@ant-design/pro-table';
@ -194,7 +194,7 @@ const ExaminationRules: React.FC = () => {
setSelectedRows([]); setSelectedRows([]);
actionRef.current?.reloadAndRest?.(); actionRef.current?.reloadAndRest?.();
}}> }}>
<Typography.Text type="danger"></Typography.Text>
</a>, </a>,
<a <a
key="b_use" key="b_use"
@ -206,7 +206,7 @@ const ExaminationRules: React.FC = () => {
actionRef.current?.reloadAndRest?.(); actionRef.current?.reloadAndRest?.();
}} }}
> >
{record.b_use == 0 ? "未发布" : "已发布"} {record.b_use == 1 ? <Typography.Text type="success"></Typography.Text> : <Typography.Text type="secondary"></Typography.Text>}
</a>, </a>,
] ]
}, },

@ -209,4 +209,4 @@ export async function autoPaperOfficial(data: Record<string, any>, options?: Rec
requestType: "form", requestType: "form",
...(options || {}), ...(options || {}),
}); });
} }

@ -185,21 +185,31 @@ const QuestionBank = () => {
hideInForm: false, hideInForm: false,
hideInSearch: true, hideInSearch: true,
renderFormItem: (item, { defaultRender, ...rest }, form) => ( renderFormItem: (item, { defaultRender, ...rest }, form) => (
<ProFormList <Checkbox.Group style={{ width: '100%' }} onChange={(e)=>{
name='answertrue' //console.log(`checked = ${e.target.checked}`);
children={undefined} }}>
creatorButtonProps={false} <Row>
creatorRecord={{ <Col span={3}>
useMode: 'none', <Checkbox value="A">A</Checkbox>
}} </Col>
/> <Col span={3}>
<Checkbox value="B">B</Checkbox>
</Col>
<Col span={3}>
<Checkbox value="C">C</Checkbox>
</Col>
<Col span={3}>
<Checkbox value="D">D</Checkbox>
</Col>
</Row>
</Checkbox.Group>
) )
/* /*
formItemProps: { formItemProps: {
rules: [ rules: [
{ {
required: true, required: true,
message: '请填写试题解析', message: '请填答案',
}, },
] ]
},*/ },*/
@ -231,7 +241,6 @@ const QuestionBank = () => {
// rules={[{ required: true }]} // rules={[{ required: true }]}
value="锦书" value="锦书"
// disabled // disabled
/> />
), ),
}, },

@ -72,25 +72,31 @@ ol {
filter: grayscale(100%) brightness(500%); filter: grayscale(100%) brightness(500%);
} }
.pdefault{ .answerSheet{
}
.answerSheet .pdefault{
margin: -1px; margin: -1px;
border: #cccccc 1px solid; border: #cccccc 1px solid;
border-radius: 5px; border-radius: 5px;
color: #999999; color: #999999;
width: 40px; width: 40px;
height: 40px; height: 40px;
background-color: #ffffff; // background-color: #ffffff;
text-align: center; text-align: center;
display:flex; display:flex;
font-size: 18px; font-size: 18px;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.pact{ .answerSheet .pact{
border: #1895ff 1px solid; border: #1895ff 2px solid!important;
color: #1895ff; color: #1895ff;
} }
.pok{
border: aquamarine 1px solid;
color: aquamarine; .answerSheet .pok{
} border: #1895ff 1px solid;
color: #1895ff;background-color: #e6f7ff;
}

@ -1,19 +1,22 @@
/** 资质考试 */ /** 资质考试 */
import { AlignLeftOutlined, PlusOutlined } from '@ant-design/icons'; import { AlignLeftOutlined, PlusOutlined } from '@ant-design/icons';
import { Switch, Button, Card, Col, List, Menu, Progress, Row, Typography, Space, Divider, Radio, Checkbox } 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 { useState } from 'react'; import { useRef, useState } from 'react';
const { Text, Link } = Typography; const { Text, Link } = Typography;
import { getRulesPaper, getPaperQuestionList } from '../service'; import { getRulesPaper, getPaperQuestionList } 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 SubMenu from 'antd/lib/menu/SubMenu';
import ProCard from '@ant-design/pro-card'; import ProCard from '@ant-design/pro-card';
import { getDirection } from '../../../.umi/plugin-locale/localeExports';
const { Paragraph } = Typography; const { Paragraph } = Typography;
const CardList = () => { const CardList = () => {
const formRef = useRef<ActionType>();
// 组卷详情查询 // 组卷详情查询
const [rulesPaperInfo, setRulesPaperInfo] = useState([]); const [rulesPaperInfo, setRulesPaperInfo] = useState([]);
// 试题列表 // 试题列表
@ -66,7 +69,7 @@ const CardList = () => {
const paperList = result.question_list; const paperList = result.question_list;
const qList = params[0].question_type_count const qList = params[0].question_type_count
const questionList = [] const questionList: any[] = []
qList.map((e, i) => { qList.map((e, i) => {
if (e.count > 0) { if (e.count > 0) {
questionList.push({ questionList.push({
@ -75,11 +78,11 @@ const CardList = () => {
}) })
} }
}) })
// 根据分类拆分试题 左侧答题卡 // 根据分类拆分试题 左侧答题卡 state:0 未答题 1 已答题
paperList.map((e) => { paperList.map((e) => {
questionList.map((item, index) => { questionList.map((item, index) => {
if (item.question_type == e.question_type) { if (item.question_type == e.question_type) {
questionList[index].children.push({ ...e, question_type: item.question_type, answerSelect: "" }) questionList[index].children.push({ ...e, question_type: item.question_type, answerSelect: "", state: 0, answerId: "" })
} }
}) })
}) })
@ -87,23 +90,32 @@ const CardList = () => {
// 根据答题卡生成考试顺序 // 根据答题卡生成考试顺序
const questionInfo = [] const questionInfo = []
for (let i = 0; i < questionList.length; i++) { for (let i = 0; i < questionList.length; i++) {
console.log(questionList[i], 'iiii')
questionList[i].children.map((e, index) => { questionList[i].children.map((e, index) => {
console.log(e, "num");
questionInfo.push({ ...e, index: index }) questionInfo.push({ ...e, index: index })
}) })
} }
const nowQ = setLabVal(questionInfo[0])
setPaperInfo(questionInfo || []) setPaperInfo(questionInfo || [])
setQuestionNow(questionInfo[0] || []) setQuestionNow(nowQ || [])
setQuestionTypeList(questionList || []) setQuestionTypeList(questionList || [])
} }
} }
}); });
const setLabVal = (value: []) => {
const nowQ = value
console.log(nowQ, "888888");
nowQ.answers.map((e, i) => {
console.log(e, 'eeeeee');
nowQ.answers[i].label = e.answer
nowQ.answers[i].value = e.id
})
return nowQ
}
const content = ( const content = (
<div className={styles.pageHeaderContent}> <div className={styles.pageHeaderContent}>
<p> <p>
@ -161,9 +173,13 @@ 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'
headStyle={{ padding: 24, border: '#d9d9d9 solid 1px' }} headStyle={{ padding: 24, border: '#d9d9d9 solid 1px' }}
> >
{console.log("当前题号:", questionNow, "试题顺序:", paperInfo, "二维数组:", questionTypeList)} {console.log("当前题号:", questionNow, "试题顺序:", paperInfo, "二维数组:", questionTypeList)}
@ -172,7 +188,7 @@ const CardList = () => {
questionTypeList && ( questionTypeList && (
questionTypeList.map((e, i) => { questionTypeList.map((e, i) => {
console.log(e.children, 'e.children')
return <List return <List
key={i} key={i}
header={e.type_name} header={e.type_name}
@ -185,12 +201,27 @@ const CardList = () => {
id={item.id} id={item.id}
> <Button > <Button
className={ className={
`pdefault ${questionNow.id === item.id ? "pact" : ""} ${item.answertrue === item.answerSelect ? "pok" : ""}` `pdefault ${item.state === 1 ? "pok" : ""} ${questionNow.id === item.id ? "pact" : ""}`
} }
onClick={() => { onClick={() => {
// 查看解析关闭
setParsingShow(false) setParsingShow(false)
setQuestionNow(item)
paperInfo.map((e) => {
if (e.id === item.id) {
console.log(e.id, e.index, item)
const dQ = setLabVal(item)
setQuestionNow({ ...dQ, index: e.index })
}
})
console.log(questionTypeList);
formRef?.current.setFieldsValue({ note: e.answerId });
}} }}
>{index}</Button> </List.Item> >{index}</Button> </List.Item>
}} }}
@ -227,34 +258,99 @@ const CardList = () => {
headerBordered headerBordered
> >
<Space direction="vertical" style={{ width: '100%', padding: '24px 48px' }}> <Space direction="vertical" style={{ width: '100%', padding: '24px 48px' }}>
{/*
<Space direction="vertical">
<Radio.Group
options={questionNow.answers}
onChange={(item) => {
const qArr = []
// 默认输出答案0000
questionNow?.answers?.map((e, i) => {
console.log(e, i, "ei");
item.target.value === e.id ? qArr.push("1") : qArr.push("0")
})
console.log(qArr, 'Arr')
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 = item.target.value
console.log(questionList, 'questionList11', questionAnswer)
// 提交答题卡
setQuestionTypeList(questionList)
// console.log('0', questionList, questionNow, item, qX, qI, questionList[qX].children[qI].answerSelect, questionAnswer)
}} defaultValue={questionNow.answerId} />
</Space>
*/}
<Typography style={{ marginBottom: 16, fontSize: 18 }}> <Typography style={{ marginBottom: 16, fontSize: 18 }}>
{questionNow?.question_stem} {questionNow?.question_stem}
{console.log(questionNow.answerId, 'answerId', questionNow.answerId)}
</Typography> </Typography>
<Radio.Group onChange={() => { return true }} value={0} size="large"> <Space direction="vertical" style={{ fontSize: 16 }}>
<Space direction="vertical" style={{ fontSize: 16 }}> {questionNow.question_type === 0 ?
{questionNow.question_type === 0 ?
(<Radio.Group><Space direction="vertical">{questionNow?.answers?.map((item, index) => { (
return <Radio key={item.id} onChange={() => { <Form
const qArr = [] ref={formRef} name="control-ref"
questionNow?.answers?.map(() => { >
qArr.push("0") <Form.Item name="note" label="Note" rules={[{ required: true }]}>
}) <Radio.Group
qArr[index] = item.is_true
const questionAnswer = qArr.join(",") defaultValue={questionNow.answerId}>
const paperInfoTemp = paperInfo <Space direction="vertical">{questionNow?.answers?.map((item, index) => {
paperInfoTemp[questionNow.index].answerSelect = questionAnswer console.log(item, 'item')
setPaperInfo(paperInfoTemp || []) return <Radio key={item.id}
console.log('0', paperInfoTemp, questionNow.index) onChange={() => {
}} value={item.id} style={{ padding: 5, fontSize: 16 }}>{tiNum(index)}{item.answer}</Radio> const qArr = []
})}</Space></Radio.Group>) : questionNow.question_type === 1 ? questionNow?.answers?.map((item, index) => { // 默认输出答案0000
return <Checkbox key={item.id} value={1} style={{ padding: 5, fontSize: 16 }}>{tiNum(index)}{item.answer}</Checkbox> questionNow?.answers?.map(() => {
}) : questionNow.question_type === 2 ? questionNow?.answers?.map((item, index) => { qArr.push("0")
return <Radio key={item.id} value={1} style={{ padding: 5, fontSize: 16 }}>{tiNum(index)}{item.answer}</Radio> })
}) : ""} // 修改用户答案
qArr[index] = item.is_true
</Space>
</Radio.Group> 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 = item.id
// 提交答题卡
setQuestionTypeList(questionList)
// console.log('0', questionList, questionNow, item, qX, qI, questionList[qX].children[qI].answerSelect, questionAnswer)
}}
value={item.id}
style={{ padding: 5, fontSize: 16 }}
>{tiNum(index)}{item.answer}</Radio>
})}</Space></Radio.Group>
</Form.Item>
</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>
<Radio.Group onChange={() => { return true }} value={0} size="large"> <Radio.Group onChange={() => { return true }} value={0} size="large">
<Space direction="vertical" style={{ fontSize: 16 }}> <Space direction="vertical" style={{ fontSize: 16 }}>

Loading…
Cancel
Save