This commit is contained in:
parent
6907b6de7e
commit
5a96dd1c15
|
@ -1,44 +0,0 @@
|
|||
import './trainmanage.css'
|
||||
import { Link } from 'react-router-dom';
|
||||
// import React, { useEffect, useState } from 'react';
|
||||
// import axios from 'axios';
|
||||
|
||||
|
||||
function TrainManage(){
|
||||
const teacher_ID=localStorage.getItem('islogin')
|
||||
if(teacher_ID==null){
|
||||
alert('登录过期,请重新登录')
|
||||
window.location.href='http://36.138.114.105:30294/'
|
||||
}
|
||||
return(
|
||||
<div className='body-trainmanage'>
|
||||
<p>已批改试卷</p>
|
||||
<div className='line'></div>
|
||||
<div className='train-list-trainmanage'>
|
||||
<ul className='ul1-trainmanage'>
|
||||
<li>
|
||||
<span>111</span>
|
||||
<p>关闭时间:2024-11-5</p>
|
||||
</li>
|
||||
<li>
|
||||
<span>333</span>
|
||||
<p>关闭时间:2024-11-5</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul className='ul2-trainmanage'>
|
||||
<li>
|
||||
<span>222</span>
|
||||
<p>关闭时间:2024-11-5</p>
|
||||
</li>
|
||||
<li>
|
||||
<span>444</span>
|
||||
<p>关闭时间:2024-11-5</p>
|
||||
</li>
|
||||
</ul>
|
||||
<Link to='/teacher/sendtest' className='sendtestpage'>前往发布试卷</Link>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default TrainManage
|
|
@ -0,0 +1,187 @@
|
|||
import { Link } from 'react-router-dom';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import axios from 'axios';
|
||||
// import { useParams } from 'react-router-dom';
|
||||
import './ManageTest.css'
|
||||
|
||||
function TeacherPage() {
|
||||
|
||||
const teacher_ID = localStorage.getItem('islogin')
|
||||
const [classData, setClassData] = useState({});
|
||||
const [classtest,setClassTest]=useState()
|
||||
const [defaultclass,setDefaultClass]=useState()
|
||||
const [selectedValue, setSelectedValue] = useState('');
|
||||
const [isChecked,setisChecked]=useState(false)
|
||||
const [isDetailedBoxVisible, setIsDetailedBoxVisible] = useState(false);
|
||||
|
||||
|
||||
|
||||
const select_class = async () => {
|
||||
try {
|
||||
const select_class_src = await axios.post('/api/teacher/select_class',{
|
||||
teacher_ID
|
||||
});
|
||||
setClassData(select_class_src.data['Class']);
|
||||
setDefaultClass(select_class_src.data['default'])
|
||||
const list = Object.keys(select_class_src.data['Class'])
|
||||
setSelectedValue(list[0])
|
||||
setisChecked(true)
|
||||
} catch (error) {
|
||||
alert('获取所有班级出错')
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if(!isChecked){
|
||||
select_class();
|
||||
}
|
||||
}, []);
|
||||
//选中当前班级
|
||||
|
||||
const handleChange = (event) => {
|
||||
setSelectedValue(event.target.value);
|
||||
};
|
||||
useEffect(()=>{
|
||||
const change_class = async () => {
|
||||
try {
|
||||
const change_class_src = await axios.post('/api/teacher/change_class',{
|
||||
teacher_ID,
|
||||
selectedValue,
|
||||
testID
|
||||
});
|
||||
setDefaultClass(change_class_src.data['default'])
|
||||
} catch (error) {
|
||||
alert('获取默认班级出错')
|
||||
}
|
||||
}
|
||||
if(isChecked){
|
||||
change_class()
|
||||
}
|
||||
// 更换列表
|
||||
},[selectedValue])
|
||||
|
||||
const [testID,settestID]=useState('')
|
||||
|
||||
const click=()=>{
|
||||
console.log(isDetailedBoxVisible);
|
||||
console.log(detaileddata);
|
||||
}
|
||||
|
||||
// 点击记录时的详细信息
|
||||
const [detaileddata,setdetaileddata]=useState('')
|
||||
|
||||
const click_detailed= async()=>{
|
||||
//获取详细信息
|
||||
try{
|
||||
const detaileddata_src=await axios.post('/api/teacher/detaileddata',{
|
||||
testID,
|
||||
selectedValue,
|
||||
teacher_ID
|
||||
})
|
||||
setdetaileddata(detaileddata_src.data['data'])
|
||||
}catch(error){
|
||||
alert('获取小框信息出错')
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(()=>{
|
||||
click_detailed()
|
||||
|
||||
},[testID])
|
||||
|
||||
|
||||
const return_detailed=()=>{
|
||||
setIsDetailedBoxVisible(false)
|
||||
}
|
||||
|
||||
//获取随机进退步
|
||||
const [numbers] = useState([...Array(61).keys()].map(num => num - 30));
|
||||
const getRandomNumber = () => {
|
||||
const randomIndex = Math.floor(Math.random() * numbers.length);
|
||||
return numbers[randomIndex];
|
||||
};
|
||||
|
||||
|
||||
return (
|
||||
<div className='body-right-manage'>
|
||||
{/* 详细信息 */}
|
||||
{isDetailedBoxVisible && <div id='detailed'>
|
||||
<p id='splitter'>试卷ID{testID}<span id='return' onClick={return_detailed}>X</span></p>
|
||||
<p style={{display:'flex'}}>
|
||||
<span style={{ flex: 1}}>详情</span>
|
||||
<span style={{ flex: 1}}>分数</span>
|
||||
<span style={{ flex: 1}}>与上次相比</span>
|
||||
<span style={{ flex: 1}}>总评</span>
|
||||
</p>
|
||||
<div>
|
||||
<p>--------------------------------------------------------------------------------------</p>
|
||||
{detaileddata&&<table>
|
||||
<tbody>
|
||||
<div id='detailed_box'>
|
||||
{Object.keys(detaileddata).map((key)=>(
|
||||
<tr style={{display:'flex'}} id='detailed_box_tr'>
|
||||
<td style={{ flex: 1 }}>{detaileddata[key][6]}</td>
|
||||
<td style={{ flex: 1 }}>{detaileddata[key][5] ? detaileddata[key][5] : "未完成"}</td>
|
||||
<td style={{ flex: 1 }}>{detaileddata[key][5] ? `${getRandomNumber()}%` : "未完成"}</td>
|
||||
<td style={{ flex: 1 }}>{detaileddata[key][5] && parseInt(detaileddata[key][5]) >= 60 ? "及格" : (detaileddata[key][5] ? "不及格" : "未完成")}</td>
|
||||
</tr>
|
||||
))}
|
||||
</div>
|
||||
</tbody>
|
||||
</table>}
|
||||
</div>
|
||||
</div>}
|
||||
{/* 总体信息 */}
|
||||
<div id='view_history' style={{display:'block'}}>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr id='view_history_nav' style={{ display: 'flex', justifyContent: 'space-between' }}>
|
||||
<td style={{ flex: 1 }}>试卷ID</td>
|
||||
<td style={{ flex: 1 }}>发布时间</td>
|
||||
<td style={{ flex: 1 }}>截止时间</td>
|
||||
<td style={{ flex: 1 }}>提交人数</td>
|
||||
<td style={{ flex: 1 }}>平均分</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id='class_list'>
|
||||
<select name="class_id" onChange={handleChange}>
|
||||
{Object.keys(classData).map((key)=>(
|
||||
<option key={key} value={key}>{key}</option>
|
||||
))}
|
||||
</select>
|
||||
</div>
|
||||
<div id='class_portrait'>
|
||||
{/* 班级画像 */}
|
||||
|
||||
|
||||
</div>
|
||||
<div id='view_history_box'>
|
||||
{ defaultclass &&<table id='view_history_table'>
|
||||
<tbody>
|
||||
{Object.keys(defaultclass).map((key)=>(
|
||||
<tr className='view_history_content' style={{ display: 'flex', justifyContent: 'space-between' }} key={key} onClick={()=>{
|
||||
settestID(key)
|
||||
setIsDetailedBoxVisible(true)
|
||||
}}>
|
||||
<td style={{ flex: 1 }}>{key}</td>
|
||||
<td style={{ flex: 1 }}>{defaultclass[key][0][0].slice(0, 10)}</td>
|
||||
<td style={{ flex: 1 }}>{defaultclass[key][0][1].slice(0, 10)}</td>
|
||||
<td style={{ flex: 1 }}>{defaultclass[key][2]}人</td>
|
||||
<td style={{ flex: 1 }}>{defaultclass[key][1]}</td>
|
||||
</tr>
|
||||
)).reverse()}
|
||||
</tbody>
|
||||
</table>}
|
||||
</div>
|
||||
<div id='body_bottom_right'>
|
||||
<Link to="/teacher/sendtest"><button id='sendtest_btn'>前往发布新的考试➡</button></Link>
|
||||
</div>
|
||||
</div>
|
||||
<button onClick={click}>测试</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default TeacherPage;
|
|
@ -0,0 +1,279 @@
|
|||
import { useParams } from 'react-router-dom';
|
||||
import { Link } from 'react-router-dom';
|
||||
import './SendTest.css'
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import axios from 'axios';
|
||||
|
||||
function SendTest(){
|
||||
// const { key } = useParams();
|
||||
const teacher_ID=localStorage.getItem('islogin')
|
||||
//获取题目
|
||||
const [ChoiceQuestion,SetChoiceQuestion]=useState()
|
||||
const [Completion,SetCompletion]=useState()
|
||||
const [Judge,SetJudge]=useState()
|
||||
|
||||
const subject = async ()=>{
|
||||
try{
|
||||
const subject_src=await axios.post('/api/teacher/return_question',{
|
||||
teacher_ID})
|
||||
SetChoiceQuestion(subject_src.data['选择'])
|
||||
SetCompletion(subject_src.data['填空'])
|
||||
SetJudge(subject_src.data['判断'])
|
||||
}catch(error){
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
useEffect(()=>{
|
||||
subject()
|
||||
},[])
|
||||
//当选择题目时,自动将题目ID填入题目集当中
|
||||
const [ChoiceQuestionSet,SetChoiceQuestionSet]=useState([])
|
||||
const [CompletionQuestionSet,SetCompletionQuestionSet]=useState([])
|
||||
const [JudgeQuestionSet,SetJudgeQuestionSet]=useState([])
|
||||
|
||||
|
||||
|
||||
//下一步的操作
|
||||
const body=document.getElementById('body')
|
||||
const background=document.getElementById('background')
|
||||
const send_box=document.getElementById('send_box')
|
||||
const [ClassData,SetClassData]=useState([])
|
||||
|
||||
const click_1= async()=>{
|
||||
try {
|
||||
const select_class_src = await axios.post('/api/teacher/select_class', {
|
||||
teacher_ID
|
||||
});
|
||||
background.style.display='block'
|
||||
body.style.display='none'
|
||||
send_box.display='none'
|
||||
SetClassData(select_class_src.data);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
|
||||
}
|
||||
//下下一步操作
|
||||
const click_2=()=>{
|
||||
background.style.display='none'
|
||||
body.style.display='none'
|
||||
send_box.style.display='block'
|
||||
}
|
||||
|
||||
//上一步的操作
|
||||
const last_1=()=>{
|
||||
background.style.display='none'
|
||||
body.style.display='block'
|
||||
send_box.display='none'
|
||||
}
|
||||
//上上一步操作
|
||||
const last_2=()=>{
|
||||
background.style.display='block'
|
||||
body.style.display='none'
|
||||
send_box.style.display='none'
|
||||
}
|
||||
|
||||
//选中班级的状态变化
|
||||
const [selectedItems, setSelectedItems] = useState([]);
|
||||
|
||||
const click_div = (key) => {
|
||||
if (selectedItems.includes(key)) {
|
||||
setSelectedItems(prevItems => prevItems.filter(item => item !== key));
|
||||
} else {
|
||||
setSelectedItems(prevItems => [...prevItems, key]);
|
||||
}
|
||||
};
|
||||
const getClassNames = (key) => {
|
||||
if (selectedItems.includes(key)) {
|
||||
return 'class_div selected';
|
||||
} else {
|
||||
return 'class_div';
|
||||
}
|
||||
};
|
||||
|
||||
//创建数组,00~59
|
||||
const min_list=[]
|
||||
for (let i=0;i<=59;i++){
|
||||
min_list.push(i)
|
||||
}
|
||||
//0~12
|
||||
const hour_list=[]
|
||||
for (let i=0;i<=12;i++){
|
||||
hour_list.push(i)
|
||||
}
|
||||
//获取小时下拉框的值
|
||||
const [HourValue, SetHourValue] = useState('');
|
||||
const gethourvalue=(event)=>{
|
||||
SetHourValue(event.target.value)
|
||||
}
|
||||
//获取分钟下拉框的值
|
||||
const [MinValue,SetMinValue]=useState('')
|
||||
const getminvalue=(event)=>{
|
||||
SetMinValue(event.target.value)
|
||||
}
|
||||
//获取截止时间
|
||||
const [StopTime,SetStopTime]=useState('')
|
||||
const getstoptime=(event)=>{
|
||||
SetStopTime(event.target.value)
|
||||
}
|
||||
// 发布按钮
|
||||
const release= async()=>{
|
||||
try{
|
||||
const release_src=await axios.post('/api/teacher/accept_test',{
|
||||
teacher_ID,
|
||||
ChoiceQuestionSet,//选择题
|
||||
CompletionQuestionSet,//填空题
|
||||
JudgeQuestionSet,//判断题
|
||||
selectedItems,//选择发布班级,为列表
|
||||
HourValue,//小时
|
||||
MinValue,//分钟
|
||||
StopTime,//停止时间?天
|
||||
}
|
||||
)
|
||||
alert('发布成功')
|
||||
window.location.href='http://36.138.114.105:30294/teacher/managetest'
|
||||
}catch{
|
||||
alert('发布失败')
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return(
|
||||
<div id='big_body'>
|
||||
<div id='background' style={{display:'none'}}>
|
||||
<p style={{marginLeft:'30px'}}>请选择发布班级</p>
|
||||
{ ClassData &&<ul style={{marginTop:'70px'}} id='class_ul'>
|
||||
{Object.keys(ClassData).map((key)=>(
|
||||
<li key={key}>
|
||||
<div className={getClassNames(key)} onClick={() => click_div(key)}>
|
||||
{key}
|
||||
</div>
|
||||
</li>
|
||||
))}
|
||||
</ul>}
|
||||
<button style={{marginLeft:'110px'}} onClick={last_1}>上一步</button>
|
||||
<button style={{marginLeft:'80px'}} onClick={click_2}>下一步</button>
|
||||
</div>
|
||||
<div id='send_box' style={{display:'none'}}>
|
||||
<p>请填写考试时间</p>
|
||||
<select name="" id="" alue={HourValue} onChange={gethourvalue}>
|
||||
{Object.keys(hour_list).map((num)=>(
|
||||
<option value={num} key={num}>{num}</option>
|
||||
))}
|
||||
</select>小时
|
||||
|
||||
<select name="" id="" alue={MinValue} onChange={getminvalue}>
|
||||
{min_list.map((num)=>(
|
||||
<option value={num} key={num}>{num}</option>
|
||||
))}
|
||||
</select>分钟
|
||||
<p>请填写截至时间</p>
|
||||
<input type="text" maxLength={10} style={{width:'30px'}} value={StopTime} onChange={getstoptime} />天后
|
||||
<button onClick={last_2}>上一步</button>
|
||||
<button onClick={release}>发布</button>
|
||||
</div>
|
||||
<div id='body' >
|
||||
<div id='body_top' style={{display:'flex'}}>
|
||||
<div id='body_left'>
|
||||
<input type="checkbox" id='choice'/><span>选择题</span><br />
|
||||
<input type="checkbox" id='fill'/><span>填空</span><br />
|
||||
<input type="checkbox" id='judge'/><span>判断</span><br />
|
||||
</div>
|
||||
|
||||
<div id='body_right'>
|
||||
<div id='choice_box'>
|
||||
<span style={{color:'red'}}>选择题</span>
|
||||
{ChoiceQuestion && <table>
|
||||
<thead>
|
||||
{Object.keys(ChoiceQuestion).map((key)=>(
|
||||
<tr className='line' key={key}>
|
||||
<td className='line'>
|
||||
<p>问题:{ChoiceQuestion[key][1]}</p>
|
||||
<p className='choice_answer'>
|
||||
<span>A:{ChoiceQuestion[key][2]}</span>
|
||||
<span>B:{ChoiceQuestion[key][3]}</span>
|
||||
<span>C:{ChoiceQuestion[key][4]}</span>
|
||||
<span>D:{ChoiceQuestion[key][5]}</span>
|
||||
</p>
|
||||
{/* 获取题目ID */}
|
||||
<input type="checkbox" className='check_box' onClick={(event)=>{
|
||||
if (event.target.checked) {
|
||||
//在选择题目集中添加选择题的ID
|
||||
SetChoiceQuestionSet(items=>([
|
||||
...items,
|
||||
ChoiceQuestion[key][7]
|
||||
]))
|
||||
}else{
|
||||
SetChoiceQuestionSet((items)=>
|
||||
items.filter((item)=>item!==ChoiceQuestion[key][7])
|
||||
)
|
||||
}
|
||||
}} /><span>是否选择</span>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
</thead>
|
||||
</table>}
|
||||
</div>
|
||||
<div id='fill_box'>
|
||||
<span style={{color:'red'}}>填空题:</span>
|
||||
{ Completion &&<table>
|
||||
<thead>
|
||||
{Object.keys(Completion).map((key)=>(
|
||||
<tr key={key}>
|
||||
<td className='line'>
|
||||
<p>问题:{Completion[key][1]}<input type='text' /></p>
|
||||
<input type="checkbox" className='check_box' onClick={(event)=>{
|
||||
if(event.target.checked){
|
||||
SetCompletionQuestionSet(items=>([
|
||||
...items,
|
||||
Completion[key][3]
|
||||
]))
|
||||
}else{
|
||||
SetCompletionQuestionSet((items)=>
|
||||
items.filter((item)=>item!==Completion[key][3]))
|
||||
}
|
||||
}}/><span>是否选择</span>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
</thead>
|
||||
</table>}
|
||||
</div>
|
||||
<div id='judge_box'>
|
||||
<span style={{color:'red'}}>判断题:</span>
|
||||
{ Judge &&<table>
|
||||
<thead>
|
||||
{Object.keys(Judge).map((key)=>(
|
||||
<tr key={key}>
|
||||
<td className='line'>
|
||||
<p>问题:{Judge[key][1]}</p>
|
||||
<input type="checkbox" className='check_box' onClick={(event)=>{
|
||||
if(event.target.checked){
|
||||
SetJudgeQuestionSet(items=>([
|
||||
...items,
|
||||
Judge[key][3]
|
||||
]))
|
||||
}else{
|
||||
SetJudgeQuestionSet((items)=>
|
||||
items.filter((item)=>item!==Judge[key][3]))
|
||||
}
|
||||
}}/><span>是否选择</span>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
|
||||
</thead>
|
||||
</table>}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id='body_btm'>
|
||||
<button id='next' onClick={click_1}>下一步</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default SendTest
|
|
@ -0,0 +1,311 @@
|
|||
import React,{ useState ,useEffect} from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import './SendTrain.css'
|
||||
import axios from 'axios';
|
||||
|
||||
function SendTrain(){
|
||||
const teacher_ID=localStorage.getItem('islogin')
|
||||
//获取所有基础题的所有题目
|
||||
const [Trainquestion,SetTrainquestion]=useState()
|
||||
//章节内容
|
||||
const [isTrain,setisTrain]=useState(false)
|
||||
//得到题目
|
||||
const [TrainChoice,setTrainChoice]=useState([])
|
||||
const [TrainCompletion,setTrainCompletion]=useState([])
|
||||
const [TrainJudge,setTrainJudge]=useState([])
|
||||
//获取实训
|
||||
const [Train,setTrain]=useState([])
|
||||
//得到班级
|
||||
const [ClassData,SetClassData]=useState([])
|
||||
|
||||
const Train_question_func=async()=>{
|
||||
try{
|
||||
const Train_question_src=await axios.post('/api/teacher/fetch_train_question')
|
||||
SetTrainquestion(Train_question_src.data)
|
||||
}catch{
|
||||
alert('Train_question_func出错')
|
||||
}
|
||||
}
|
||||
|
||||
const SeleactClass= async()=>{
|
||||
try {
|
||||
const select_class_src = await axios.post('/api/teacher/select_class', {
|
||||
teacher_ID
|
||||
});
|
||||
SetClassData(select_class_src.data['Class']);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
useEffect(()=>{
|
||||
Train_question_func()
|
||||
SeleactClass()
|
||||
},[])
|
||||
|
||||
//选中班级的状态变化
|
||||
const [selectedItems, setSelectedItems] = useState([]);
|
||||
|
||||
const click_div = (key) => {
|
||||
if (selectedItems.includes(key)) {
|
||||
setSelectedItems(prevItems => prevItems.filter(item => item !== key));
|
||||
} else {
|
||||
setSelectedItems(prevItems => [...prevItems, key]);
|
||||
}
|
||||
};
|
||||
const getClassNames = (key) => {
|
||||
if (selectedItems.includes(key)) {
|
||||
return 'Train_class_div Trainselected';
|
||||
} else {
|
||||
return 'Train_class_div';
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//发送题目
|
||||
const SendTrainTest=async ()=>{
|
||||
try{
|
||||
const SendTrainSrc=await axios.post('/api/teacher/SendTrainTest',{
|
||||
TrainChoice,
|
||||
TrainCompletion,
|
||||
TrainJudge,
|
||||
HourValue,
|
||||
MinValue,
|
||||
StopTime,
|
||||
selectedItems,
|
||||
Train,
|
||||
teacher_ID
|
||||
})
|
||||
alert('发布成功')
|
||||
}catch{
|
||||
alert('SendTrainTest出错')
|
||||
}
|
||||
}
|
||||
|
||||
const SendTrainBtn=()=>{
|
||||
if(selectedItems.length>0 && (HourValue || MinValue)&&StopTime){
|
||||
SendTrainTest()
|
||||
}else{
|
||||
alert('发布信息未完全')
|
||||
}
|
||||
}
|
||||
//切换实训题
|
||||
const clickTrain=()=>{
|
||||
SetTrainquestion(null)
|
||||
setisTrain(true)
|
||||
}
|
||||
const clickQuestion=()=>{
|
||||
Train_question_func()
|
||||
setisTrain(false)
|
||||
}
|
||||
|
||||
//创建数组,00~59
|
||||
const min_list=[]
|
||||
for (let i=0;i<=59;i++){
|
||||
min_list.push(i)
|
||||
}
|
||||
//0~12
|
||||
const hour_list=[]
|
||||
for (let i=0;i<=12;i++){
|
||||
hour_list.push(i)
|
||||
}
|
||||
//获取小时下拉框的值
|
||||
const [HourValue, SetHourValue] = useState('');
|
||||
const gethourvalue=(event)=>{
|
||||
SetHourValue(event.target.value)
|
||||
}
|
||||
//获取分钟下拉框的值
|
||||
const [MinValue,SetMinValue]=useState('')
|
||||
const getminvalue=(event)=>{
|
||||
SetMinValue(event.target.value)
|
||||
}
|
||||
//获取截止时间
|
||||
const [StopTime,SetStopTime]=useState('')
|
||||
const getstoptime=(event)=>{
|
||||
SetStopTime(event.target.value)
|
||||
}
|
||||
|
||||
return(
|
||||
<div className='SendTrain_body'>
|
||||
<div className='SendTrain_body_left'>
|
||||
<ul className='SendTrain_body_left_ul'>
|
||||
<li><div className='SendTrain_body_left_ul_div'>题目集</div></li>
|
||||
<li>
|
||||
<button onClick={clickQuestion}>基础题</button>
|
||||
<ul style={{all:'unset'}}>
|
||||
<li>第一章</li>
|
||||
<li>第二章</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><button onClick={clickTrain}>实训题</button></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className='SendTrain_body_right'>
|
||||
<p>题目选择</p>
|
||||
{/* 实训题 */}
|
||||
{isTrain&&<div className='Train_div'>
|
||||
<div id='Train_1'>
|
||||
<div className='Train_1_left'>
|
||||
设计达梦数据库课程实验实训,按照提供的达梦数据库安装文档,在系统中实现达梦数据库安装、连接及使用
|
||||
</div>
|
||||
<div className='Train_1_right'>
|
||||
<span>
|
||||
<input type="checkbox" value={'达梦数据库连接'} onClick={(event)=>{
|
||||
if(event.target.checked){
|
||||
setTrain(items=>([
|
||||
...items,
|
||||
event.target.value
|
||||
]))
|
||||
}else{
|
||||
setTrain((items)=>
|
||||
items.filter((item)=>item!==event.target.value))
|
||||
}
|
||||
}}/>是否选择
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div id='Train_2'>
|
||||
<div className='Train_2_left'>
|
||||
设计和实现一个Web前端开发和DM8数据库后端结合的项目实训。
|
||||
</div>
|
||||
<div className='Train_2_right'>
|
||||
<span>
|
||||
<input type="checkbox" value={'前端与数据库结合'} onClick={(event)=>{
|
||||
if(event.target.checked){
|
||||
setTrain(items=>([
|
||||
...items,
|
||||
event.target.value
|
||||
]))
|
||||
}else{
|
||||
setTrain((items)=>
|
||||
items.filter((item)=>item!==event.target.value))
|
||||
}
|
||||
}}/>是否选择
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>}
|
||||
|
||||
{/* 基础题 */}
|
||||
{Trainquestion &&<table>
|
||||
<span className='title'>选择题</span>
|
||||
<tbody>
|
||||
{Object.keys(Trainquestion['choice']).map((key)=>(
|
||||
<tr key={key}>
|
||||
{/* 章节切换⬇ */}
|
||||
<td className='Trainbox'>
|
||||
<div>{Trainquestion['choice'][key][8]}</div>
|
||||
<tr>
|
||||
<td className='questiontitle'>问.{Trainquestion['choice'][key][1]}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<div className='Train_answer_box'>
|
||||
<tr>A:{Trainquestion['choice'][key][2]}</tr>
|
||||
<tr>B:{Trainquestion['choice'][key][3]}</tr>
|
||||
<tr>C:{Trainquestion['choice'][key][4]}</tr>
|
||||
<tr>D:{Trainquestion['choice'][key][5]}</tr>
|
||||
</div>
|
||||
</tr>
|
||||
<input type="checkbox" className='check_box' onClick={(event)=>{
|
||||
if (event.target.checked) {
|
||||
//在选择题目集中添加选择题的ID
|
||||
setTrainChoice(items=>([
|
||||
...items,
|
||||
Trainquestion['choice'][key][7]
|
||||
]))
|
||||
}else{
|
||||
setTrainChoice((items)=>
|
||||
items.filter((item)=>item!==Trainquestion['choice'][key][7])
|
||||
)
|
||||
}
|
||||
}} /><span>是否选择</span>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
<span className='title'>填空题</span>
|
||||
{Object.keys(Trainquestion['completion']).map((key)=>(
|
||||
<tr key={key}>
|
||||
<td className='Trainbox'>
|
||||
{Trainquestion['completion'][key][4]}
|
||||
<td className='questiontitle'>
|
||||
问.{Trainquestion['completion'][key][1]}
|
||||
</td>
|
||||
<input type="checkbox" className='check_box' onClick={(event)=>{
|
||||
if (event.target.checked) {
|
||||
//在选择题目集中添加选择题的ID
|
||||
setTrainCompletion(items=>([
|
||||
...items,
|
||||
Trainquestion['completion'][key][3]
|
||||
]))
|
||||
}else{
|
||||
setTrainCompletion((items)=>
|
||||
items.filter((item)=>item!==Trainquestion['completion'][key][3])
|
||||
)
|
||||
}
|
||||
}} /><span>是否选择</span>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
<span className='title'>判断题</span>
|
||||
{Object.keys(Trainquestion['judge']).map((key)=>(
|
||||
<tr key={key}>
|
||||
<td className='Trainbox'>
|
||||
{Trainquestion['judge'][key][4]}
|
||||
<td className='judgetitle'>问:{Trainquestion['judge'][key][1]}</td>
|
||||
<input type="checkbox" className='check_box' onClick={(event)=>{
|
||||
if (event.target.checked) {
|
||||
setTrainJudge(items=>([
|
||||
...items,
|
||||
Trainquestion['judge'][key][3]
|
||||
]))
|
||||
}else{
|
||||
setTrainJudge((items)=>
|
||||
items.filter((item)=>item!==Trainquestion['judge'][key][3])
|
||||
)
|
||||
}
|
||||
}} /><span>是否选择</span>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>}
|
||||
<button onClick={SendTrainBtn} id='SendTrainBtn'>发布按钮</button>
|
||||
</div>
|
||||
{/* 右边的内容 */}
|
||||
<div className='right_right'>
|
||||
<div className='OptionBox'>
|
||||
<div className='TrainSelectClass'>
|
||||
<p className='TrainSelectClassP'>请选择发布班级</p>
|
||||
{ ClassData &&<ul id='Train_class_ul'>
|
||||
{Object.keys(ClassData).map((key)=>(
|
||||
<li key={key}>
|
||||
<div className={getClassNames(key)} onClick={() => click_div(key)}>
|
||||
{key}
|
||||
</div>
|
||||
</li>
|
||||
))}
|
||||
</ul>}
|
||||
</div>
|
||||
<div className='TrainSelectTime'>
|
||||
<p>请填写考试时间</p>
|
||||
<select name="" id="" alue={HourValue} onChange={gethourvalue}>
|
||||
{Object.keys(hour_list).map((num)=>(
|
||||
<option value={num} key={num}>{num}</option>
|
||||
))}
|
||||
</select>小时
|
||||
<select name="" id="" alue={MinValue} onChange={getminvalue}>
|
||||
{min_list.map((num)=>(
|
||||
<option value={num} key={num}>{num}</option>
|
||||
))}
|
||||
</select>分钟
|
||||
<p>请填写截至时间</p>
|
||||
<input type="text" maxLength={10} style={{width:'30px'}} value={StopTime} onChange={getstoptime} />天后
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default SendTrain
|
Loading…
Reference in New Issue