diff --git a/app-dm/src/TeacherPages/MarkingPages/Marking.jsx b/app-dm/src/TeacherPages/MarkingPages/Marking.jsx
index a62ca65..e38c9df 100644
--- a/app-dm/src/TeacherPages/MarkingPages/Marking.jsx
+++ b/app-dm/src/TeacherPages/MarkingPages/Marking.jsx
@@ -3,6 +3,8 @@ import { Link } from 'react-router-dom';
// import axios from 'axios';
import './Marking.css';
import Test from '../../pages/Home/img/test.jpg'
+import React, { useEffect, useState } from 'react';
+import axios from 'axios';
// 批改
function Marking(){
@@ -11,34 +13,81 @@ function Marking(){
alert('登录过期,请重新登录')
window.location.href='http://36.138.114.105:30294/'
}
+
+ const [istrue,setistrue]=useState(false)
+
+ //获取班级
+ const [ClassID,setClassID]=useState()
+ const [selectClass,SetClassData]=useState()
+ const SeleactClass= async()=>{
+ try {
+ const select_class_src = await axios.post('/api/teacher/select_class', {
+ teacher_ID
+ });
+ SetClassData(select_class_src.data['Class']);
+ setClassID(Object.keys(select_class_src.data['Class'])[0])
+ setistrue(true)
+ } catch (error) {
+ console.log(error);
+ }
+
+ }
+ useEffect(()=>{
+ SeleactClass()
+ },[])
+
+ //获取默认的未批改的实训
+ const [MarkData,setMarkData]=useState()
+ const MarkTrainFunc=async()=>{
+ try{
+ const MarkTrainSrc=await axios.post('/api/teacher/marktrain',{
+ ClassID,
+ teacher_ID
+ })
+ setMarkData(MarkTrainSrc.data['MarkClass'])
+ }catch{
+ alert('MarkTrain出错')
+ }
+ }
+ useEffect(()=>{
+ if(istrue){
+ MarkTrainFunc()
+ }
+ },[ClassID])
+
+ const ClassChange=(event)=>{
+ setClassID(event.target.value)
+ }
+ const click=()=>{
+ console.log(ClassID);
+ console.log(MarkData);
+ }
+
return(
-
-
+ {selectClass&&
}
+ {MarkData&&
+
+
}
)
diff --git a/app-dm/src/TeacherPages/MarkingPages/StudentLink.jsx b/app-dm/src/TeacherPages/MarkingPages/StudentLink.jsx
index 678c112..6687f35 100644
--- a/app-dm/src/TeacherPages/MarkingPages/StudentLink.jsx
+++ b/app-dm/src/TeacherPages/MarkingPages/StudentLink.jsx
@@ -1,8 +1,33 @@
import './StudentLink.css'
-
+import { useParams } from 'react-router-dom';
+import React, { useEffect, useState } from 'react';
+import { Link } from 'react-router-dom';
+import axios from 'axios';
function StudentLink(){
+ const testID=useParams()['key']
+
+
+ const submit=()=>{
+ console.log(TestLink);
+ }
+
+ const [TestLink,setTestLink]=useState()
+ const NotMarkTestFunc=async ()=>{
+ try{
+ const NotMarkTestSrc=await axios.post('/api/teacher/NotMarkTest',{
+ testID
+ })
+ setTestLink(NotMarkTestSrc.data['result'])
+ }catch{
+ alert('出错')
+ }
+ }
+ useEffect(()=>{
+ NotMarkTestFunc()
+ },[])
+
return(
)
}
diff --git a/app-dm/src/TeacherPages/TestManage/SendTest.jsx b/app-dm/src/TeacherPages/TestManage/SendTest.jsx
index 4ae2686..94df4f2 100644
--- a/app-dm/src/TeacherPages/TestManage/SendTest.jsx
+++ b/app-dm/src/TeacherPages/TestManage/SendTest.jsx
@@ -123,14 +123,14 @@ function SendTest(){
题目选择
- {
+ {question&&
选择题
{Object.keys(question['choice']).map((key)=>(
@@ -207,11 +207,6 @@ function SendTest(){
}
-
-
-
-
-
{/* 右边的内容 */}
diff --git a/app-dm/src/TeacherPages/Trainmanage/SendTrain.css b/app-dm/src/TeacherPages/Trainmanage/SendTrain.css
index 79e556a..6147350 100644
--- a/app-dm/src/TeacherPages/Trainmanage/SendTrain.css
+++ b/app-dm/src/TeacherPages/Trainmanage/SendTrain.css
@@ -202,9 +202,8 @@
.calendar-box span{
position: absolute;
- /* top: 20px; */
- top: 380px;
- right: 160px;
+ top: 400px;
+ right: 185px;
}
.calendar1{
width: 100px;
diff --git a/app-dm/src/TeacherPages/Trainmanage/SendTrain.jsx b/app-dm/src/TeacherPages/Trainmanage/SendTrain.jsx
index fbb2bfc..8d45431 100644
--- a/app-dm/src/TeacherPages/Trainmanage/SendTrain.jsx
+++ b/app-dm/src/TeacherPages/Trainmanage/SendTrain.jsx
@@ -3,7 +3,8 @@ import { Link } from 'react-router-dom';
import './SendTrain.css'
import axios from 'axios';
import DatePicker from 'react-datepicker';
-import 'react-datepicker/dist/react-datepicker.css';
+import "react-datepicker/dist/react-datepicker.css";
+
function SendTrain(){
const teacher_ID=localStorage.getItem('islogin')
@@ -77,7 +78,9 @@ function SendTrain(){
StopTime,
selectedItems,
Train,
- teacher_ID
+ teacher_ID,
+ startDate,
+ endDate
})
alert('发布成功')
window.location.href='/teacher/trainmanage'
@@ -89,7 +92,7 @@ function SendTrain(){
const SendTrainBtn=()=>{
- if(selectedItems.length>0 && (HourValue || MinValue)&&StopTime){
+ if(selectedItems.length>0 && (HourValue || MinValue)){
if(Train.length>0){
SendTrainTest()
}else{
@@ -133,34 +136,19 @@ function SendTrain(){
}
//获取截止时间
const [StopTime,SetStopTime]=useState('')
- const getstoptime=(event)=>{
- SetStopTime(event.target.value)
- }
// 日历
- // 用于存储开始日期和结束日期的状态
const [startDate, setStartDate] = useState(new Date());
const [endDate, setEndDate] = useState(new Date());
- // 格式化日期显示
- const formatDate = (date) => {
- return date.toLocaleDateString();
- };
- // 选择日期时更新状态
+ // 处理开始时间选择
const handleStartDateChange = (date) => {
setStartDate(date);
};
+
+ // 处理结束时间选择
const handleEndDateChange = (date) => {
setEndDate(date);
};
- // 计算并显示总天数
- const calculateTotalDays = () => {
- const differenceInTime = endDate - startDate;
- const differenceInDays = Math.floor(differenceInTime / (1000 * 60 * 60 * 24));
- return differenceInDays;
- };
- useEffect(() => {
- console.log(calculateTotalDays());
- }, [startDate, endDate]);
return(
@@ -204,7 +192,7 @@ function SendTrain(){
{
if (event.target.checked) {
//在选择题目集中添加选择题的ID
- setTrainChoice(items=>([
+ setTrainChoice(items=>([
...items,
Trainquestion['choice'][key][7]
]))
@@ -334,10 +322,10 @@ function SendTrain(){
))}
小时
- {/*
*/}
+
-
+
)
}
diff --git a/app-dm/src/TeacherPages/teacherManagetest/Test.css b/app-dm/src/TeacherPages/teacherManagetest/Test.css
new file mode 100644
index 0000000..e69de29
diff --git a/app-dm/src/TeacherPages/teacherManagetest/Test.tsx b/app-dm/src/TeacherPages/teacherManagetest/Test.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/app-dm/src/pages/ListPages/Training/TrainingPage.jsx b/app-dm/src/pages/ListPages/Training/TrainingPage.jsx
index 7e9ce92..a333906 100644
--- a/app-dm/src/pages/ListPages/Training/TrainingPage.jsx
+++ b/app-dm/src/pages/ListPages/Training/TrainingPage.jsx
@@ -43,10 +43,6 @@ const WarningModal = ({ isOpen, onClose }) => {
return null;
};
-const list4=[
- {'train':'实训3:待定',id:'3'},
- {'train':'实训4:待定',id:'4'}
-]
// 首页 学习分析
function SubjectPage(){
@@ -94,6 +90,7 @@ function SubjectPage(){
{Object.keys(title).map((key)=>(
实训:{eval(title[key][0][11])}
+
实训ID:{(title[key][0][10])}
发布者:陈老师
发布时间:{title[key][0][5]}
截至时间:{title[key][0][6]}
diff --git a/app-dm/src/router/index.jsx b/app-dm/src/router/index.jsx
index cce1679..f52c3f4 100644
--- a/app-dm/src/router/index.jsx
+++ b/app-dm/src/router/index.jsx
@@ -27,6 +27,10 @@ import SendTrain from '../TeacherPages/Trainmanage/SendTrain'
import TrainManage from '../TeacherPages/Trainmanage/Trainmanage'
import StudentLink from '../TeacherPages/MarkingPages/StudentLink';
import Test from '../TeacherPages/TestManage/Test.tsx'
+
+
+import SendTrain from '../TeacherPages/Trainmanage/SendTrain';
+import TrainManage from '../TeacherPages/Trainmanage/Trainmanage';
// 定义一个组件来包裹除了特定页面(exam)外的所有页面使其有导航
const MainLayout = ({ headerNav:HeaderNav }) => {
return (
@@ -61,7 +65,7 @@ function App() {
}/> {/* 批改 */}
}/> {/* 考试管理 */}
} /> {/* 班级管理1 */}
- }/> {/* 批改1 */}
+ }/> {/* 批改1 */}
{/* 其他需要HeaderNavTeacher的页面 */}
diff --git a/app-dm/src/setupProxy.js b/app-dm/src/setupProxy.js
index d6d9212..4a40b4f 100644
--- a/app-dm/src/setupProxy.js
+++ b/app-dm/src/setupProxy.js
@@ -4,7 +4,7 @@ module.exports = function(app) {
app.use(
'/api', // 如果请求路径匹配'/api',则进行代理
createProxyMiddleware({
- target: 'http://36.138.114.105:32087', // 目标后端服务地址
+ target: 'http://127.0.0.1:5000', // 目标后端服务地址
changeOrigin: true,
})
);
diff --git a/python/app.py b/python/app.py
index af58cfc..15c08eb 100644
--- a/python/app.py
+++ b/python/app.py
@@ -197,6 +197,12 @@ def select_class(): # 查找每个老师管理的班级 以及在考试管理
# print(testID)
return jsonify({'Class': class_dic,'default': find_default_class_func(default_class, teacher_id)})
+@app.route('/api/teacher/marktrain',methods=['POST'])
+def mark(): # 批阅试卷
+ ClassID=request.json['ClassID']
+ teacher_ID=request.json['teacher_ID']
+ return jsonify({'MarkClass': MarkTrainFunc(ClassID,teacher_ID)})
+
@app.route('/api/teacher/change_class', methods=['POST'])
def change_class(): # 查找每个老师管理的班级 以及在考试管理查找默认班级
teacher_id = request.json['teacher_ID']
@@ -343,5 +349,6 @@ def handle_disconnect():
if __name__ == '__main__':
- socketio.run(app, host='0.0.0.0', port=5000, debug=True)
+ socketio.run(app, host='0.0.0.0', port=5000 ,allow_unsafe_werkzeug=True, debug=True)
+
diff --git a/python/student_func.py b/python/student_func.py
index 306b76d..af1d9a2 100644
--- a/python/student_func.py
+++ b/python/student_func.py
@@ -252,12 +252,22 @@ def FetchTrainTitleFunc(ID):
titles.append(i[2])
for i in titles:
- cursor.execute('SELECT * FROM TRAINTEST WHERE ID=? ',(i))
- title.append(cursor.fetchall())
+ cursor.execute('SELECT * FROM TRAINTEST WHERE ID=? AND STOPTIME>? ',(i,Time))
+ result=cursor.fetchall()
+ title.append(result)
+ if result:
+ pass
+ else:
+ cursor.execute("UPDATE TRAINSCORE SET TF='true' , RESULT='0' , TRAINRESULT='0' WHERE TEST_ID=? AND STUDENT_ID=?",(i,ID))
+
+ title = [item for item in title if item]
+ print(title)
+ db.commit()
cursor.close()
return title
+# FetchTrainTitleFunc("20240101")
def FetchTrainTestFunc(operateID):
diff --git a/python/teacher_func.py b/python/teacher_func.py
index b2a4399..242b717 100644
--- a/python/teacher_func.py
+++ b/python/teacher_func.py
@@ -7,6 +7,8 @@ import datetime
db = dmPython.connect(user='SYSDBA', password='dameng!!', host="36.138.114.105", port="32522")
+
+
#获取题目
def choice_question_func(ID):
question_cursor = db.cursor()
@@ -218,24 +220,26 @@ def train_question():
# print(Train)
return Train
+
+testID=None
+TrainName=""
# train_question()
-def SendTrainTestFunc(TrainChoice,TrainCompletion,TrainJudge,Hour,Min,StopTime,Class,Train,teacher_id):
+def SendTrainTestFunc(TrainChoice,TrainCompletion,TrainJudge,Hour,Min,Class,Train,teacher_id,startTime,endTime):
TrainChoice = json.dumps(TrainChoice)
TrainCompletion = json.dumps(TrainCompletion)
TrainJudge = json.dumps(TrainJudge)
Class=json.dumps(Class)
Train=json.dumps(Train)
- # 获取当前时间
- now_time = datetime.datetime.now().replace(microsecond=0)
- end_time = now_time + datetime.timedelta(days=int(StopTime))
- end_time = end_time.replace(microsecond=0)
+ global TrainName
+ TrainName=Train
+
cursor = db.cursor()
cursor.execute(f'INSERT INTO TRAINTEST (CHOICE,COMPLE,JUDGE,HOUR,MIN,RELEASETIME,STOPTIME,CLASS,SUBJECT,TEACHER_ID,Train) VALUES'
- f'(?,?,?,?,?,?,?,?,?,?,?)',(TrainChoice,TrainCompletion,TrainJudge,Hour,Min,now_time,end_time,Class,'Train',teacher_id,Train))
+ f'(?,?,?,?,?,?,?,?,?,?,?)',(TrainChoice,TrainCompletion,TrainJudge,Hour,Min,startTime,endTime,Class,'Train',teacher_id,Train))
db.commit()
print('添加成功')
- cursor.execute(f'SELECT ID FROM TRAINTEST WHERE RELEASETIME=?', (now_time,))
+ cursor.execute(f'SELECT ID FROM TRAINTEST WHERE RELEASETIME=?', (startTime,))
test_id = cursor.fetchall()[0][0]
# 查找学生
student_list = []
@@ -258,13 +262,27 @@ def SendTrainTestFunc(TrainChoice,TrainCompletion,TrainJudge,Hour,Min,StopTime,C
(i, i[0:6], test_id, end,one))
# 发布实训的时候根据实训不同给予不同链接
-
+ cursor.execute(f"SELECT ID FROM TRAINTEST WHERE RELEASETIME=? ", (now_time))
+ test_id = cursor.fetchall()[0][0]
+ global testID
+ testID=test_id
print('分配成功')
db.commit()
cursor.close()
return '发布成功'
+def TeacherMark(CLASS,ID):
+ global testID
+ global TrainName
+ cursor = db.cursor()
+ strClass=str(CLASS)
+ if TrainName.find(r'["\u524d\u7aef\u4e0e\u6570\u636e\u5e93\u7ed3\u5408"]') != -1:
+ for i in eval(strClass):
+ cursor.execute(f'INSERT INTO TEACHERMARK VALUES(?,?,?,?) ', (ID,testID,'false', i))
+ db.commit()
+ cursor.close()
+
# def Find_dic(dic):
# # 获取字典的键,并按照从大到小的顺序排序
# keys_sorted = sorted(dic.keys(), reverse=True)
@@ -291,3 +309,30 @@ def Find_details_Func(ID):
return dic
# print(Find_details('20240101'))
+
+
+#获取未批改的卷子
+def MarkTrainFunc(ClassID,teacher_ID):
+ dic={}
+ cursor = db.cursor()
+ cursor.execute(f"SELECT * FROM TEACHERMARK WHERE CLASS=? AND TEACHERID=? AND TF='false'", (ClassID,teacher_ID))
+ for i in cursor.fetchall():
+ cursor.execute(f"SELECT * FROM TRAINTEST WHERE ID=? ", (i[1],))
+ dic[i[1]]=cursor.fetchall()
+ # print(dic)
+ return dic
+
+# MarkTrainFunc('202401','111111')
+
+def NotMarkTest(testID):
+ cursor = db.cursor()
+ dic={}
+ cursor.execute(f'SELECT * FROM TRAINSCORE WHERE TEST_ID=?',(testID))
+ for i in cursor.fetchall():
+ cursor.execute(f'SELECT NAME FROM STUDENT WHERE ID=?',(i[0]))
+ dic[cursor.fetchall()[0][0]]=i
+
+ return dic
+
+NotMarkTest('9')
+
diff --git a/python/test.py b/python/test.py
new file mode 100644
index 0000000..cfbe974
--- /dev/null
+++ b/python/test.py
@@ -0,0 +1,5 @@
+TrainName='["\u524d\u7aef\u4e0e\u6570\u636e\u5e93\u7ed3\u5408"]'
+print(TrainName)
+print(type(TrainName))
+if TrainName == '["\u524d\u7aef\u4e0e\u6570\u636e\u5e93\u7ed3\u5408"]':
+ print('yes')