wangxi 3 years ago
commit c52a2fa343

@ -64,4 +64,7 @@ ol {
}
.ant-pro-field-index-column-border{
background-color: #999 !important;
}
main{
min-width: 1024px;
}

@ -275,6 +275,7 @@ const CourseList: React.FC = () => {
message.error('视频编码格式不正确视频采用AVC音频采用AAC')
return false;
}
console.log('filename', file?.name)
// 获取文件名
SetUploadFileName(file?.name);
// 获取最后一个.的位置
@ -609,9 +610,12 @@ const CourseList: React.FC = () => {
//return false;
await handleAdd({
...values,
//course_id: currentRow?.course_id,
attachment_json: `{"img":"", "name": "${values?.attachment_json?.file?.name}", "url": "down/Syzx/${uuid?.substr(0, 2)}/${uuid}.mp4"}`,
attachment_filesize: values?.attachment_json?.file?.size, // 字节
////course_id: currentRow?.course_id,
//attachment_json: `{"img":"", "name": "${values?.attachment_json?.file?.name}", "url": "down/Syzx/${uuid?.substr(0, 2)}/${uuid}.mp4"}`,
//attachment_filesize: values?.attachment_json?.file?.size, // 字节
attachment_json: `{"img":"", "name": "${values?.attachment_json[0]?.name}", "url": "down/Syzx/${uuid?.substr(0, 2)}/${uuid}.mp4"}`,
attachment_filesize: values?.attachment_json[0]?.size, // 字节
});
handleCreateModalVisible(false); // 隐藏创建窗口
actionRef.current?.reloadAndRest?.();

@ -92,8 +92,9 @@ console.log('props---', props)
return (
<>
<Row><Col style={{padding: '10px 0 10px 10px', lineHeight:'32px'}}></Col><Col style={{padding:10}}><Input name='paper_count' defaultValue={1} onChange={(value)=>{
setPaperCount(value)
<Row><Col style={{padding: '10px 0 10px 10px', lineHeight:'32px'}}></Col><Col style={{padding:10}}><Input name='paper_count' defaultValue={1} onChange={(e)=>{
const value = e.currentTarget.value;
setPaperCount(value || 0)
}} /></Col><Col style={{color:'#cccccc'}}><span style={{display: 'block', margin: '15px 0 0 10px'}}></span></Col></Row>
<Row><Col style={{padding:10}}></Col></Row>
<Row style={{padding:5}}>

@ -43,6 +43,7 @@ export default () => {
const [questionTypeValues, setQuestionTypeValues] = useState([]); // 题型数据[{count:0, score:0, score_harf:0}]
const [questionType, setQuestionType] = useState([]); // 题型
const [passScore, setPassScore] = useState(0)
const [rulesId, setRulesId] = useState(0); // 规则id, 保存新建的rules_id
const [subjectId, setSubjectId] = useState<number>(0); // 关联主题id
@ -398,7 +399,7 @@ export default () => {
<Row style={{ marginBottom: 24, marginTop: -7 }}>
<Col offset={8} style={{ color: '#bfbfbf' }}></Col>
</Row>
{/*
<ProFormText name="paper_count" label="试卷数量"
width='lg'
initialValue={ruleData.paper_count}
@ -427,6 +428,7 @@ export default () => {
<Row style={{ marginBottom: 24, marginTop: -7 }}>
<Col offset={8} style={{ color: '#bfbfbf' }}></Col>
</Row>
*/}
{console.log('###', ruleData)}
<ProFormDateRangePicker width='lg' name="dateRange" label="试卷有效期" initialValue={(ruleData?.start_time && ruleData?.end_time) ? [ruleData?.start_time, ruleData?.end_time] : []} rules={[{ required: true, message: '请输试卷有效期' }]} />
<Row style={{ marginBottom: 24, marginTop: -7 }}>
@ -477,7 +479,19 @@ export default () => {
<Button
type="primary"
key="primary"
onClick={() => {
onClick={async () => {
/** 获取试卷 */
const {question_type_score, question_list} = await queryRulesPaper(
{
rules_id: params?.id || rulesId,
page_number: 1,
page_size: 10
}
);
console.log('_data:', question_type_score)
setPassScore(question_list[0]?.pass_score)
//questionTypeValues?.map((item,idx)=>{return {...item, score:values[idx]?.score, score_harf:values[idx]?.score_harf}})
//setQuestionTypeValues() // 更新分值成功后设置组件分值
handleScoreModalVisible(true)
}}
>
@ -495,9 +509,7 @@ export default () => {
page_size: value.pageSize
}
);
const _questionType = [];
const _questionTypeCountData = [];
_data.question_list[0]?.question_type_count.forEach((item) => {
_questionTypeCountData.push(item.count)
@ -515,21 +527,9 @@ export default () => {
_questionType[index] = { ..._questionType[index], count: _questionTypeCountData[index], score: 0, score_harf: 0 }
})
}
// question_type_count
console.log('_questionType 1', _questionType)
setQuestionTypeValues(_questionType)
return {
current: _data?.pageNumber,
data: _data?.question_list,
@ -630,13 +630,19 @@ export default () => {
onFinish={async () => {
const values = setterRef.current?.getData() // 获取题型分值数据
const passSocre = setterRef.current?.getValue() // 获取通过分数线
const sumCore = setterRef.current?.getSum() // 获取总分数
console.log('getSum()',sumCore)
if(passSocre > sumCore){
message.error('通过分数线不能大于总分,请修改通过分数线');
return false;
}
console.log('批量设置分值v::::', values);
const { code, data: paper, msg } = await saveQuestionTypeScore({ rules_id: Number(params?.id || rulesId), type_score: JSON.stringify(values) })
console.log('paper', paper)
// 总分及通过分
let _sumScore = 0;
values?.forEach((item: { score: number; }) => {
@ -644,7 +650,7 @@ export default () => {
_sumScore += item?.score
})
console.log('_sumScore', _sumScore)
// 需要处理
//return false;
console.log('passSocre', passSocre)
//console.log('sumScore',sumScore)
const { success } = await updateScore({ rules_id: Number(params?.id || rulesId), pass_socre: passSocre, sum_score: _sumScore })
@ -656,12 +662,11 @@ export default () => {
return true;
}}
>
<ScoreSetter ref={setterRef} questionTypeValues={questionTypeValues || false} />
<ScoreSetter ref={setterRef} questionTypeValues={questionTypeValues || false} passScore={passScore} />
</ModalForm>
<ModalForm
// title={`试卷详情`}
title={ruleData?.rules_name}
//
width="80%"
visible={paperModalVisible}
onVisibleChange={handlePaperModalVisible}

@ -1,24 +1,14 @@
/** 模拟考试 | 资质考试选题 */
//import { AlignLeftOutlined, PlusOutlined } from '@ant-design/icons';
import { Button, InputNumber, message, Space, Form, Input} from 'antd';
//import { FooterToolbar, PageContainer } from '@ant-design/pro-layout';
//import { useRequest } from 'umi';
//import { queryFakeList } from './service';
//import type { CardListItemDataType } from './data';
import styles from '../style.less';
//import SubMenu from 'antd/lib/menu/SubMenu';
//import ProCard from '@ant-design/pro-card';
//import ProList from '@ant-design/pro-list';
import { forwardRef, ReactText, useEffect, useImperativeHandle, useRef, useState } from 'react';
//import { PlusOutlined, DeleteOutlined, DownloadOutlined, UploadOutlined, EditOutlined, EyeOutlined, EyeInvisibleOutlined, DownOutlined } from '@ant-design/icons';
import { useParams, useRequest, history, useRouteMatch } from 'umi';
import { queryCourseView } from '@/pages/course/option/service';
import { queryQuestionList, queryQuestionType } from '@/pages/questionbank/service';
import { InputNumber, Space, Form, Input} from 'antd';
//import styles from '../style.less';
import { forwardRef, useImperativeHandle, useRef, useState } from 'react';
//import { useParams, useRequest, history, useRouteMatch } from 'umi';
//import { queryCourseView } from '@/pages/course/option/service';
import { queryQuestionType } from '@/pages/questionbank/service';
//import ProForm, { ProFormSelect } from '@ant-design/pro-form';
import { ActionType, EditableProTable, ProColumns } from '@ant-design/pro-table';
//import { ActionType, EditableProTable, ProColumns } from '@ant-design/pro-table';
import ProTable from '@ant-design/pro-table';
import ProForm from '@ant-design/pro-form';
//import ProForm from '@ant-design/pro-form';
export type TableListItem = {
id: string;
@ -33,31 +23,16 @@ export type TableListItem = {
};
// React.forwardRef 接受渲染函数作为参数。React 将使用 props 和 ref 作为参数来调用此函数。此函数应返回 React 节点。
const ScoreSetter = (props: any, ref: any) => {
const {questionTypeValues } = props
console.log('questionTypeValues:::', questionTypeValues)
//console.log('passScoreValue:::', passScoreValue)
const match = useRouteMatch();
console.log('match', match);
const ScoreSetter = (props: any, ref: any) => {
const {questionTypeValues, passScore: passScoreValue } = props
const [typeScore, setTypeScore] = useState([]) ; // 题型分数数组 [{"question_type": "0","score": "3","score_harf": "0"},]
const [flag, setFlag] = useState<any>([]) // 分数变更标记
const [typeScore, setTypeScore] = useState(questionTypeValues.map((item: { code: number; score: number; score_harf: number; })=>({question_type:item.code, score: item.score, score_harf: item.score_harf}))) ; // 题型分数数组 [{"question_type": "0","score": "3","score_harf": "0"},]
//const type = history.location.pathname === '/questionbank/attestation' ? 1 : 0 ; // 题库类型
const [dataSource, setDataSource] = useState([]);
//const [selectedRowsState, setSelectedRows] = useState<API.RuleListItem[]>([]);
//const [addType, setAddType] = useState({name: '', value: 0});
const [sumScore, setSumScore] = useState(0);
const [passScore, setPassScore] = useState(0); // 设置通过分数线
//let sumScore = 0 // 总分
const formRef = useRef();
//const [sumScore, setSumScore] = useState();
const [passScore, setPassScore] = useState(passScoreValue); // 设置通过分数线
//const actionRef = useRef<ActionType>();
const formRef = useRef<any>();
/** 列表项定义 */
const columns: any = [
@ -72,7 +47,7 @@ const ScoreSetter = (props: any, ref: any) => {
dataIndex: 'score',
key: 'code',
width: 400,
render: (text, record, index) =>
render: (_text: any, record: { code: number; }, index: string | number) =>
<Space direction='horizontal'>
<span></span>
<Form.Item style={{margin:0}} name={`score[${index}]`}><Input
@ -86,39 +61,39 @@ const ScoreSetter = (props: any, ref: any) => {
e.currentTarget.value = val.slice(0,3)
}
}}
defaultValue={questionTypeValues ? questionTypeValues[index]?.score : 0}
defaultValue={questionTypeValues ? questionTypeValues[index]?.score || 0 : 0}
placeholder="请输入"
size="small"
onChange={(e)=>{
const value = e.currentTarget.value
console.log('row', index)
console.log('v1',value)
const _data = [];
console.log('typeScore1',typeScore)
//const _sumItems = [];
typeScore?.forEach((item, key)=>{
_data.push({...item, score: ((index === key) ? Number(value) : Number(item?.score))}) // 题型分数
//_sumItems.push((index === key) ? (value * questionTypeValues[index].count) : sumScoreItems[index]) // 题型总分
const value = e.currentTarget.value;
const scoreData = typeScore?.map((item: { score: any; }, key: string | number)=>{
return {...item, score: ((index === key) ? Number(value) : Number(item?.score))} // 题型分数
})
setTypeScore(_data)
//setSumScoreItems(_sumItems)
//console.log('setSumScoreItems', sumScoreItems)
// 标记重新设置项(序号)
if(flag.indexOf(index) === -1){
setFlag([...flag, index])
}
setTypeScore(scoreData)
}}/></Form.Item>
<span></span>
{ (record?.code === 1) &&
<>
<span>:</span>
<Form.Item style={{margin:0}} name={`score_harf`}><InputNumber min={0} max={99} maxLength={2} type="number" defaultValue={questionTypeValues ? questionTypeValues[index]?.score_harf : 0} placeholder="请输入" size="small" name='score_harf' onChange={(value)=>{
//
const _data = [];
console.log('typeScore',typeScore)
typeScore?.forEach((item, key)=>{
_data.push({...item, score_harf: ((index === key) ? value : item?.score_harf)})
})
setTypeScore(_data)
}} /></Form.Item>
<span></span>
<span>:</span>
<Form.Item style={{margin:0}} name={`score_harf`}
rules={[
/*
{
required: true,
message: '请输入分值!',
},*/
]}
><InputNumber min={0} max={99} maxLength={2} type="number" defaultValue={questionTypeValues ? questionTypeValues[index]?.score_harf || 0 : 0} placeholder="请输入" size="small" name='score_harf' onChange={(value)=>{
const harf = typeScore?.map((item: { score_harf: any; }, key: number)=>{
return {...item, score_harf: ((index === key) ? value : item?.score_harf)}
})
setTypeScore(harf)
}} /></Form.Item>
<span></span>
</>
}
</Space>,
@ -127,117 +102,103 @@ const ScoreSetter = (props: any, ref: any) => {
title: '题目数量',
dataIndex: 'count',
width: 80,
render: (text, _, index) => <>{questionTypeValues ? questionTypeValues[index]?.count : '0'}</>,
/*
editable: (text, record, index) => {
return true;
},*/
render: (_text: any, _: any, index: number) => <>{questionTypeValues ? questionTypeValues[index]?.count || 0 : '0'}</>,
},
{
title: '总分值',
dataIndex: 'score_sum',
//key: 'age',
width: 80,
render: (text, _, index) => {
{console.log('typeScore---', typeScore)}
render: (_text: any, _: any, index: number) => {
return <>
{(typeScore && questionTypeValues) ? ((typeScore[index]?.score > 0 ? typeScore[index]?.score : 0) * questionTypeValues[index]?.count).toFixed(1) : '0'}
{flag?.indexOf(index) === -1 ?
(questionTypeValues[index]?.score || 0) * (questionTypeValues[index]?.count || 0) :
(typeScore && questionTypeValues) ? ((typeScore[index]?.score > 0 ? typeScore[index]?.score : 0) * (questionTypeValues[index]?.count || 0)).toFixed(1) : '0'
}
</>
},
}
];
//const labels = ['A','B','C','D','E']
/** 获取总题数 */
let sumQuestion = 0;
questionTypeValues?.forEach((item) => {
questionTypeValues?.forEach((item: any) => {
sumQuestion += item.count;
});
// 获取题型
const { data } = useRequest(() => {
return queryQuestionType();
},{
formatResult: (result) => {
const _data = [];
if(result.list){
result.list.forEach((item)=>{
_data.push({
name: item?.name,
code: item?.code,
count: 0,
score_sum: 0,
harf: 0
})
})
}
console.log('_data',_data)
return _data;
}
});
useEffect(() => {
setDataSource(data);
console.log('data', data)
const _typeScore = [];
data?.forEach((item)=>{
_typeScore.push({question_type: item?.code, score: item?.count, score_harf: 0})
})
setTypeScore(_typeScore) // 初始值
//return ()=>{}
}, [data]);
/** 计算总分 */
useEffect(() => {
console.log('typeScore', typeScore)
let _sum = 0;
typeScore?.forEach((item, index)=>{
_sum += (item.score > 0 ? item.score : 0 ) * questionTypeValues[index]?.count;
})
setSumScore(_sum)
//return ()=>{}
}, [typeScore]);
// 暴露组件的方法 接受外部获取的ref
useImperativeHandle(ref, () => ({
// 构造ref的获取数据方法
getData: () => {
return typeScore;
getData: () => {
return typeScore?.map((item: any, idx: number)=>{
return {
...item,
count: questionTypeValues[idx]?.count,
sum: item?.score * questionTypeValues[idx]?.count,
}
})
},
getValue: () => {
return passScore;
return passScore
},
getSum: () => {
return sumScore;
return typeScore?.map((item: any, key: number)=>{return item?.score * questionTypeValues[key].count})?.reduce((total: number, item: number)=>(total + item)) || 0 ;
},
}));
return (
<Form
ref={formRef}
>
<EditableProTable
title={()=>{
return <Space size="large"><span> {sumQuestion} ,</span><span> {sumScore} </span> 线
<Form.Item style={{margin:0}} name='pass_socre' initialValue={0}><InputNumber min={0} onChange={(value)=>{
setPassScore(value)
}} /></Form.Item>
</Space>}}
//formMapRef={formMapRef}
//rowKey={'code'}
bordered
cardProps={{bodyStyle:{padding:0}}}
recordCreatorProps={false}
search={false}
options={false}
value={dataSource}
columns={columns}
/>
</Form>
<>
<Form
ref={formRef}
>
<ProTable
title={()=>{
return <Space size="large"><span> {sumQuestion || 0} ,</span><span> {
typeScore?.length > 0 &&
typeScore?.map((item: any, key: number)=>{return item?.score * questionTypeValues[key].count})?.reduce((total: number, item: number)=>(total + item)) || 0
} </span> 线
<Form.Item style={{margin:0}} name='pass_socre' initialValue={passScore || 0}><InputNumber min={0} onChange={(value)=>{
setPassScore(value)
}} /></Form.Item>
</Space>}}
//formMapRef={formMapRef}
rowKey={'code'}
request={async ()=>{
console.log('questionTypeValues1111', questionTypeValues)
const result = await queryQuestionType() // 从字典获取题型数据 [{code: 0, name:"单选题"},]
setTypeScore(questionTypeValues?.map((item: { score: any; score_harf: any; }, key: number)=>{
return {question_type: result.list[key]?.code, score: item?.score, score_harf: (item?.score_harf || 0)}
}))
return {data:questionTypeValues?.map((item: any, key: number)=>({
...item,
code: result.list[key]?.code,
question_type: result.list[key]?.code,
name: result.list[key]?.name,
count: result.list[key]?.count
}))}
/*
return {data:result?.list?.map((item: any)=>({
...item,
code: item?.code,
question_type: item?.code,
name: item?.name,
count: item?.count || 0
}))}
*/
}}
bordered
cardProps={{bodyStyle:{padding:0}}}
search={false}
options={false}
columns={columns}
pagination={false}
/>
</Form>
</>
);
};
// forwardRef这个组件能够将其接受的 ref 属性转发到其组件树下

@ -195,7 +195,7 @@ export default () => {
/** 组卷,查询试题临时表(当前选题列表) */
const { data: questions, run } = useRequest(async (params) => {
console.log('questions', questions)
console.log('questions::::', questions)
const _data = await queryTempQuestionList(params);
return _data;
}, {
@ -209,7 +209,7 @@ export default () => {
useEffect(() => {
const _data = [0, 0, 0]; // 当前仅支持 单选 / 多选 / 判断 的顺序
console.log('questions-info', questions)
questions?.forEach((item) => {
questions?.forEach((item: { question_type: any; }) => {
_data[Number(item?.question_type)] += 1
})
@ -236,7 +236,7 @@ export default () => {
}
});
//
// 获取组卷详情
const { data: paperData, run: runPaper } = useRequest(async (params) => {
console.log('paperData', paperData)
/**
@ -276,7 +276,7 @@ export default () => {
});
ruleData = data
}
console.log(ruleData, 'ruleData');
console.log('ruleData', ruleData);
return (
<PageContainer content={''} extraContent={''}>
@ -315,6 +315,11 @@ export default () => {
rules_type: 0,
});
// 获取 paper_uuid
const pager = await queryRulesPaper({ rules_id: params?.id || rulesId });
setUuidPaper(pager?.question_list[0]?.paper_uuid)
console.log('###paper_uuid==', pager?.question_list[0]?.paper_uuid)
setRulesId(data?.rules_id) // 保存规则id
//run({paper_uuid:1}); // 获取当前选题列表
// console.log('模拟考试基本信息', fileds)
@ -322,11 +327,27 @@ export default () => {
setRulesName(fileds?.rules_name) // 设置模拟考试规则名称
console.log('fileds', fileds)
console.log('formRef', formRef.current?.getFieldValue(''))
// await waitTime(2000);
setCurrentStep(1) // 设置步骤号
runScore({rules_id: data?.rules_id}) //
return true;
// 如果有保存的试卷,显示当前选题列表数据
if(pager?.question_list[0]?.paper_uuid){
console.log('has......')
// 获取数据
run({
paper_uuid: pager?.question_list[0]?.paper_uuid,
page_size: 1000,
page_number: 1
});
}else{
console.log('no has ....')
}
//runPaper({ rules_id: params?.id || rulesId }) // 获取组卷详情
console.log('###')
console.log('uuidPaper', uuidPaper)
return true;
}}
>
<Row gutter={24}>
@ -445,15 +466,13 @@ export default () => {
message.error(msg);
return false;
}
// question 请选择试题 请选择试题
//
runPaper({ rules_id: params?.id || rulesId })
return true;
}}
>
<div style={{ margin: '0' }}>
{/*uuidPaper*/}
<Typography style={{ padding: 24, fontSize: 24, textAlign: 'center' }}>{rulesName}</Typography>
{/** 一旦录入另一项将禁用,清空组卷后可选另一项 */}
<Row>
@ -532,12 +551,14 @@ export default () => {
<div style={{ height: 'auto', backgroundColor: '#f0f0f0', textAlign: 'right', padding: 5, opacity: 1 }}>
<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 ()=>{
@ -579,27 +600,51 @@ export default () => {
<div style={{ background: '#ffffff', padding: 24 }}>
<Space direction="vertical" style={{ width: '100%' }}>
<strong></strong>
<Typography> {questions?.length} {paperInfo?.sum_score || '-'}{ console.log('scoreData', scoreData)} </Typography>
<Typography> {questions?.length} {/*paperInfo?.sum_score || 0*/} {
questionType?.length > 0 ?
questionType?.map((item) => {
return typeQuestionCount[Number(item.code)] * scoreData?.filter(val=>(val.question_type === Number(item?.code)))[0]?.score || 0;
}).reduce((total, item)=>(total + item)) : 0
} </Typography>
<Divider style={{ margin: '6px 0', opacity: 0.5 }} />
<Space direction="vertical">
{questionType.map((item) => {
return <Typography>{item?.name} {typeQuestionCount[Number(item.code)]} {typeQuestionCount[Number(item.code)] * scoreData?.filter(val=>(val.question_type === Number(item?.code)))[0]?.score} </Typography>
const type_sum = typeQuestionCount[Number(item.code)] * scoreData?.filter(val=>(val.question_type === Number(item?.code)))[0]?.score || 0;
return <Typography>{item?.name} {typeQuestionCount[Number(item.code)]} {type_sum} </Typography>
}
)}
</Space>
<Divider style={{ margin: '6px 0', opacity: 0.5 }} />
<Button size="large" block onClick={() => {
<Button size="large" block onClick={async () => {
const {question_type_score} = await queryQuestionTypeScore({rules_id: (params?.id || rulesId)})
console.log('q:::',question_type_score)
console.log('w:::',question_type_score?.map((item,key)=>({count: typeQuestionCount[key], ...item})))
setQuestionTypeValues(question_type_score?.map((item,key)=>({count: typeQuestionCount[key], ...item})))
/**
*
* [{count: 0, score: 0, score_harf: 0},{count: 0, score: 0, score_harf: 0},{count: 0, score: 0, score_harf: 0}]
*/
//
// 初始值
/*
const _data = []
typeQuestionCount?.forEach((item) => {
_data.push({ count: item, score: 0, score_harf: 0 })
})
setQuestionTypeValues(_data)
console.log('typeQuestionCount', typeQuestionCount);
*/
/** */
//const questionTypeScore = await queryQuestionTypeScore(params?.id || rulesId)
//console.log('q::', questionTypeScore)
console.log('typeQuestionCount---------------', typeQuestionCount);
setPassScore(ruleData?.pass_score)
handleScoreModalVisible(true)
}}></Button>
<Tooltip defaultVisible={false} zIndex={1} title={<span style={{display:'block', width:152}}></span>} placement="bottom" color='#108ee9'>
@ -733,9 +778,15 @@ export default () => {
const passSocre = setterRef.current?.getValue() // 获取通过分数线
const sumCore = setterRef.current?.getSum() // 获取总分
if(passSocre > sumCore){
message.error('通过分数线不能大于总分,请修改通过分数线');
message.error('通过分数线不能大于总分,请修改通过分数线');
return false;
}
if(values.filter(item=>(item?.score_harf > item?.score)).length > 0){
message.error('“错选漏选分数”不能大于该题型分,请修改“通错选漏选得分”');
return false;
}
console.log('批量设置分值v::::2', values);
// 题型分数
const { code, data: paper, msg } = await saveQuestionTypeScore({ rules_id: Number(params?.id || rulesId), type_score: JSON.stringify(values) })
@ -749,7 +800,7 @@ export default () => {
return true;
}}
>
<ScoreSetter ref={setterRef} questionTypeValues={questionTypeValues || false} />
<ScoreSetter ref={setterRef} questionTypeValues={questionTypeValues.length > 0 ? questionTypeValues : questionType?.map((item,key)=>({...item, count: typeQuestionCount[key]}))} passScore={passScore} />
</ModalForm>
</PageContainer>

@ -62,7 +62,6 @@ const IntroduceRow = ({ loading, visitData }: { loading: boolean; visitData: Dat
}
});
const {data: examinationData, run } = useRequest(() => {
return getExaminationStatistics({
bureau_id:typeof (school)===number?school:0,

@ -34,6 +34,7 @@ console.log('first');
* @param fields
*/
const handleAdd = async (fields: TableListItem) => {
console.log('handleadd...')
const hide = message.loading('正在添加');
try {
await saveQuestion({ ...fields });
@ -292,7 +293,7 @@ const QuestionBank = () => {
hideInForm: false,
hideInSearch: true,
formItemProps: {
rules: [
rules: [
{
required: true,
message: '请填写试题解析',
@ -784,8 +785,6 @@ const QuestionBank = () => {
onFinish={async (values: any) => {
//console.log('formRef.current', formRef.current.getFieldsValue(['answertrue']))
console.log(values);
return
// 表单处理
console.log('columns:', columns);
console.log('values:', values);

@ -1,6 +1,6 @@
import { PlusOutlined } from '@ant-design/icons';
import { Button, message, Input, Drawer, Row, Col, Space, Modal, Popconfirm } from 'antd';
import React, { useState, useRef } from 'react';
import React, { useState, useRef, Children } from 'react';
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout';
import type { ProColumns, ActionType } from '@ant-design/pro-table';
import ProTable from '@ant-design/pro-table';
@ -8,11 +8,12 @@ import { BetaSchemaForm, ModalForm, ProFormText, ProFormTextArea } from '@ant-de
import type { ProDescriptionsItemProps } from '@ant-design/pro-descriptions';
import ProDescriptions from '@ant-design/pro-descriptions';
import type { FormValueType } from './components/UpdateForm';
import UpdateForm from './components/UpdateForm';
import { queryTrainList, saveTrain, removeTrain, queryOrgTree, queryValueByKey, querySubjectList, querySubjectView } from './service';
//import UpdateForm from './components/UpdateForm';
import { queryTrainList, saveTrain, removeTrain, queryOrgTree, queryValueByKey, querySubjectList, querySubjectView, getAsyncOrgTree, getEduUnitList } from './service';
import type { TableListItem, TableListPagination } from './data';
import { useRequest } from 'umi';
import cookie from 'react-cookies';
import Item from 'antd/lib/list/Item';
/**
*
*
@ -106,11 +107,12 @@ const getJsonTree = (data: [], pId: number) => {
//console.log('f')
//console.log('node?.pId',node?.pId)
//console.log('pId',pId)
if (node?.pId === Number(pId)) {
if (Number(node?.pId) === Number(pId)) {
console.log('if')
const treeNode: children = {};
treeNode.value = node?.id;
treeNode.label = node?.name;
treeNode.name = node?.name;
treeNode.children = node?.children;
//treeNode.url = node.url;
//treeNode.icon = node.icon;
@ -124,6 +126,8 @@ const getJsonTree = (data: [], pId: number) => {
const TableList: React.FC = () => {
const provinceId = cookie.load('background_province_id') // 获取省份id
const { data, loading } = useRequest(() => {
return queryValueByKey({});
});
@ -170,10 +174,18 @@ const TableList: React.FC = () => {
},
{
title: '培训对象',
valueType: 'select',
valueType: 'treeSelect',
hideInSearch: true,
fieldProps: {
mode: "multiple"
//mode: "multiple",
multiple: true,
treeNodeFilterProp: 'name',
labelInValue: true,
fieldNames: {
label: 'name',
key: 'id',
value: 'id'
},
},
formItemProps: {
rules: [
@ -185,6 +197,7 @@ const TableList: React.FC = () => {
},
dataIndex: 'org_names',
request: async () => {
/*
const Value = await queryValueByKey({});
const orgId = Value['common.org.id'] ? Value['common.org.id'] : 0; // 平台全局设置
const tree = await queryOrgTree({
@ -192,10 +205,52 @@ const TableList: React.FC = () => {
org_type: 2,
//school_type: 1,
})
setOrgTree(tree.table_List)
//setOrgTree(tree.table_List)
console.log('orgId', orgId)
console.log('tree.table_List', tree.table_List)
return getJsonTree(tree.table_List, orgId)
return getJsonTree(tree.table_List, orgId)
*/
let treeData = []
// 获取省级以下的全部机构单位
const {table_List} = await getEduUnitList({
area_id: provinceId,
edu_type: -1,
org_type: 2,
pageNumber: 1,
pageSize: 10000,
school_type: -1,
})
// 格式化机构单位数据
const unitData = table_List?.map(item=>{
return {pId: item?.AREA_ID, name:item?.ORG_NAME, id: item?.ORG_ID}
})
console.log('unit:', unitData)
// 获取市
const cityData = await getAsyncOrgTree({
org_id: provinceId,
org_type: 1,
get_next: 1
});
const areaData = []
//const areaIds = []; // 区域Id数组用于过滤接口返回的非区下单位的垃圾数据
for(let i=0; i< cityData?.length; i++){
const _areaData = await getAsyncOrgTree({
org_id: cityData[i]?.id,
org_type: 2,
get_next: 1
});
treeData.push({name:cityData[i]?.name, id:cityData[i]?.id,
children: _areaData?.map(item=>({
pId: Number(item?.pId),
name: item?.name,
id: Number(item?.id),
children: unitData?.filter(unit=>(Number(unit?.pId) === Number(item?.id)))
}))
})
}
console.log('tree',treeData)
return treeData
},
sorter: false,
hideInForm: false,
@ -278,7 +333,6 @@ const TableList: React.FC = () => {
dataIndex: 'option',
valueType: 'option',
render: (_, record) => [
<a
key="update"
onClick={() => {
@ -288,9 +342,6 @@ const TableList: React.FC = () => {
>
</a>,
<Popconfirm key="popconfirm" title={`确认删除当前项吗?`} okText="是" cancelText="否"
onConfirm={async () => {
handleRemove([{ key: record?.train_id }]); // 调用批量删除函数如果接口不支持批量需要在service中处理
@ -300,8 +351,6 @@ const TableList: React.FC = () => {
>
<a key="remove"></a>
</Popconfirm>
],
},
];
@ -347,10 +396,7 @@ const TableList: React.FC = () => {
}
// delete value.date_time
console.log('search', value);
const _data = await queryTrainList(value);
return {
current: _data?.page_number,
data: _data?.data?.list,
@ -414,20 +460,14 @@ const TableList: React.FC = () => {
// 表单处理
//console.log('columns:', columns);
console.log('values1:', values, orgTree);
const tree = orgTree.filter((item, idx, self) => {
return (values.org_names.indexOf(item.id) !== -1)
});
tree.map((e, i) => {
tree[i].org_id = e.id
tree[i].org_name = e.name
delete tree[i].id
delete tree[i].name
delete tree[i].pId
const tree = []
values.org_names.map((e) => {
tree.push({
org_type: 2,
org_id: e.value,
org_name: e.label
})
})
console.log(321);
console.log(tree, 'tree');
const _data = {
...values,
end_time: values.date_time[1],
@ -482,10 +522,7 @@ const TableList: React.FC = () => {
labelCol={{ span: 8 }}
wrapperCol={{ span: 12 }}
request={async () => {
const { data } = await querySubjectView({ train_id: currentRow?.train_id });
data.date_time = [currentRow.start_time, currentRow.end_time]
data.org_names = []
data.target_list.map((e) => {
@ -497,57 +534,24 @@ const TableList: React.FC = () => {
})
console.log("edit", data);
return data
}}
onFinish={async (values: any) => {
// 表单处理
//console.log('columns:', columns);
console.log('values1:', values, values.org_names.value);
//return false;
// values.attachment_json.response.file.response.url
// 处理机构数据。直接编辑与回显结构不够
let tree = []
if (typeof values.org_names[0] === 'number') {
// tree = values.org_names
console.log('true values.org_names', tree, values)
tree = orgTree?.filter((item, idx, self) => {
return (values?.org_names?.indexOf(item?.id) !== -1)
});
console.log("tree,1111", tree);
tree.map((e, i) => {
tree[i].org_id = e.id
tree[i].org_name = e.name
delete tree[i].id
delete tree[i].name
delete tree[i].pId
})
} else {
values.org_names.map((e) => {
tree.push({
org_type: 2,
org_id: e.value,
org_name: e.label
})
const tree = []
values.org_names.map((e) => {
tree.push({
org_type: 2,
org_id: e.value,
org_name: e.label
})
}
console.log(321);
console.log(tree, 'tree');
})
const _data = {
...values,
end_time: values.date_time[1],
start_time: values.date_time[0],
target_list_json: JSON.stringify(tree),
@ -555,20 +559,16 @@ const TableList: React.FC = () => {
}
delete _data.date_time
delete _data.org_names
// delete params.course_time
// delete params.examination_time
console.log('_data', _data);
const res = await saveTrain(_data);
// console.log(res, 'ressss');
if (res.code === 2000) {
handleUpdateModalVisible(false);
actionRef.current?.reloadAndRest?.();
} else {
message.error(res.msg);
}
}}
submitter={{
render: (props, doms) => (

@ -109,3 +109,48 @@ export async function querySubjectView(params: {
});
}
/**
*
* http://10.10.14.252:8080/workspace/myWorkspace.do?projectId=382#6426
* @param params
* @returns
*/
export async function getAsyncOrgTree(params: {
page_size: number;
//count: number;
}): Promise<{ data: { list: CardListItemDataType[] } }> {
return request('/dsideal_yy/org/getAsyncOrgTree', {
params,
});
}
/**
*
* http://10.10.14.252:8080/workspace/myWorkspace.do?projectId=382#6426
* @param params
* @returns
*/
export async function getOrgList(params: {
org_id: number;
org_type: number;
//count: number;
}): Promise<{ data: { list: CardListItemDataType[] } }> {
return request('/dsideal_yy/intellioa/thirdlib/get_org_list', {
params,
});
}
/**
*
* /dsideal_yy/ypt/sys/org/getEduUnitList
* @param params
* @returns
*/
export async function getEduUnitList(params: {
page_size: number;
//count: number;
}): Promise<{ data: { list: CardListItemDataType[] } }> {
return request('/dsideal_yy/ypt/sys/org/getEduUnitList', {
params,
});
}
Loading…
Cancel
Save