xialiang 3 years ago
parent 8ba755a8ff
commit 209fe92e5c

@ -397,7 +397,7 @@ export default () => {
}}*/ }}*/
onFinish={async (value: any) => { onFinish={async (value: any) => {
console.log(subjectId, 'subjectId') console.log(value, 'subjectId')
const url = value?.upload[0]?.url?.replace('/dsideal_yy/html/', '') || value?.upload[0]?.response?.url; const url = value?.upload[0]?.url?.replace('/dsideal_yy/html/', '') || value?.upload[0]?.response?.url;
const info = await saveSubject({ const info = await saveSubject({
@ -435,7 +435,7 @@ export default () => {
width="xl" width="xl"
// tooltip="最长为 6 位汉字,需要与考生身份证一致" // tooltip="最长为 6 位汉字,需要与考生身份证一致"
placeholder="请输入介绍" placeholder="请输入介绍"
rules={[{ required: true }]} // rules={[{ required: true }]}
// value="锦书" // value="锦书"
// disabled // disabled

@ -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, Typography } from 'antd'; import { Button, message, Input, Drawer, Modal, Col, Row, Space, Upload, Typography, Popconfirm } 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';
@ -128,7 +128,7 @@ const ExaminationRules: React.FC = () => {
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');
const info = sinfo?.filter((item, idx, self)=>{ const info = sinfo?.filter((item, idx, self) => {
return item?.b_use === 1 return item?.b_use === 1
}); });
return info; return info;
@ -192,18 +192,22 @@ const ExaminationRules: React.FC = () => {
> >
</Button>, </Button>,
<Button type="link"
key="remove"
disabled={record.b_use ? true : false} <Popconfirm key="popconfirm" title={`确认删除当前考试吗?`} okText="是" cancelText="否"
onClick={() => { onConfirm={async () => {
handleRemove([{ key: record?.id }], record); // 调用批量删除函数如果接口不支持批量需要在service中处理 handleRemove([{ key: record?.id }], record); // 调用批量删除函数如果接口不支持批量需要在service中处理
setSelectedRows([]); setSelectedRows([]);
actionRef.current?.reloadAndRest?.(); actionRef.current?.reloadAndRest?.();
}} }}
style={{ padding: '0 2px 0 0' }}
> >
<Typography.Text disabled={record.b_use ? true : false} type={"danger"}></Typography.Text> <Button type="link" danger disabled={record.b_use ? true : false}></Button>
</Button>, </Popconfirm>
,
<a <a
key="b_use" key="b_use"
onClick={async () => { onClick={async () => {

@ -9,21 +9,22 @@ 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 ProList from '@ant-design/pro-list'; import ProList from '@ant-design/pro-list';
import { ReactText, useEffect, useRef, useState } from 'react'; import type { ReactText } from 'react';
import { useEffect, useRef, useState } from 'react';
import { PlusOutlined, DeleteOutlined, DownloadOutlined, UploadOutlined, EditOutlined, EyeOutlined, EyeInvisibleOutlined, DownOutlined, UserOutlined } from '@ant-design/icons'; import { PlusOutlined, DeleteOutlined, DownloadOutlined, UploadOutlined, EditOutlined, EyeOutlined, EyeInvisibleOutlined, DownOutlined, UserOutlined } from '@ant-design/icons';
import { exportQuestionTemplate, queryQuestionById, queryQuestionList, queryQuestionType, removeQuestion, saveQuestion } from './service'; import { exportQuestionTemplate, queryQuestionById, queryQuestionList, queryQuestionType, removeQuestion, saveQuestion } from './service';
import { useParams, useRequest, history, useRouteMatch } from 'umi'; import { useParams, useRequest, history, useRouteMatch } from 'umi';
import { queryCourseListByTag, queryCourseView, queryTagList } from '@/pages/course/option/service'; import { queryCourseListByTag, queryCourseView, queryTagList } from '@/pages/course/option/service';
import ProForm, { BetaSchemaForm, ProFormCheckbox, ProFormList, ProFormRadio, ProFormSelect, ProFormText } from '@ant-design/pro-form'; import ProForm, { BetaSchemaForm, ProFormCheckbox, ProFormList, ProFormRadio, ProFormSelect, ProFormText } from '@ant-design/pro-form';
import { DataItem } from '../dashboard/analysis/data'; import type { DataItem } from '../dashboard/analysis/data';
import { ActionType, ProColumns } from '@ant-design/pro-table'; import type { ActionType, ProColumns } from '@ant-design/pro-table';
import ProFormRichEdit from '../course/subject/components/ProFormRichEdit'; import ProFormRichEdit from '../course/subject/components/ProFormRichEdit';
import { TableListItem } from '../course/option/data'; import type { TableListItem } from '../course/option/data';
import AnswersSelector from './components/AnswersEditor'; import AnswersSelector from './components/AnswersEditor';
//const { Paragraph } = Typography; //const { Paragraph } = Typography;
const { Text, Link } = Typography; const { Text, Link } = Typography;
const labels = ['A','B','C','D','E','F','G','H','I','J','K']; const labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K'];
const parsingMap = new Map() const parsingMap = new Map()
console.log('first'); console.log('first');
@ -32,10 +33,10 @@ console.log('first');
* *
* @param fields * @param fields
*/ */
const handleAdd = async (fields: TableListItem) => { const handleAdd = async (fields: TableListItem) => {
const hide = message.loading('正在添加'); const hide = message.loading('正在添加');
try { try {
await saveQuestion({ ...fields}); await saveQuestion({ ...fields });
hide(); hide();
message.success('添加成功'); message.success('添加成功');
return true; return true;
@ -51,10 +52,10 @@ console.log('first');
* *
* @param fields * @param fields
*/ */
const handleUpdate = async (fields: TableListItem) => { const handleUpdate = async (fields: TableListItem) => {
const hide = message.loading('正在保存'); const hide = message.loading('正在保存');
try { try {
await saveQuestion({ ...fields}); await saveQuestion({ ...fields });
hide(); hide();
message.success('保存成功'); message.success('保存成功');
return true; return true;
@ -76,13 +77,13 @@ const handleRemove = async (selectedRows: TableListItem[]) => {
if (!selectedRows) return true; if (!selectedRows) return true;
try { try {
const {code, msg} = await removeQuestion({ const { code, msg } = await removeQuestion({
key: selectedRows.map((row) => row.key), key: selectedRows.map((row) => row.key),
}); });
hide(); hide();
if(code === 2000 ){ if (code === 2000) {
message.success('删除成功,即将刷新'); message.success('删除成功,即将刷新');
}else{ } else {
message.warning(msg); message.warning(msg);
} }
return true; return true;
@ -97,7 +98,7 @@ const QuestionBank = () => {
const match = useRouteMatch(); const match = useRouteMatch();
console.log('match', match); console.log('match', match);
const type = history.location.pathname === '/questionbank/attestation' ? 1 : 0 ; // 题库类型 const type = history.location.pathname === '/questionbank/attestation' ? 1 : 0; // 题库类型
const actionRef = useRef<ActionType>(); const actionRef = useRef<ActionType>();
const formRef = useRef(); const formRef = useRef();
@ -111,7 +112,7 @@ const QuestionBank = () => {
const [selectedRowsState, setSelectedRows] = useState<API.RuleListItem[]>([]); const [selectedRowsState, setSelectedRows] = useState<API.RuleListItem[]>([]);
const [currentRow, setCurrentRow] = useState<TableListItem>(); const [currentRow, setCurrentRow] = useState<TableListItem>();
const [expandedDescRowKeys, setExpandedDescRowKeys] = useState<readonly ReactText[]>([]); // 展开解析设置 const [expandedDescRowKeys, setExpandedDescRowKeys] = useState<readonly ReactText[]>([]); // 展开解析设置
const [addType, setAddType] = useState({name: '', value: ''}); const [addType, setAddType] = useState({ name: '', value: '' });
const [pageNumber, setPageNumber] = useState(1) const [pageNumber, setPageNumber] = useState(1)
//const [answertrueValues, setAnswertrueValues] = useState(); // 编辑试题答案项值 //const [answertrueValues, setAnswertrueValues] = useState(); // 编辑试题答案项值
@ -176,8 +177,8 @@ const QuestionBank = () => {
renderText: (val: string) => `${val}`, renderText: (val: string) => `${val}`,
dependencies: ['tag_ids'], dependencies: ['tag_ids'],
request: async (params) => { request: async (params) => {
const {tag_ids} = params; const { tag_ids } = params;
const { data: Items } = await queryCourseListByTag({tag_ids: tag_ids?.toString()}); const { data: Items } = await queryCourseListByTag({ tag_ids: tag_ids?.toString() });
console.log('queryCourseListByTag...') console.log('queryCourseListByTag...')
const courses = [] const courses = []
for (let i = 0; i < Items?.length; i++) { for (let i = 0; i < Items?.length; i++) {
@ -235,42 +236,42 @@ const QuestionBank = () => {
hideInTable: false, hideInTable: false,
hideInForm: false, hideInForm: false,
hideInSearch: true, hideInSearch: true,
dependencies:['answers'], dependencies: ['answers'],
renderFormItem: (item, { defaultRender, ...rest }, form) => { renderFormItem: (item, { defaultRender, ...rest }, form) => {
console.log('正确答案...', form.getFieldValue('answers')) console.log('正确答案...', form.getFieldValue('answers'))
// 关联长度变化及编辑回显 // 关联长度变化及编辑回显
console.log('edit answertrue11', item) console.log('edit answertrue11', item)
console.log('form::::::',form.getFieldValue('answertrue')) console.log('form::::::', form.getFieldValue('answertrue'))
console.log('rest', rest) console.log('rest', rest)
console.log('question_type:::', form.getFieldValue('question_type')) console.log('question_type:::', form.getFieldValue('question_type'))
// 获取选项长度 // 获取选项长度
const len = form.getFieldValue('answers')?.length || 2; const len = form.getFieldValue('answers')?.length || 2;
const opts = [] const opts = []
for(let i=0; i<len; i++){ for (let i = 0; i < len; i++) {
opts.push(labels[i]) opts.push(labels[i])
} }
if(Number(form.getFieldValue('question_type')) === 0){ if (Number(form.getFieldValue('question_type')) === 0) {
console.log('my type', Number(form.getFieldValue('question_type'))) console.log('my type', Number(form.getFieldValue('question_type')))
}else{ } else {
console.log('====0') console.log('====0')
} }
console.log('answers??',form.getFieldValue('answers')?.length) console.log('answers??', form.getFieldValue('answers')?.length)
console.log('addType?.value', addType?.value) console.log('addType?.value', addType?.value)
// 0 单选 1 多选 2 判断 // 0 单选 1 多选 2 判断
return ((addType?.value === 0 || addType?.value === 2) || (Number(form.getFieldValue('question_type')) === 0) || Number(form.getFieldValue('question_type')) === 2) ? return ((addType?.value === 0 || addType?.value === 2) || (Number(form.getFieldValue('question_type')) === 0) || Number(form.getFieldValue('question_type')) === 2) ?
<Radio.Group <Radio.Group
name="answertrue" name="answertrue"
options={addType?.value === 0 || (Number(form.getFieldValue('question_type')) === 0) ? opts : ['A', 'B']} options={addType?.value === 0 || (Number(form.getFieldValue('question_type')) === 0) ? opts : ['A', 'B']}
/> />
: :
<Checkbox.Group <Checkbox.Group
name="answertrue" name="answertrue"
options={opts} options={opts}
/> />
}, },
formItemProps: { formItemProps: {
@ -295,22 +296,31 @@ const QuestionBank = () => {
{ {
required: true, required: true,
message: '请填写试题解析', message: '请填写试题解析',
}, }, {
validator: (rule, value) => {
console.log("表单:", value, value.replace(/(^\s*)|(\s*$)/g, ""), "|")
if (value.replace(/(^\s*)|(\s*$)/g, "") === "") {
return Promise.reject('请填写试题解析')
} else {
return Promise.resolve()
}
}
}
] ]
}, },
renderText: (val: string) => (<div dangerouslySetInnerHTML={{__html: val}} />), renderText: (val: string) => (<div dangerouslySetInnerHTML={{ __html: val }} />),
renderFormItem: (item, { defaultRender, ...rest }, form) => ( // renderFormItem: (item, { defaultRender, ...rest }, form) => (
<ProFormRichEdit // <ProFormRichEdit
name="parsing" // name="parsing"
label="" // label=""
width="xl" // width="xl"
// tooltip="最长为 6 位汉字,需要与考生身份证一致" // // tooltip="最长为 6 位汉字,需要与考生身份证一致"
placeholder="请填写试题解析" // placeholder="请填写试题解析"
// rules={[{ required: true }]} // // rules={[{ required: true }]}
value="" // value=""
// disabled // // disabled
/> // />
), // ),
}, },
] ]
@ -319,19 +329,19 @@ const QuestionBank = () => {
/** 获取题型 */ /** 获取题型 */
const { data } = useRequest(() => { const { data } = useRequest(() => {
return queryQuestionType(); return queryQuestionType();
},{ }, {
formatResult: (result) => { formatResult: (result) => {
return result.list; return result.list;
} }
}); });
/* /*
const { data: template } = useRequest(() => { const { data: template } = useRequest(() => {
return exportQuestionTemplate(); return exportQuestionTemplate();
}); });
*/ */
useEffect(() => { useEffect(() => {
setQuestionType(data || []); setQuestionType(data || []);
return ()=>{ return () => {
/** 退出当前页面清空Map */ /** 退出当前页面清空Map */
parsingMap.clear(); parsingMap.clear();
} }
@ -340,7 +350,7 @@ const QuestionBank = () => {
return ( return (
<PageContainer content={false} extraContent={false} className={styles.questionbank}> <PageContainer content={false} extraContent={false} className={styles.questionbank}>
<ProList<any> <ProList<any>
style={{minWidth:1180}} style={{ minWidth: 1180 }}
rowKey='id' rowKey='id'
itemLayout="vertical" itemLayout="vertical"
actionRef={actionRef} actionRef={actionRef}
@ -356,34 +366,34 @@ const QuestionBank = () => {
toolBarRender={() => { toolBarRender={() => {
const menuItems = []; const menuItems = [];
console.log('toolBarRender', questionType); console.log('toolBarRender', questionType);
if(questionType?.length > 0){ if (questionType?.length > 0) {
console.log('push'); console.log('push');
questionType.forEach((item: {code: number, name: string})=>{ questionType.forEach((item: { code: number, name: string }) => {
menuItems.push(<Menu.Item key={item?.code}>{item?.name}</Menu.Item>) menuItems.push(<Menu.Item key={item?.code}>{item?.name}</Menu.Item>)
}) })
} }
const menu = ( const menu = (
<Menu onClick={(value)=>{ <Menu onClick={(value) => {
console.log('menu11', value); console.log('menu11', value);
console.log('menu11', value.key); console.log('menu11', value.key);
console.log('menuquestionType', ); console.log('menuquestionType',);
setAddType({ name: questionType[Number(value?.key)]?.name, value: Number(value?.key)}); setAddType({ name: questionType[Number(value?.key)]?.name, value: Number(value?.key) });
handleCreateModalVisible(true); handleCreateModalVisible(true);
}}> }}>
{menuItems} {menuItems}
</Menu> </Menu>
); );
return [ return [
<Dropdown overlay={menu}> <Dropdown overlay={menu}>
<Button type="primary"> <Button type="primary">
<PlusOutlined /> <DownOutlined /> <PlusOutlined /> <DownOutlined />
</Button> </Button>
</Dropdown>, </Dropdown>,
<Button key="remove" type="primary" danger onClick={async (value)=>{ <Button key="remove" type="primary" danger onClick={async (value) => {
console.log('del selectedRowsState', selectedRowsState) console.log('del selectedRowsState', selectedRowsState)
const selectedRows = selectedRowsState?.map((item)=>({key:item?.id})) const selectedRows = selectedRowsState?.map((item) => ({ key: item?.id }))
console.log('selectedRows', selectedRows) console.log('selectedRows', selectedRows)
if(selectedRows?.length > 0){ if (selectedRows?.length > 0) {
const success = await handleRemove(selectedRows); const success = await handleRemove(selectedRows);
if (success) { if (success) {
// handleModalVisible(false); // handleModalVisible(false);
@ -393,13 +403,13 @@ const QuestionBank = () => {
} }
} }
}else{ } else {
message.warn('请选择删除项') message.warn('请选择删除项')
} }
}}> }}>
<DeleteOutlined /> <DeleteOutlined />
</Button>, </Button>,
<Button type="primary" key="download" onClick={()=>{window.location.href='/dsideal_yy/zygh/training/exportQuestionTemplate'}} > <Button type="primary" key="download" onClick={() => { window.location.href = '/dsideal_yy/zygh/training/exportQuestionTemplate' }} >
<DownloadOutlined /> <DownloadOutlined />
</Button>, </Button>,
<Upload <Upload
@ -411,18 +421,18 @@ const QuestionBank = () => {
type: type, type: type,
} }
} }
onChange={({file, fileList, event })=>{ onChange={({ file, fileList, event }) => {
console.log('file status', file?.status) console.log('file status', file?.status)
console.log('file event',event) console.log('file event', event)
if(file?.status === 'done' && file?.response?.success === true){ if (file?.status === 'done' && file?.response?.success === true) {
message.success(file?.response?.info); message.success(file?.response?.info);
actionRef.current?.reload(); // 上传完成刷新 actionRef.current?.reload(); // 上传完成刷新
} }
if(file?.status === 'done' && file?.response?.success === false){ if (file?.status === 'done' && file?.response?.success === false) {
message.error( file?.response?.error_list?.toString() ); message.error(file?.response?.error_list?.toString());
//actionRef.current?.reload(); // 上传完成刷新 //actionRef.current?.reload(); // 上传完成刷新
} }
if(file?.status === 'error'){ if (file?.status === 'error') {
message.error('批量上传失败'); message.error('批量上传失败');
} }
}} }}
@ -463,13 +473,13 @@ const QuestionBank = () => {
page_size: value?.pageSize, page_size: value?.pageSize,
}); });
// 课程名称及课程标签 // 课程名称及课程标签
console.log('data',questions); console.log('data', questions);
const data = [] const data = []
for(let i=0; i<questions?.table_List.length; i++){ for (let i = 0; i < questions?.table_List.length; i++) {
const { data: course } = await queryCourseView({ const { data: course } = await queryCourseView({
course_id: questions?.table_List[i]?.course_id course_id: questions?.table_List[i]?.course_id
}); });
data[i] = {...questions?.table_List[i], course_name:course?.course_name, tag_name:course?.tag_name, }; data[i] = { ...questions?.table_List[i], course_name: course?.course_name, tag_name: course?.tag_name, };
} }
console.log('questions?.pageNumber', actionRef.current) console.log('questions?.pageNumber', actionRef.current)
console.log('questions?.totalRow', questions?.totalRow) console.log('questions?.totalRow', questions?.totalRow)
@ -496,7 +506,7 @@ const QuestionBank = () => {
title: '题干', title: '题干',
search: false, search: false,
dataIndex: 'question_stem', dataIndex: 'question_stem',
render: (text: React.ReactNode, record: T, index: number) => (<span style={{fontFamily:'auto'}}><Text code style={{width:80, fontSize:10, color:'bfbfbf',display:'none'}}>{record?.id}</Text> {text}</span>), render: (text: React.ReactNode, record: T, index: number) => (<span style={{ fontFamily: 'auto' }}><Text code style={{ width: 80, fontSize: 10, color: 'bfbfbf', display: 'none' }}>{record?.id}</Text> {text}</span>),
}, },
avatar: { avatar: {
title: '题型', title: '题型',
@ -504,15 +514,15 @@ const QuestionBank = () => {
dataIndex: 'question_type', dataIndex: 'question_type',
valueType: 'text', valueType: 'text',
render: (text: React.ReactNode, record: T, index: number) => { render: (text: React.ReactNode, record: T, index: number) => {
const type = questionType?.filter((item, idx, self)=>{ const type = questionType?.filter((item, idx, self) => {
console.log('FFFF', item, idx, self); console.log('FFFF', item, idx, self);
return item?.code === record.question_type return item?.code === record.question_type
}); });
console.log('type', type?.name); console.log('type', type?.name);
console.log('type', type?.name); console.log('type', type?.name);
console.log('questionType::::',questionType); console.log('questionType::::', questionType);
return `${(pageNumber - 1) * actionRef.current?.pageInfo?.pageSize + index +1}. [${type[0]?.name}]` return `${(pageNumber - 1) * actionRef.current?.pageInfo?.pageSize + index + 1}. [${type[0]?.name}]`
}, },
}, },
description: { description: {
@ -528,11 +538,11 @@ const QuestionBank = () => {
bordered={false} bordered={false}
dataSource={record.answers || []} dataSource={record.answers || []}
rowKey='id' rowKey='id'
renderItem={ (item, key) => { renderItem={(item, key) => {
console.log('item', item); console.log('item', item);
return ( return (
<List.Item> <List.Item>
<Typography.Text mark={false}>{`${(record?.question_type === 2) ? ['A','B'][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>)
}} }}
/> />
@ -542,37 +552,37 @@ const QuestionBank = () => {
subTitle: { subTitle: {
search: false search: false
}, },
content: { content: {
search: false, search: false,
render: (text: React.ReactNode, record: T, index: number) => { render: (text: React.ReactNode, record: T, index: number) => {
let answer = ''; let answer = '';
const answertrue = record?.answertrue?.split(','); const answertrue = record?.answertrue?.split(',');
console.log('answertrue', answertrue) console.log('answertrue', answertrue)
/** 题型 */ /** 题型 */
switch(record?.question_type){ switch (record?.question_type) {
case 0: // 单选 case 0: // 单选
case 1: // 多选 case 1: // 多选
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 = ['A', 'B']?.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)
if(expandedDescRowKeys?.indexOf(record.id) > -1){ if (expandedDescRowKeys?.indexOf(record.id) > -1) {
return ( return (
<Space direction="vertical" style={{borderTop:'solid 1px #f0f0f0', padding:10, margin: '5px -18px 0 -24px', background: '#fdfdfd'}}> <Space direction="vertical" style={{ borderTop: 'solid 1px #f0f0f0', padding: 10, margin: '5px -18px 0 -24px', background: '#fdfdfd' }}>
<Typography> <Typography>
{answer} {answer}
</Typography> </Typography>
<Typography><div dangerouslySetInnerHTML={{__html: parsing.get(record.id)}} /></Typography> <Typography><div dangerouslySetInnerHTML={{ __html: parsing.get(record.id) }} /></Typography>
</Space> </Space>
); );
}else{ } else {
return ( return (
<Space direction="vertical" style={{borderTop:'solid 1px #f0f0f0', padding:10, margin: '5px -18px 0 -24px', background: '#fdfdfd'}}> <Space direction="vertical" style={{ borderTop: 'solid 1px #f0f0f0', padding: 10, margin: '5px -18px 0 -24px', background: '#fdfdfd' }}>
<Typography> <Typography>
{answer} {answer}
</Typography> </Typography>
</Space> </Space>
) )
@ -585,24 +595,24 @@ const QuestionBank = () => {
cardActionProps: 'extra', cardActionProps: 'extra',
render: (text: React.ReactNode, record: T, _index: number) => { render: (text: React.ReactNode, record: T, _index: number) => {
let eye let eye
if(expandedDescRowKeys?.indexOf(record.id) > -1){ if (expandedDescRowKeys?.indexOf(record.id) > -1) {
eye = <><EyeInvisibleOutlined /> </> eye = <><EyeInvisibleOutlined /> </>
}else{ } else {
eye = <><EyeOutlined /> </> eye = <><EyeOutlined /> </>
} }
return( return (
<Row style={{padding:'10px 24px'}}> <Row style={{ padding: '10px 24px' }}>
<Col flex={1} style={{textAlign:'left'}}> <Col flex={1} style={{ textAlign: 'left' }}>
<Space direction="horizontal" size="large"> <Space direction="horizontal" size="large">
<Typography>{record?.create_time}</Typography> <Typography>{record?.create_time}</Typography>
<Typography>{record?.tag_name}</Typography> <Typography>{record?.tag_name}</Typography>
<Typography>{record?.course_name}</Typography> <Typography>{record?.course_name}</Typography>
</Space> </Space>
</Col> </Col>
<Col flex={1} style={{textAlign:'right'}}> <Col flex={1} style={{ textAlign: 'right' }}>
<Space direction="horizontal" size="middle"> <Space direction="horizontal" size="middle">
<a onClick={()=>{ <a onClick={() => {
console.log('record',record) console.log('record', record)
setCurrentRow(record); setCurrentRow(record);
handleUpdateModalVisible(true) handleUpdateModalVisible(true)
return false; return false;
@ -626,15 +636,15 @@ const QuestionBank = () => {
<a <a
key="view" key="view"
onClick={async ()=>{ onClick={async () => {
if(expandedDescRowKeys?.indexOf(record.id) > -1){ if (expandedDescRowKeys?.indexOf(record.id) > -1) {
const descRowKeys = expandedDescRowKeys?.filter((item, idx, self)=>{ const descRowKeys = expandedDescRowKeys?.filter((item, idx, self) => {
console.log('FFFF', item, idx, self); console.log('FFFF', item, idx, self);
return item !== record.id return item !== record.id
}); });
setExpandedDescRowKeys([...descRowKeys]); setExpandedDescRowKeys([...descRowKeys]);
}else{ } else {
const { bean } = await queryQuestionById({id: record.id}) const { bean } = await queryQuestionById({ id: record.id })
parsingMap.set(bean.id, bean.parsing) parsingMap.set(bean.id, bean.parsing)
setParsing(parsingMap); setParsing(parsingMap);
console.log('parsing', parsing); console.log('parsing', parsing);
@ -654,7 +664,7 @@ const QuestionBank = () => {
} }
}, },
/** 搜索定义 */ /** 搜索定义 */
question_type:{ question_type: {
title: '题型', title: '题型',
valueType: 'select', valueType: 'select',
search: true, search: true,
@ -699,8 +709,8 @@ const QuestionBank = () => {
}, },
dependencies: ['tag_ids'], dependencies: ['tag_ids'],
request: async (params) => { request: async (params) => {
const {tag_ids} = params; const { tag_ids } = params;
const { data: Items } = await queryCourseListByTag({tag_ids: tag_ids?.toString()}); const { data: Items } = await queryCourseListByTag({ tag_ids: tag_ids?.toString() });
console.log('queryCourseListByTag...') console.log('queryCourseListByTag...')
const courses = [] const courses = []
for (let i = 0; i < Items?.length; i++) { for (let i = 0; i < Items?.length; i++) {
@ -716,7 +726,7 @@ const QuestionBank = () => {
dataIndex: 'question_stem', dataIndex: 'question_stem',
valueType: 'text', valueType: 'text',
fieldProps: { fieldProps: {
placeholder:'请输入关键字' placeholder: '请输入关键字'
}, },
}, },
create_time: { create_time: {
@ -725,19 +735,19 @@ const QuestionBank = () => {
dataIndex: 'create_time', dataIndex: 'create_time',
valueType: 'dateRange', valueType: 'dateRange',
fieldProps: { fieldProps: {
placeholder:['开始时间','结束时间'] placeholder: ['开始时间', '结束时间']
}, },
}, },
}} }}
/> />
<Modal <Modal
title={`新建${addType?.name }`} title={`新建${addType?.name}`}
// //
width="60%" width="60%"
visible={createModalVisible} visible={createModalVisible}
destroyOnClose destroyOnClose
onCancel={() => { onCancel={() => {
setAddType({name: '', value: ''}); // 还原题型选择 setAddType({ name: '', value: '' }); // 还原题型选择
handleCreateModalVisible(false); handleCreateModalVisible(false);
}} }}
footer={null} footer={null}
@ -748,7 +758,7 @@ const QuestionBank = () => {
layoutType="Form" layoutType="Form"
labelCol={{ span: 8 }} labelCol={{ span: 8 }}
wrapperCol={{ span: 12 }} wrapperCol={{ span: 12 }}
onValuesChange={()=>{ onValuesChange={() => {
//console.log('formRef', formRef.current.getFieldInstance('answertrue')) //console.log('formRef', formRef.current.getFieldInstance('answertrue'))
//console.log('formRef.current', formRef.current.getFieldsValue(['answertrue'])) //console.log('formRef.current', formRef.current.getFieldsValue(['answertrue']))
//console.log('v', value) //console.log('v', value)
@ -756,11 +766,11 @@ const QuestionBank = () => {
const answerTrue = formRef?.current?.getFieldValue('answertrue'); const answerTrue = formRef?.current?.getFieldValue('answertrue');
let fixed_answertrue; let fixed_answertrue;
// 如果正确答案为字符串(单选 / 判断) // 如果正确答案为字符串(单选 / 判断)
if(typeof answerTrue === 'string'){ if (typeof answerTrue === 'string') {
console.log('string.....') console.log('string.....')
fixed_answertrue = labels.indexOf(answerTrue) < (formRef?.current?.getFieldValue('answers')?.length || 0) ? answerTrue : undefined; fixed_answertrue = labels.indexOf(answerTrue) < (formRef?.current?.getFieldValue('answers')?.length || 0) ? answerTrue : undefined;
}else if(answerTrue?.length > 0){ } else if (answerTrue?.length > 0) {
fixed_answertrue = answerTrue?.filter((item, key)=>{ fixed_answertrue = answerTrue?.filter((item, key) => {
return labels.indexOf(item) < (formRef?.current?.getFieldValue('answers')?.length || 0) return labels.indexOf(item) < (formRef?.current?.getFieldValue('answers')?.length || 0)
}) })
} }
@ -768,19 +778,21 @@ const QuestionBank = () => {
/* /*
const */ const */
//console.log('fixed', fixed_answertrue) //console.log('fixed', fixed_answertrue)
formRef?.current?.setFieldsValue({answertrue: fixed_answertrue}) formRef?.current?.setFieldsValue({ answertrue: fixed_answertrue })
}} }}
onFinish={async (values: any) => { onFinish={async (values: any) => {
//console.log('formRef.current', formRef.current.getFieldsValue(['answertrue'])) //console.log('formRef.current', formRef.current.getFieldsValue(['answertrue']))
console.log(values);
return
// 表单处理 // 表单处理
console.log('columns:', columns); console.log('columns:', columns);
console.log('values:', values); console.log('values:', values);
const opts = []; const opts = [];
values?.answers?.forEach((item, key)=>{ values?.answers?.forEach((item, key) => {
// //
const isTrue = (values?.answertrue.toString().indexOf(labels[key]) !== -1) ? 1 : 0; // 判断是否为正确答案 const isTrue = (values?.answertrue.toString().indexOf(labels[key]) !== -1) ? 1 : 0; // 判断是否为正确答案
opts.push({answer:item, is_true:isTrue}) opts.push({ answer: item, is_true: isTrue })
}) })
const success = await handleAdd({ const success = await handleAdd({
...values, ...values,
@ -790,7 +802,7 @@ const QuestionBank = () => {
// subject_id: params?.id || 0, // subject_id: params?.id || 0,
}); });
console.log('123') console.log('123')
if(success){ if (success) {
handleCreateModalVisible(false); handleCreateModalVisible(false);
actionRef.current?.reload(); actionRef.current?.reload();
} }
@ -810,13 +822,13 @@ const QuestionBank = () => {
/> />
</Modal> </Modal>
<Modal <Modal
title={`编辑${addType?.name }`} title={`编辑${addType?.name}`}
// //
width="60%" width="60%"
visible={updateModalVisible} visible={updateModalVisible}
destroyOnClose destroyOnClose
onCancel={() => { onCancel={() => {
setAddType({name: '', value: ''}); // 还原题型选择 setAddType({ name: '', value: '' }); // 还原题型选择
handleUpdateModalVisible(false); handleUpdateModalVisible(false);
}} }}
footer={null} footer={null}
@ -826,26 +838,26 @@ const QuestionBank = () => {
layoutType="Form" layoutType="Form"
labelCol={{ span: 8 }} labelCol={{ span: 8 }}
wrapperCol={{ span: 12 }} wrapperCol={{ span: 12 }}
request={()=>{ request={() => {
// 编辑数据初始化 // 编辑数据初始化
console.log('currentRow##',currentRow) console.log('currentRow##', currentRow)
//answers:currentRow?.answers.map((item)=>(item.answer)) //answers:currentRow?.answers.map((item)=>(item.answer))
const answertrue = currentRow?.answertrue?.split(','); const answertrue = currentRow?.answertrue?.split(',');
console.log('answertrue,,,',answertrue) console.log('answertrue,,,', answertrue)
const answerTrueData = labels?.filter((x, idx, self)=>(`${answertrue[idx]}` === '1')) const answerTrueData = labels?.filter((x, idx, self) => (`${answertrue[idx]}` === '1'))
console.log('$$$', answerTrueData) console.log('$$$', answerTrueData)
const trueData = Number(currentRow?.question_type) === 1 ? answerTrueData : answerTrueData[0] // 处理单选和判断 const trueData = Number(currentRow?.question_type) === 1 ? answerTrueData : answerTrueData[0] // 处理单选和判断
const tag_ids = currentRow?.tag_ids.split(',') const tag_ids = currentRow?.tag_ids.split(',')
return {...currentRow, answers: currentRow?.answers.map((item)=>(item.answer)), answertrue: trueData, tag_ids: tag_ids.map(item=>Number(item)) } return { ...currentRow, answers: currentRow?.answers.map((item) => (item.answer)), answertrue: trueData, tag_ids: tag_ids.map(item => Number(item)) }
}} }}
onFinish={async (values: any) => { onFinish={async (values: any) => {
// 表单处理 // 表单处理
console.log('columns:', columns); console.log('columns:', columns);
console.log('values:', values); console.log('values:', values);
const opts = []; const opts = [];
values?.answers?.forEach((item,key)=>{ values?.answers?.forEach((item, key) => {
const is_true = values?.answertrue.indexOf(labels[key]) >-1 ? 1 : 0; const is_true = values?.answertrue.indexOf(labels[key]) > -1 ? 1 : 0;
opts.push({answer:item, is_true: is_true||0}) // 循环选项 opts.push({ answer: item, is_true: is_true || 0 }) // 循环选项
}) })
@ -858,7 +870,7 @@ const QuestionBank = () => {
//question_type: currentRow?.question_type, // 题型 //question_type: currentRow?.question_type, // 题型
// subject_id: params?.id || 0, // subject_id: params?.id || 0,
}); });
if(success){ if (success) {
handleUpdateModalVisible(false); handleUpdateModalVisible(false);
actionRef.current?.reloadAndRest?.(); actionRef.current?.reloadAndRest?.();
} }

Loading…
Cancel
Save