xialiang 3 years ago
commit 8ba755a8ff

@ -44,7 +44,7 @@ const chapterColumns: ProColumns<TableListItem>[] = [
{ {
title: '课程', title: '课程',
valueType: 'select', valueType: 'select',
dataIndex: 'course_ids', dataIndex: 'course_names',
sorter: false, sorter: false,
hideInTable: false, hideInTable: false,
hideInForm: false, hideInForm: false,

@ -27,11 +27,11 @@ const TrainingRow = () => {
<Col {...topColResponsiveProps}> <Col {...topColResponsiveProps}>
<div className={styles.salesBar}> <div className={styles.salesBar}>
<ChartCard loading={courseBrowseTimesLoading} bordered={false} bodyStyle={{ padding: '20px 24px 8px', marginBottom: '24px' }} title="课程浏览量"> <ChartCard loading={courseBrowseTimesLoading} bordered={false} bodyStyle={{ padding: '20px 24px 8px', marginBottom: '24px' }} title="课程浏览量">
<div className={styles.salesBar}>111 <div className={styles.salesBar}>
<Column <Column
height={300} height={300}
forceFit forceFit
padding={[10, 10, 120, 20]} padding={[30, 30, 120, 60]}
data={courseBrowseTimesData as any} data={courseBrowseTimesData as any}
xField="course_name" xField="course_name"
yField="browse_times" yField="browse_times"
@ -39,7 +39,7 @@ const TrainingRow = () => {
formatter: (name, value: number) => { formatter: (name, value: number) => {
// const {name, value} = args; // const {name, value} = args;
console.log('args', name) console.log('args', name)
return { name: '浏览量', value: value }; return { name: '浏览量', value: name.browse_times };
} }
}} }}
xAxis={{ xAxis={{

@ -60,7 +60,8 @@ const IntroduceRow = () => {
formatter: (name, value: number) => { formatter: (name, value: number) => {
// const {name, value} = args; // const {name, value} = args;
console.log('args', name) console.log('args', name)
return { name: '关联培训数量', value: value }; console.log('value', value)
return { name: '关联培训数量', value: name.train_number};
} }
}} }}
xAxis={{ xAxis={{

@ -12,7 +12,7 @@ import styles from '../style.less';
import { forwardRef, ReactText, useEffect, useImperativeHandle, useRef, useState } from 'react'; import { forwardRef, ReactText, useEffect, useImperativeHandle, useRef, useState } from 'react';
//import { PlusOutlined, DeleteOutlined, DownloadOutlined, UploadOutlined, EditOutlined, EyeOutlined, EyeInvisibleOutlined, DownOutlined } from '@ant-design/icons'; //import { PlusOutlined, DeleteOutlined, DownloadOutlined, UploadOutlined, EditOutlined, EyeOutlined, EyeInvisibleOutlined, DownOutlined } from '@ant-design/icons';
import { useParams, useRequest, history, useRouteMatch } from 'umi'; import { useParams, useRequest, history, useRouteMatch } from 'umi';
import { queryCourseView } from '@/pages/course/option/service'; import { queryCourseView, queryTagList } from '@/pages/course/option/service';
import { queryQuestionList, queryQuestionType } from '@/pages/questionbank/service'; import { queryQuestionList, queryQuestionType } from '@/pages/questionbank/service';
//import ProForm, { ProFormSelect } from '@ant-design/pro-form'; //import ProForm, { ProFormSelect } from '@ant-design/pro-form';
import type { ActionType, ProColumns } from '@ant-design/pro-table'; import type { ActionType, ProColumns } from '@ant-design/pro-table';
@ -78,6 +78,14 @@ const QuestionSelector = (props: any, ref: any) => {
hideInTable: true, hideInTable: true,
hideInForm: true, hideInForm: true,
hideInSearch: false, hideInSearch: false,
request: async () => {
const { data: Items } = await queryTagList({});
const tags = []
for (let i = 0; i < Items.length; i++) {
tags.push({ label: Items[i].tag_name, value: Items[i].tag_id })
}
return tags;
},
}, },
{ {
title: '课程', title: '课程',

@ -111,6 +111,7 @@ const AutoSelector = (props: any, ref: any) => {
headerTitle={false} headerTitle={false}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
key="id"
// value={dataSource} // value={dataSource}
request={async (value) => { request={async (value) => {
const { data } = await queryListChapterBySubject({ const { data } = await queryListChapterBySubject({

@ -5,11 +5,11 @@ import { ModalForm } from '@ant-design/pro-form';
import { ProFormRadio } from '@ant-design/pro-form'; import { ProFormRadio } from '@ant-design/pro-form';
import ProForm, {StepsForm, ProFormText, ProFormDatePicker, ProFormSelect, ProFormTextArea, ProFormCheckbox, ProFormDateRangePicker,} from '@ant-design/pro-form'; import ProForm, {StepsForm, ProFormText, ProFormDatePicker, ProFormSelect, ProFormTextArea, ProFormCheckbox, ProFormDateRangePicker,} from '@ant-design/pro-form';
import ProCard from '@ant-design/pro-card'; import ProCard from '@ant-design/pro-card';
import { Button, Checkbox, Col, Divider, Dropdown, Form, Input, List, Menu, message, Modal, Radio, Row, Space, Table, Typography, Upload, Empty } from 'antd'; import { Button, Checkbox, Col, Divider, Dropdown, Form, Input, List, Menu, message, Modal, Radio, Row, Space, Table, Typography, Upload, Empty, Tooltip, Popconfirm } from 'antd';
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, queryTempQuestionList, saveQuestionTypeScore, queryRulesPaper, updateScore } from '../../service'; import { saveRules, querySubjectList, queryRulesView, queryTempQuestionList, saveQuestionTypeScore, queryRulesPaper, updateScore, delTempQuestion, exchangeSortNum } from '../../service';
import { queryCourseView } from '@/pages/course/option/service'; import { queryCourseView } from '@/pages/course/option/service';
import { queryQuestionList, queryQuestionById, queryQuestionType } from '@/pages/questionbank/service'; import { queryQuestionList, queryQuestionById, queryQuestionType } from '@/pages/questionbank/service';
import { PlusOutlined, DownOutlined, DeleteOutlined, DownloadOutlined, UploadOutlined, EyeInvisibleOutlined, EyeOutlined, EditOutlined, ArrowDownOutlined, ArrowUpOutlined } from '@ant-design/icons'; import { PlusOutlined, DownOutlined, DeleteOutlined, DownloadOutlined, UploadOutlined, EyeInvisibleOutlined, EyeOutlined, EditOutlined, ArrowDownOutlined, ArrowUpOutlined } from '@ant-design/icons';
@ -79,6 +79,62 @@ const handleUpdatePaper = async (rules_id: number, paper_uuid: number, paper_id:
} }
}; };
/**
* ()
*
* @param ids
*/
const handleRemoveTempQuestion = async (paper_uuid: number, question_ids: [{question_id: number}]) => {
const hide = message.loading('正在删除');
console.log('uuidPaper', paper_uuid)
if (!question_ids || !paper_uuid) return true;
try {
const {code, msg} = await delTempQuestion({
paper_uuid: paper_uuid,
question_ids: JSON.stringify(question_ids)
});
hide();
if(code === 2000 ){
message.success('删除成功,即将刷新');
}else{
message.warning(msg);
}
return true;
} catch (error) {
hide();
message.error('删除失败,请重试');
return false;
}
};
/**
*
* @param paper_uuid
* @param question_ids
* @param rules_id
* @returns bool
*/
const handleExchangeSortNum = async (paper_uuid: number, question_ids: string, rules_id: number) => {
const hide = message.loading('正在保存修改');
try {
const data = {
rules_id: Number(rules_id),
paper_uuid: paper_uuid,
question_ids: question_ids
}
const success = await exchangeSortNum(data);
hide();
if(success){
message.success('修改成功');
}
return true;
} catch (error) {
hide();
message.error('修改失败请重试!');
return false;
}
};
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']
// 模拟考试规则维护 // 模拟考试规则维护
export default () => { export default () => {
@ -284,10 +340,11 @@ export default () => {
// value="锦书" // value="锦书"
// disabled // disabled
/> />
{console.log(1111)}
<ProFormSelect <ProFormSelect
width="lg" width="lg"
initialValue={ruleData?.subject_id} initialValue={ruleData?.subject_id}
key='value'
request={async () => { request={async () => {
return querySubjectList().then(({ data }) => { return querySubjectList().then(({ data }) => {
console.log(data, 'querySubjectList') console.log(data, 'querySubjectList')
@ -342,7 +399,7 @@ export default () => {
)} )}
</Col> </Col>
</Row> </Row>
{console.log(2222)}
</StepsForm.StepForm> </StepsForm.StepForm>
<StepsForm.StepForm<{ <StepsForm.StepForm<{
@ -430,8 +487,41 @@ export default () => {
))} ))}
</div> </div>
} }
<div style={{ height: 'auto', backgroundColor: '#f0f0f0', textAlign: 'right', padding: 5, opacity: 0.5 }}> <div style={{ height: 'auto', backgroundColor: '#f0f0f0', textAlign: 'right', padding: 5, opacity: 1 }}>
<Button><ArrowUpOutlined /></Button> <Button><ArrowDownOutlined /></Button> <Button><DeleteOutlined /></Button> <Button disabled={idx === 0} onClick={async ()=>{
const success = await handleExchangeSortNum(uuidPaper,[questions[idx-1]?.id, item?.id].toString(), rulesId)
if (success) {
run({
paper_uuid: uuidPaper,
page_size: 1000,
page_number: 1
}); // 获取当前选题列表
}
}}><ArrowUpOutlined /></Button>
<Button disabled={idx+1 === questions?.length} onClick={async ()=>{
const success = await handleExchangeSortNum(uuidPaper, [ item?.id, questions[idx+1]?.id].toString(), rulesId)
if (success) {
run({
paper_uuid: uuidPaper,
page_size: 1000,
page_number: 1
}); // 获取当前选题列表
}
}}><ArrowDownOutlined /></Button>
<Popconfirm key="popconfirm" title={`确认删除当前项吗?`} okText="是" cancelText="否"
onConfirm={async () => {
const success = await handleRemoveTempQuestion(uuidPaper, [{ question_id: item?.id }]); // 调用批量删除函数如果接口不支持批量需要在service中处理
if (success) {
run({
paper_uuid: uuidPaper,
page_size: 1000,
page_number: 1
}); // 获取当前选题列表
}
}}
>
<Button><DeleteOutlined /></Button>
</Popconfirm>
</div> </div>
</div> </div>
))} ))}
@ -470,12 +560,14 @@ export default () => {
console.log('typeQuestionCount', typeQuestionCount); console.log('typeQuestionCount', typeQuestionCount);
handleScoreModalVisible(true) handleScoreModalVisible(true)
}}></Button> }}></Button>
<Button size="large" type="primary" block onClick={async () => { <Tooltip defaultVisible={false} zIndex={1} title={<span style={{display:'block', width:152}}></span>} placement="bottom" color='#108ee9'>
console.log('uuidPaper::', uuidPaper) <Button size="large" disabled={questions ? false : true} type="primary" block onClick={async () => {
console.log('rules_id::', params?.id) console.log('uuidPaper::', uuidPaper)
const paper_id = paper_id ? paper_id : 0; console.log('rules_id::', params?.id)
await handleUpdatePaper(params?.id || rulesId, uuidPaper, paper_id) const paper_id = paper_id ? paper_id : 0;
}}></Button> await handleUpdatePaper(params?.id || rulesId, uuidPaper, paper_id)
}}></Button>
</Tooltip>
</Space> </Space>
</div> </div>
</Col> </Col>
@ -563,17 +655,16 @@ export default () => {
</ModalForm> </ModalForm>
<ModalForm <ModalForm
title={`系统组卷`} title={`系统组卷`}
//
width="60%" width="60%"
visible={autoModalVisible} visible={autoModalVisible}
onVisibleChange={handleAutoModalVisible} onVisibleChange={handleAutoModalVisible}
onFinish={async () => { onFinish={async () => {
// 需要处理 // 需要处理
//console.log('111') //console.log('111')
//const values = autoRef?.current?.getData() const values = autoRef?.current?.getData()
//console.log('2222') console.log('values ', values )
const values = [{"question_type":0,"chapter_list": [{ "chapter_id":76, "count":1 },{ "chapter_id":77, "count":1 }]}] //const values = [{"question_type":0,"chapter_list": [{ "chapter_id":76, "count":1 },{ "chapter_id":77, "count":1 }]}]
const {code, data: paper, msg} = await autoPaper({rules_id: Number(params?.id), auto_param: JSON.stringify(values)}) //const {code, data: paper, msg} = await autoPaper({rules_id: Number(params?.id), auto_param: JSON.stringify(values)})
//console.log('paper', paper) //console.log('paper', paper)
//setUuidPaper(paper?.paper_uuid) //setUuidPaper(paper?.paper_uuid)
// message.success('提交成功'); // message.success('提交成功');

@ -150,6 +150,7 @@ export async function queryTempQuestionList(
/** 19 组卷,删除临时表数据 */ /** 19 组卷,删除临时表数据 */
export async function delTempQuestion(data: Record<string, any>, options?: Record<string, any>) { export async function delTempQuestion(data: Record<string, any>, options?: Record<string, any>) {
return request<TableListItem>('/dsideal_yy/zygh/training/rules/delTempQuestion', { return request<TableListItem>('/dsideal_yy/zygh/training/rules/delTempQuestion', {
data, data,
method: 'POST', method: 'POST',

@ -36,14 +36,15 @@ let school=0;
const IntroduceRow = ({ loading, visitData }: { loading: boolean; visitData: DataItem[] }) => { const IntroduceRow = ({ loading, visitData }: { loading: boolean; visitData: DataItem[] }) => {
const [provinceId, setProvinceId] = useState(cookie.load('background_province_id') ) const [provinceId, setProvinceId] = useState(cookie.load('background_province_id') )
const [cityList, setCityList] = useState([]); const [cityList, setCityList] = useState([]);
const [areaList, setAreaList] = useState([]); const [areaList, setAreaList] = useState([{id:0,name:'全部'}]);
const [schoolList, setSchoolList] = useState([]); const [schoolList, setSchoolList] = useState([]);
const [area, setArea] = useState(0);
const [options, setOptions] = useState([]); const [options, setOptions] = useState([]);
const [fetching, setFetching] = useState(false); const [fetching, setFetching] = useState(false);
const fetchRef = useRef(0); const fetchRef = useRef(0);
console.log('areaareaarea',area)
const { loading: courseBrowseTimesLoading, data: eduUnitList = null } = useRequest(() => getEduUnitList({ const { loading: courseBrowseTimesLoading, data: eduUnitList = null } = useRequest(() => getEduUnitList({
random_num: 277470, random_num: 277470,
area_id: provinceId, area_id: provinceId,
@ -114,7 +115,10 @@ const IntroduceRow = ({ loading, visitData }: { loading: boolean; visitData: Dat
get_next: 1 get_next: 1
}); });
form.setFieldsValue({ area: 0 }) form.setFieldsValue({ area: 0 })
setAreaList(areaData || []); const list=[{id:0,name:'全部'}];
const areaList=list.concat(areaData);
setAreaList(areaList);
console.log('areaareaListareaListareaListList',areaList)
run() run()
} }
@ -200,7 +204,18 @@ const IntroduceRow = ({ loading, visitData }: { loading: boolean; visitData: Dat
defaultValue={0} defaultValue={0}
onChange={(id) => { onChange={(id) => {
city_id=id; city_id=id;
getAreaData(id) if(id!==0){
getAreaData(id)
}else {
area_id=0;
setArea(0)
setAreaList([{id:0,name:'全部'}])
run();
console.log('area-----',area);
console.log('areaList-----',areaList);
}
}} }}
// defaultValue={provinceId} // defaultValue={provinceId}
@ -215,16 +230,20 @@ const IntroduceRow = ({ loading, visitData }: { loading: boolean; visitData: Dat
</Select> </Select>
</Form.Item> </Form.Item>
<Form.Item name="area" label="区" > <Form.Item name="area" label="区" >
{console.log('')}
<Select <Select
key={area}
style={{ width: 120 }} style={{ width: 120 }}
defaultValue={0} defaultValue={0}
value={area}
onChange={(id) => { onChange={(id) => {
area_id=id; area_id=id;
setArea(id)
handleSearch(''); handleSearch('');
run() run()
}} }}
> >
<Option key={0} value={0}></Option> {/*<Option key={0} value={0}>全部</Option>*/}
{ {
areaList.length!==0? areaList.length!==0?
areaList.map((item)=>{ areaList.map((item)=>{

@ -169,7 +169,7 @@ const QuestionBank = () => {
rules: [ rules: [
{ {
required: true, required: true,
message: '请选择课程', message: '请选择课程',
}, },
] ]
}, },
@ -195,11 +195,14 @@ const QuestionBank = () => {
hideInDescriptions: false, hideInDescriptions: false,
hideInForm: false, hideInForm: false,
hideInSearch: true, hideInSearch: true,
fieldProps: {
maxLength: 50
},
formItemProps: { formItemProps: {
rules: [ rules: [
{ {
required: true, required: true,
message: '请填题干内容', message: '请填题干内容',
}, },
] ]
}, },
@ -337,6 +340,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}}
rowKey='id' rowKey='id'
itemLayout="vertical" itemLayout="vertical"
actionRef={actionRef} actionRef={actionRef}
@ -385,7 +389,8 @@ const QuestionBank = () => {
// handleModalVisible(false); // handleModalVisible(false);
if (actionRef.current) { if (actionRef.current) {
setSelectedRows([]); setSelectedRows([]);
actionRef.current?.reload(); actionRef.current?.reloadAndRest();
} }
} }
}else{ }else{
@ -611,7 +616,7 @@ const QuestionBank = () => {
// handleModalVisible(false); // handleModalVisible(false);
if (actionRef.current) { if (actionRef.current) {
setSelectedRows([]); setSelectedRows([]);
actionRef.current?.reload(); actionRef.current?.reloadAndRest();
} }
} }
}} }}
@ -710,12 +715,18 @@ const QuestionBank = () => {
search: true, search: true,
dataIndex: 'question_stem', dataIndex: 'question_stem',
valueType: 'text', valueType: 'text',
fieldProps: {
placeholder:'请输入关键字'
},
}, },
create_time: { create_time: {
title: '创建时间', title: '创建时间',
search: true, search: true,
dataIndex: 'create_time', dataIndex: 'create_time',
valueType: 'dateRange', valueType: 'dateRange',
fieldProps: {
placeholder:['开始时间','结束时间']
},
}, },
}} }}
/> />
@ -765,8 +776,6 @@ const QuestionBank = () => {
// 表单处理 // 表单处理
console.log('columns:', columns); console.log('columns:', columns);
console.log('values:', values); console.log('values:', values);
return false
const opts = []; const opts = [];
values?.answers?.forEach((item, key)=>{ values?.answers?.forEach((item, key)=>{
// //

Loading…
Cancel
Save