diff --git a/.gitignore b/.gitignore
old mode 100755
new mode 100644
diff --git a/README.md b/README.md
old mode 100755
new mode 100644
index ab78939..0e5b105
Binary files a/README.md and b/README.md differ
diff --git a/app-dm/.dockerignore b/app-dm/.dockerignore
old mode 100755
new mode 100644
diff --git a/app-dm/.gitignore b/app-dm/.gitignore
old mode 100755
new mode 100644
index 4d29575..fd9e0b4
--- a/app-dm/.gitignore
+++ b/app-dm/.gitignore
@@ -11,6 +11,8 @@
# production
/build
+
+
# misc
.DS_Store
.env.local
diff --git a/app-dm/Dockerfile b/app-dm/Dockerfile
old mode 100755
new mode 100644
diff --git a/app-dm/README.md b/app-dm/README.md
old mode 100755
new mode 100644
diff --git a/app-dm/package-lock.json b/app-dm/package-lock.json
old mode 100755
new mode 100644
diff --git a/app-dm/package.json b/app-dm/package.json
old mode 100755
new mode 100644
diff --git a/app-dm/public/favicon.ico b/app-dm/public/favicon.ico
old mode 100755
new mode 100644
diff --git a/app-dm/public/index.html b/app-dm/public/index.html
old mode 100755
new mode 100644
diff --git a/app-dm/public/logo192.png b/app-dm/public/logo192.png
old mode 100755
new mode 100644
diff --git a/app-dm/public/logo512.png b/app-dm/public/logo512.png
old mode 100755
new mode 100644
diff --git a/app-dm/public/manifest.json b/app-dm/public/manifest.json
old mode 100755
new mode 100644
diff --git a/app-dm/public/robots.txt b/app-dm/public/robots.txt
old mode 100755
new mode 100644
diff --git a/app-dm/server/config.js b/app-dm/server/config.js
old mode 100755
new mode 100644
diff --git a/app-dm/server/index.js b/app-dm/server/index.js
old mode 100755
new mode 100644
diff --git a/app-dm/server/router.js b/app-dm/server/router.js
old mode 100755
new mode 100644
diff --git a/app-dm/src/TeacherPages/MarkingPages/Marking.css b/app-dm/src/TeacherPages/MarkingPages/Marking.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/TeacherPages/MarkingPages/Marking.jsx b/app-dm/src/TeacherPages/MarkingPages/Marking.jsx
old mode 100755
new mode 100644
diff --git a/app-dm/src/TeacherPages/SendTest/SendTest.css b/app-dm/src/TeacherPages/SendTest/SendTest.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/TeacherPages/SendTest/SendTest.jsx b/app-dm/src/TeacherPages/SendTest/SendTest.jsx
old mode 100755
new mode 100644
index 87b5c69..3a0979b
--- a/app-dm/src/TeacherPages/SendTest/SendTest.jsx
+++ b/app-dm/src/TeacherPages/SendTest/SendTest.jsx
@@ -14,7 +14,7 @@ function SendTest(){
const subject = async ()=>{
try{
- const subject_src=await axios.post('http://127.0.0.1:5000/teacher/return_question',{
+ const subject_src=await axios.post('/api/teacher/return_question',{
teacher_ID})
SetChoiceQuestion(subject_src.data['选择'])
SetCompletion(subject_src.data['填空'])
@@ -41,7 +41,7 @@ function SendTest(){
const click_1= async()=>{
try {
- const select_class_src = await axios.post('http://127.0.0.1:5000/teacher/select_class', {
+ const select_class_src = await axios.post('/api/teacher/select_class', {
teacher_ID
});
background.style.display='block'
@@ -119,7 +119,7 @@ function SendTest(){
// 发布按钮
const release= async()=>{
try{
- const release_src=await axios.post('http://127.0.0.1:5000/teacher/accept_test',{
+ const release_src=await axios.post('/api/teacher/accept_test',{
teacher_ID,
ChoiceQuestionSet,//选择题
CompletionQuestionSet,//填空题
@@ -131,7 +131,7 @@ function SendTest(){
}
)
alert('发布成功')
- window.location.href='http://localhost:3000/teacher/managetest'
+ window.location.href='http://36.138.114.105:30294/teacher/managetest'
}catch{
alert('发布失败')
}
diff --git a/app-dm/src/TeacherPages/SendTrain/SendTrain.css b/app-dm/src/TeacherPages/SendTrain/SendTrain.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/TeacherPages/SendTrain/SendTrain.jsx b/app-dm/src/TeacherPages/SendTrain/SendTrain.jsx
old mode 100755
new mode 100644
index 5e29609..734c247
--- a/app-dm/src/TeacherPages/SendTrain/SendTrain.jsx
+++ b/app-dm/src/TeacherPages/SendTrain/SendTrain.jsx
@@ -20,7 +20,7 @@ function SendTrain(){
const Train_question_func=async()=>{
try{
- const Train_question_src=await axios.post('http://127.0.0.1:5000/teacher/fetch_train_question')
+ const Train_question_src=await axios.post('/api/teacher/fetch_train_question')
SetTrainquestion(Train_question_src.data)
}catch{
alert('Train_question_func出错')
@@ -29,7 +29,7 @@ function SendTrain(){
const SeleactClass= async()=>{
try {
- const select_class_src = await axios.post('http://127.0.0.1:5000/teacher/select_class', {
+ const select_class_src = await axios.post('/api/teacher/select_class', {
teacher_ID
});
SetClassData(select_class_src.data['Class']);
@@ -66,7 +66,7 @@ function SendTrain(){
//发送题目
const SendTrainTest=async ()=>{
try{
- const SendTrainSrc=await axios.post('http://127.0.0.1:5000/teacher/SendTrainTest',{
+ const SendTrainSrc=await axios.post('/api/teacher/SendTrainTest',{
TrainChoice,
TrainCompletion,
TrainJudge,
diff --git a/app-dm/src/TeacherPages/TeacherPage.css b/app-dm/src/TeacherPages/TeacherPage.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/TeacherPages/TeacherPage.jsx b/app-dm/src/TeacherPages/TeacherPage.jsx
old mode 100755
new mode 100644
index ca28355..49f2e61
--- a/app-dm/src/TeacherPages/TeacherPage.jsx
+++ b/app-dm/src/TeacherPages/TeacherPage.jsx
@@ -15,10 +15,10 @@ function TeacherPage() {
// const is_login = localStorage.getItem('islogin');
// if (!is_login) {
// alert('未登录');
- // window.location.href = 'http://localhost:3000/signin';
+ // window.location.href = 'http://36.138.114.105:30294/signin';
// } else {
// if(teacher_ID.length===8){
- // window.location.href='http://localhost:3000'
+ // window.location.href='http://36.138.114.105:30294'
// return
// }else{
// console.log(teacher_ID);
@@ -35,7 +35,7 @@ function TeacherPage() {
//查找班级
const select_class = async () => {
try {
- const select_class_src = await axios.post('http://127.0.0.1:5000/teacher/select_class', {
+ const select_class_src = await axios.post('/api/teacher/select_class', {
teacher_ID
});
setClassData(select_class_src.data['Class']);
diff --git a/app-dm/src/TeacherPages/Trainmanage/Trainmanage.css b/app-dm/src/TeacherPages/Trainmanage/Trainmanage.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/TeacherPages/Trainmanage/Trainmanage.jsx b/app-dm/src/TeacherPages/Trainmanage/Trainmanage.jsx
old mode 100755
new mode 100644
index ca59415..038bcec
--- a/app-dm/src/TeacherPages/Trainmanage/Trainmanage.jsx
+++ b/app-dm/src/TeacherPages/Trainmanage/Trainmanage.jsx
@@ -29,7 +29,7 @@ function TeacherTrainManage(){
发布时间:
截至时间:
-
+
)
diff --git a/app-dm/src/TeacherPages/classlistpages/classId.jsx b/app-dm/src/TeacherPages/classlistpages/classId.jsx
old mode 100755
new mode 100644
index ad76dbb..0e43f84
--- a/app-dm/src/TeacherPages/classlistpages/classId.jsx
+++ b/app-dm/src/TeacherPages/classlistpages/classId.jsx
@@ -14,7 +14,7 @@ function TeacherPage() {
const [classdata,setClassData]=useState([])
const class_succeed = async () => {
try{
- const class_scr=await axios.post('http://127.0.0.1:5000/teacher/find_student',{key})
+ const class_scr=await axios.post('/api/teacher/find_student',{key})
const class_data=class_scr.data
setClassData(class_data[1])
setisclick(true)
diff --git a/app-dm/src/TeacherPages/classlistpages/classid.css b/app-dm/src/TeacherPages/classlistpages/classid.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/TeacherPages/teachermanagetest/ManageTest.css b/app-dm/src/TeacherPages/teachermanagetest/ManageTest.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/TeacherPages/teachermanagetest/ManageTest.jsx b/app-dm/src/TeacherPages/teachermanagetest/ManageTest.jsx
old mode 100755
new mode 100644
index 19ae95a..517c3b9
--- a/app-dm/src/TeacherPages/teachermanagetest/ManageTest.jsx
+++ b/app-dm/src/TeacherPages/teachermanagetest/ManageTest.jsx
@@ -18,7 +18,7 @@ function TeacherPage() {
const select_class = async () => {
try {
- const select_class_src = await axios.post('http://127.0.0.1:5000/teacher/select_class',{
+ const select_class_src = await axios.post('/api/teacher/select_class',{
teacher_ID
});
setClassData(select_class_src.data['Class']);
@@ -45,7 +45,7 @@ function TeacherPage() {
useEffect(()=>{
const change_class = async () => {
try {
- const change_class_src = await axios.post('http://127.0.0.1:5000/teacher/change_class',{
+ const change_class_src = await axios.post('/api/teacher/change_class',{
teacher_ID,
selectedValue,
testID
@@ -74,7 +74,7 @@ function TeacherPage() {
const click_detailed= async()=>{
//获取详细信息
try{
- const detaileddata_src=await axios.post('http://127.0.0.1:5000/teacher/detaileddata',{
+ const detaileddata_src=await axios.post('/api/teacher/detaileddata',{
testID,
selectedValue,
teacher_ID
diff --git a/app-dm/src/api/index.js b/app-dm/src/api/index.js
old mode 100755
new mode 100644
diff --git a/app-dm/src/index.js b/app-dm/src/index.js
old mode 100755
new mode 100644
diff --git a/app-dm/src/logo.svg b/app-dm/src/logo.svg
old mode 100755
new mode 100644
diff --git a/app-dm/src/nav/nav.jsx b/app-dm/src/nav/nav.jsx
old mode 100755
new mode 100644
index b967438..a776bbe
--- a/app-dm/src/nav/nav.jsx
+++ b/app-dm/src/nav/nav.jsx
@@ -15,7 +15,7 @@ function HeaderNav() {
localStorage.removeItem('islogin')
// setisChecked(false)
alert('注销成功')
- window.location.href='http://localhost:3000/signin'
+ window.location.href='http://36.138.114.105:30294/signin'
};
const [isChecked,setisChecked]=useState(false)
diff --git a/app-dm/src/nav/style.css b/app-dm/src/nav/style.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/nav/teacherIndex.jsx b/app-dm/src/nav/teacherIndex.jsx
old mode 100755
new mode 100644
index 9c32d04..5bc3e34
--- a/app-dm/src/nav/teacherIndex.jsx
+++ b/app-dm/src/nav/teacherIndex.jsx
@@ -15,7 +15,7 @@ function HeaderNavTeacher() {
localStorage.removeItem('islogin')
// setisChecked(false)
alert('注销成功')
- window.location.href='http://localhost:3000/signin'
+ window.location.href='http://36.138.114.105:30294/signin'
};
const [isChecked,setisChecked]=useState(false)
diff --git a/app-dm/src/pages/Home/Home.css b/app-dm/src/pages/Home/Home.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/Home/Home.jsx b/app-dm/src/pages/Home/Home.jsx
old mode 100755
new mode 100644
index d1c98cc..40e4815
--- a/app-dm/src/pages/Home/Home.jsx
+++ b/app-dm/src/pages/Home/Home.jsx
@@ -5,18 +5,12 @@ import React,{ useEffect,useState } from 'react';
import axios from 'axios';
//图表
import { Line } from 'react-chartjs-2';
-import { Chart as ChartJS, CategoryScale, LinearScale, PointElement, LineElement, Tooltip, Legend } from 'chart.js';
+import { Chart as ChartJS, CategoryScale, LinearScale, PointElement, LineElement, Tooltip, Legend, Ticks } from 'chart.js';
+import { max, min } from 'lodash';
// 首页
function Home(){
- const outlog=()=>{
- localStorage.removeItem('islogin')
- // setisChecked(false)
- alert('注销成功')
- window.location.href='http://localhost:3000/signin'
- };
-
const [isChecked,setisChecked]=useState(false)
//判断是否登录
// useEffect(()=>{
@@ -45,14 +39,14 @@ function Home(){
const student_succeed_func = async () => {
const student_ID=localStorage.getItem('islogin')
try{
- const student_succeed_src=await axios.post('http://127.0.0.1:5000/student',{
+ const student_succeed_src=await axios.post('/api/student',{
student_ID
});
//提取课程
const student_succeed=student_succeed_src.data
const lesson_data=(student_succeed['student_lesson'])
setLesson(lesson_data)
- }catch(error){
+ }catch(error){
if(student_ID.length===6){
window.location.href='http://localhost:3000/teacher'
return
@@ -63,9 +57,10 @@ function Home(){
}
}
}
- // useEffect(()=>{
- // student_succeed_func()
- // },[])
+
+ useEffect(()=>{
+ student_succeed_func()
+ },[])
useEffect(()=>{
if(lesson.length>0){
@@ -83,10 +78,6 @@ function Home(){
}
},[lesson])
- const click=()=>{
- console.log();
- }
-
//折线图
// 创建一个状态来存储图表的数据
const [chartData, setChartData] = useState({
@@ -109,8 +100,7 @@ function Home(){
datasets: [
{
label: '总体成绩分析',
- // data: [10, 20, 30, 40, 50,60,70,80,90,100],
- data:data,
+ data: [62, 79, 71, 49, 70],
fill: false,
backgroundColor:'#fff',
borderColor: 'rgb(75, 192, 192)',
@@ -125,6 +115,11 @@ function Home(){
scales: {
y: {
beginAtZero: true,
+ min:0,
+ max:100,
+ ticks:{
+ stepSize:10
+ }
}
},
plugins: {
diff --git a/app-dm/src/pages/Home/img/ad.jpg b/app-dm/src/pages/Home/img/ad.jpg
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/Home/img/logo.jpg b/app-dm/src/pages/Home/img/logo.jpg
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/Home/img/test.jpg b/app-dm/src/pages/Home/img/test.jpg
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/Home/img/班级.jpg b/app-dm/src/pages/Home/img/班级.jpg
new file mode 100644
index 0000000..1e7dde0
Binary files /dev/null and b/app-dm/src/pages/Home/img/班级.jpg differ
diff --git a/app-dm/src/pages/Home/img/问题.jpg b/app-dm/src/pages/Home/img/问题.jpg
new file mode 100644
index 0000000..d39a339
Binary files /dev/null and b/app-dm/src/pages/Home/img/问题.jpg differ
diff --git a/app-dm/src/pages/ListPages/Analyse/AnalysePages.css b/app-dm/src/pages/ListPages/Analyse/AnalysePages.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/ListPages/Analyse/AnalysePages.jsx b/app-dm/src/pages/ListPages/Analyse/AnalysePages.jsx
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/ListPages/Subject/Exam.css b/app-dm/src/pages/ListPages/Subject/Exam.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/ListPages/Subject/Exam.jsx b/app-dm/src/pages/ListPages/Subject/Exam.jsx
old mode 100755
new mode 100644
index 3b7673e..67a3c4d
--- a/app-dm/src/pages/ListPages/Subject/Exam.jsx
+++ b/app-dm/src/pages/ListPages/Subject/Exam.jsx
@@ -19,7 +19,7 @@ function Exam(){
const [testdata,settestdata]=useState('')
const test_func= async()=>{
try{
- const test_src= await axios.post('http://127.0.0.1:5000/student/get_test',{student_ID})
+ const test_src= await axios.post('/api/student/get_test',{student_ID})
const test_data=test_src.data['data']
settestdata(test_data)
}catch(error){
@@ -111,9 +111,6 @@ function Exam(){
for(let i of item){
if(i[2]===completion_answer[sum]){
setscore(prevscore => prevscore + 2);
-
- }else{
-
}
}
}
@@ -132,16 +129,15 @@ function Exam(){
if(isMounted){
const score_func=async()=>{
try{
- const score_entry_src=await axios.post('http://127.0.0.1:5000/student/score_entry',{
+ const score_entry_src=await axios.post('/api/student/score_entry',{
student_ID,
score,
examId
})
- console.log('能不能发送');
}catch(error){
alert(error)
}
- window.location.href='http://localhost:3000/subject'
+ window.location.href='http://36.138.114.105:30294/subject'
}
score_func()
}else{
diff --git a/app-dm/src/pages/ListPages/Subject/SubjectPage.css b/app-dm/src/pages/ListPages/Subject/SubjectPage.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/ListPages/Subject/SubjectPage.jsx b/app-dm/src/pages/ListPages/Subject/SubjectPage.jsx
old mode 100755
new mode 100644
index 3314d02..32a61fe
--- a/app-dm/src/pages/ListPages/Subject/SubjectPage.jsx
+++ b/app-dm/src/pages/ListPages/Subject/SubjectPage.jsx
@@ -17,22 +17,21 @@ function SubjectPage(){
//根据学生ID获取他的考试卷子
const test=async()=>{
try{
- const test_src= await axios.post('http://127.0.0.1:5000/student/get_test',{student_ID})
+ const test_src= await axios.post('/api/student/get_test',{student_ID})
settestdata(test_src.data['data'])
}catch(error){
- alert(error)
+ alert('test出错')
}
}
useEffect(()=>{
test()
},[])
-
const [EndTestList,setEndTestList]=useState([])
//获取他已经做过的试卷
const end_test=async()=>{
try{
- const end_test_src=await axios.post('http://127.0.0.1:5000/student/get_end_student',{student_ID})
+ const end_test_src=await axios.post('/api/student/get_end_student',{student_ID})
const obj=end_test_src.data['result']
setEndTestList(obj)
}catch(error){
@@ -46,10 +45,6 @@ function SubjectPage(){
//过期试卷
const [outtest,setouttest]=useState({})
- //测试按钮
- const click = () => {
- console.log(testdata);
- };
//分过期试卷⬇
useEffect(()=>{
let test_list= []
@@ -71,7 +66,7 @@ function SubjectPage(){
const find_result_func=async()=>{
try{
- const find_result=await axios.post('http://127.0.0.1:5000/student/fetch_result',{
+ const find_result=await axios.post('/api/student/fetch_result',{
student_ID
})
setresult(find_result.data['result'])
@@ -97,8 +92,6 @@ function SubjectPage(){
))}
}
-
-
已结束或完成的试卷与练习
{ outtest&& result&&
{Object.keys(outtest).map((key)=>{
diff --git a/app-dm/src/pages/ListPages/Training/Operation1.css b/app-dm/src/pages/ListPages/Training/Operation1.css
old mode 100755
new mode 100644
index eaa062f..5d1ebbe
--- a/app-dm/src/pages/ListPages/Training/Operation1.css
+++ b/app-dm/src/pages/ListPages/Training/Operation1.css
@@ -83,19 +83,32 @@
/* 前进按钮 */
.btn-back1{
- height: 50px;
- position: absolute;
- bottom: 50px;
- right: 80px;
- padding: 0 20px;
- display: flex;
- align-items: center;
- /* border: 1px solid #000; */
- box-shadow: 1px 2px 5px gray;
- background-color: #efefef;
+
}
.btn-back1 p{
font-size: 20px;
margin-left: 5px;
}
+.body-right1 table{
+ width: 100%;
+}
+.optionBox{
+ width: 100%;
+ background-color: rgb(110, 130, 130);
+}
+.body-right1 p{
+ margin: 0px;
+ font-size: 20px;
+}
+.optionBox label{
+ margin-left: 10px;
+}
+.body-right1-comple{
+ border-collapse: separate;
+ border-spacing: 10px; /* 设置行和列之间的间距 */
+}
+.body-right1-comple tr{
+ background-color: rgb(110, 130, 130);
+}
+
diff --git a/app-dm/src/pages/ListPages/Training/Operation1.jsx b/app-dm/src/pages/ListPages/Training/Operation1.jsx
old mode 100755
new mode 100644
index 3e8dc17..15413c8
--- a/app-dm/src/pages/ListPages/Training/Operation1.jsx
+++ b/app-dm/src/pages/ListPages/Training/Operation1.jsx
@@ -2,21 +2,50 @@ import './Operation1.css'
import { Terminal } from "@xterm/xterm";
import "@xterm/xterm/css/xterm.css"
import React,{ MouseEvent, useEffect, useRef, useState } from "react";
+import { useParams } from 'react-router';
import { Link } from 'react-router-dom';
import arrow from '../img/arrow.jpg'
import bottom from '../img/bottom.jpg'
import top from '../img/top.jpg'
+import axios from 'axios';
function Operation1() {
-
+ const click=()=>{
+ console.log(score);
+ }
+ const clear=()=>{
+ localStorage.clear('choice_answers');
+ setchoice_answer({})
+ localStorage.clear('completion_answer')
+ setcompletion_answer({})
+ }
+
+ const { operateID } = useParams();
+
+ //获取试卷
+ const [TrainData,setTrainData]=useState()
+ const TrainDataFunc=async()=>{
+ try{
+ const TrainDataSrc=await axios.post('/api/student/TrainData',{
+ operateID
+ })
+ const returnData=TrainDataSrc.data
+ setTrainData(returnData)
+ }catch{
+ alert('TrainDataFunc出错')
+ }
+ }
+
+ useEffect(()=>{
+ TrainDataFunc()
+ },[])
//倒计时
- // const { OperationId } = useParams();
const [test_data, setTestData] = useState('');
const [countdown, setCountdown] = useState(0);
// 倒计时初始化
useEffect(() => {
- const examDuration = 60 * 60; // 假设考试时长为1小时
+ const examDuration = 60 * 90; // 假设考试时长为1小时
setCountdown(examDuration);
}, []);
@@ -44,6 +73,88 @@ function Operation1() {
// 下拉菜单
const [isSubjectDropdownOpen, setIsSubjectDropdownOpen] = useState(false);
+ //创建答案字典,将用户填入的答案添加到答案字典
+ const [choice_answer,setchoice_answer]=useState({})
+ const [completion_answer,setcompletion_answer]=useState({})
+ const [judge_answer,setjudge_answer]=useState({})
+
+ //给选择题添加事件监听器
+ const handleOptionChange = (event) => {
+ const selectedValue = event.target.value;
+ const key = parseInt(event.target.name.replace('group', ''));
+ const updatedChoiceAnswer = { ...choice_answer, [key]: selectedValue };
+ setchoice_answer(updatedChoiceAnswer);
+ };
+ //填空题
+ const handleInputChange = (event) => {
+ const { name, value } = event.target;
+ setcompletion_answer({
+ ...completion_answer,
+ [name]: value
+ });
+ };
+
+ //判断题
+ const handleJudgeOption=(event)=>{
+ const judgeoption=event.target.value;
+ const key=parseInt(event.target.name.replace('judge',''))
+ const updatedJudgeAnswer={ ...judge_answer,[key]:judgeoption}
+ setjudge_answer(updatedJudgeAnswer)
+ }
+
+ //保存答案到 localStorage
+ const saveAnswers = () => {
+ localStorage.setItem('choice_answers', JSON.stringify(choice_answer));
+ localStorage.setItem('completion_answer', JSON.stringify(completion_answer));
+ localStorage.setItem('judge_answer',JSON.stringify(judge_answer))
+ };
+
+ // 在组件加载时从 localStorage 中恢复答案
+ useEffect(() => {
+ const storedChoiceAnswers = localStorage.getItem('choice_answers');
+ const storedCompleAnswers = localStorage.getItem('completion_answer');
+ const storedJudgeAnswers = localStorage.getItem('judge_answer')
+ if (storedChoiceAnswers) {
+ const parsedAnswers = JSON.parse(storedChoiceAnswers);
+ setchoice_answer(parsedAnswers);
+ }
+ if (storedCompleAnswers) {
+ const parsedAnswers = JSON.parse(storedCompleAnswers);
+ setcompletion_answer(parsedAnswers);
+ }
+ if(storedJudgeAnswers){
+ const parsedAnswers = JSON.parse(storedJudgeAnswers);
+ setjudge_answer(parsedAnswers);
+ }
+ }, []);
+
+ //不包含实训分数
+ const [score,setscore]=useState(0)
+ //提交按钮,或者下一页
+ const submit=()=>{
+ let CHO_sum=0;
+ let COM_sum=0;
+ let JUD_sum=0;
+ for(let item of TrainData['operateID'][0]){
+ if(item[0][6]===choice_answer[CHO_sum]){
+ setscore(prevscore=>prevscore+5)
+ }
+ CHO_sum++
+ }
+ for(let item of TrainData['operateID'][1]){
+ if (item[0][2]===completion_answer[COM_sum]) {
+ setscore(prevscore=>prevscore+5)
+ }
+ COM_sum++
+ }
+ for(let item of TrainData['operateID'][2]){
+ if (item[0][2]===judge_answer[JUD_sum]) {
+ setscore(prevscore=>prevscore+5)
+ }
+ JUD_sum++
+ }
+
+ }
return (
@@ -74,12 +185,60 @@ function Operation1() {
- 第一页(主观题)的右边页面
+ {TrainData && (
+
+ )}
+ {TrainData&&(
+
+ )}
+ {TrainData&&(
+
+ )}
+
+
-
-
-
下一页
-
)
diff --git a/app-dm/src/pages/ListPages/Training/Operation2.css b/app-dm/src/pages/ListPages/Training/Operation2.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/ListPages/Training/Operation2.jsx b/app-dm/src/pages/ListPages/Training/Operation2.jsx
old mode 100755
new mode 100644
index 1b7855f..09dd9b1
--- a/app-dm/src/pages/ListPages/Training/Operation2.jsx
+++ b/app-dm/src/pages/ListPages/Training/Operation2.jsx
@@ -2,6 +2,7 @@ import './Operation2.css'
import { Terminal } from "@xterm/xterm";
import "@xterm/xterm/css/xterm.css"
import React,{ MouseEvent, useEffect, useRef, useState } from "react";
+import { useParams } from 'react-router';
import { Link } from 'react-router-dom';
import arrow from '../img/arrow.jpg'
import arrow1 from '../img/left.jpg'
@@ -9,6 +10,7 @@ import bottom from '../img/bottom.jpg'
import top from '../img/top.jpg'
function Operation2() {
+ const { operateID } = useParams();
//终端
const terminalObj = useRef(null);
let sock = null;
@@ -122,7 +124,7 @@ function Operation2() {
第二页(实训题)的右边页面
-
+
上一页
diff --git a/app-dm/src/pages/ListPages/Training/TrainingPage.css b/app-dm/src/pages/ListPages/Training/TrainingPage.css
old mode 100755
new mode 100644
index 9d50ea2..e2eed3f
--- a/app-dm/src/pages/ListPages/Training/TrainingPage.css
+++ b/app-dm/src/pages/ListPages/Training/TrainingPage.css
@@ -48,16 +48,16 @@
}
.exam-btn-training{
- position: relative;
- margin-top: 50px;
- margin-left: 250px;
+ position: absolute;
+ margin-left: 260px;
border-radius: 15px;
+ margin-top: -10px;
font-size: 17px;
border: none;
display: inline-block;
- padding: 3px 32px;
+ padding: 3px 26px;
background-color: rgba(175, 235, 230, 0.929);
- color: #000;
+ color: #000;
text-decoration: none;
box-shadow: 3px 3px 5px rgba(127, 170, 166, 0.929);
}
@@ -69,6 +69,13 @@
.exam-btn-training:active{
color:rgba(86, 117, 114, 0.929);
}
+.bottomP{
+ color: red;
+ font-size: 20px;
+ margin-top: 350px;
+ margin-left: 70px;
+ letter-spacing: 20px;
+}
diff --git a/app-dm/src/pages/ListPages/Training/TrainingPage.jsx b/app-dm/src/pages/ListPages/Training/TrainingPage.jsx
index 80457eb..9ff46e9 100755
--- a/app-dm/src/pages/ListPages/Training/TrainingPage.jsx
+++ b/app-dm/src/pages/ListPages/Training/TrainingPage.jsx
@@ -1,43 +1,53 @@
-import React,{ useState } from 'react';
+import React,{ useState , useEffect} from 'react';
import { Link } from 'react-router-dom';
import '../Training/TrainingPage.css'
+import axios from 'axios';
-const list3=[
- {'train':'实训一:数据库的安装',id:'1'},
- {'train':'实训二:web前端开发和数据库的结合',id:'2'}
-]
-
const list4=[
{'train':'实训3:待定',id:'3'},
{'train':'实训4:待定',id:'4'}
]
// 首页 学习分析
function SubjectPage(){
+ const student_ID=localStorage.getItem('islogin')
+ const [title,setTitle]=useState()
+ // 获取实训标题
+ const FetchTrainFunc=async()=>{
+ try{
+ const FetchTrainSrc=await axios.post('api/student/FetchTrainTitle',{
+ student_ID
+ })
+ setTitle(FetchTrainSrc.data['title'])
+ }catch{
+ alert('FetchTrainFunc出错')
+ }
+ }
+
+ useEffect(()=>{
+ FetchTrainFunc()
+ },[])
return(
-
未完成练习
-
- {list3.map((item) =>(
-
-
{item.train}
-
发布者:陈老师
-
+
未完成实训项目
+ {title&&
+ {Object.keys(title).map((key)=>(
+
+
实训:{eval(title[key][0][11])}
+
发布者:陈老师
+
发布时间:{title[key][0][5]}
+
截至时间:{title[key][0][6]}
+
开始实训
-
))}
-
-
已完成练习
-
- {list4.map((item) => (
-
-
{item.train}
-
- {item.title}
-
-
))}
-
+
+ ))}
+
}
+
+
提醒:请及时完成实训内容!!!
)};
diff --git a/app-dm/src/pages/ListPages/img/bottom.jpg b/app-dm/src/pages/ListPages/img/bottom.jpg
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/ListPages/img/right.jpg b/app-dm/src/pages/ListPages/img/right.jpg
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/ListPages/img/top.jpg b/app-dm/src/pages/ListPages/img/top.jpg
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/ListPages/img/主页.jpg b/app-dm/src/pages/ListPages/img/主页.jpg
new file mode 100644
index 0000000..ea393a6
Binary files /dev/null and b/app-dm/src/pages/ListPages/img/主页.jpg differ
diff --git a/app-dm/src/pages/ListPages/img/班级.jpg b/app-dm/src/pages/ListPages/img/班级.jpg
new file mode 100644
index 0000000..1e7dde0
Binary files /dev/null and b/app-dm/src/pages/ListPages/img/班级.jpg differ
diff --git a/app-dm/src/pages/ListPages/img/箭头1.jpg b/app-dm/src/pages/ListPages/img/箭头1.jpg
new file mode 100644
index 0000000..f760d6a
Binary files /dev/null and b/app-dm/src/pages/ListPages/img/箭头1.jpg differ
diff --git a/app-dm/src/pages/ListPages/img/设置.jpg b/app-dm/src/pages/ListPages/img/设置.jpg
new file mode 100644
index 0000000..e262270
Binary files /dev/null and b/app-dm/src/pages/ListPages/img/设置.jpg differ
diff --git a/app-dm/src/pages/ListPages/img/问题.jpg b/app-dm/src/pages/ListPages/img/问题.jpg
new file mode 100644
index 0000000..d39a339
Binary files /dev/null and b/app-dm/src/pages/ListPages/img/问题.jpg differ
diff --git a/app-dm/src/pages/ListPages/img/题目.jpg b/app-dm/src/pages/ListPages/img/题目.jpg
new file mode 100644
index 0000000..29a750d
Binary files /dev/null and b/app-dm/src/pages/ListPages/img/题目.jpg differ
diff --git a/app-dm/src/pages/SighUp/SignUpForm.css b/app-dm/src/pages/SighUp/SignUpForm.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/SighUp/SignUpForm.jsx b/app-dm/src/pages/SighUp/SignUpForm.jsx
old mode 100755
new mode 100644
index 41d67c8..a822c17
--- a/app-dm/src/pages/SighUp/SignUpForm.jsx
+++ b/app-dm/src/pages/SighUp/SignUpForm.jsx
@@ -62,7 +62,7 @@ import axios from 'axios';
alert('学号错误')
return
}
- const register_func=await axios.post('http://127.0.0.1:5000/register',{
+ const register_func=await axios.post('/api/register',{
name,
ID,
password,
diff --git a/app-dm/src/pages/SighUp/SignUpPage.jsx b/app-dm/src/pages/SighUp/SignUpPage.jsx
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/SighUp/注册页面右.png b/app-dm/src/pages/SighUp/注册页面右.png
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/SignIn/SignInPage.css b/app-dm/src/pages/SignIn/SignInPage.css
old mode 100755
new mode 100644
diff --git a/app-dm/src/pages/SignIn/SignInPage.jsx b/app-dm/src/pages/SignIn/SignInPage.jsx
old mode 100755
new mode 100644
index abf85b2..c956eeb
--- a/app-dm/src/pages/SignIn/SignInPage.jsx
+++ b/app-dm/src/pages/SignIn/SignInPage.jsx
@@ -12,7 +12,7 @@ function SignInPage(){
const login = async () => {
try {
- const login_data = await axios.post('http://127.0.0.1:5000/login', {
+ const login_data = await axios.post('/api/login', {
ID,
password
});
@@ -21,11 +21,11 @@ function SignInPage(){
if (data.result === '登录成功' && data.user==='user'){
localStorage.setItem('islogin',ID)
alert('用户登录成功')
- window.location.href='http://localhost:3000'//后期改成学生页面
+ window.location.href='http://36.138.114.105:30294'//后期改成学生页面
}else if(data.result==='登录成功'&&data.user==='teacher'){
localStorage.setItem('islogin',ID)
alert('教师登录成功')
- window.location.href='http://localhost:3000/teacher'//后期改成老师页面
+ window.location.href='http://36.138.114.105:30294/teacher'//后期改成老师页面
}else{
alert('账号或密码错误')
setID('')
diff --git a/app-dm/src/pages/SignIn/登录页面左.png b/app-dm/src/pages/SignIn/登录页面左.png
old mode 100755
new mode 100644
diff --git a/app-dm/src/postcss.config.js b/app-dm/src/postcss.config.js
old mode 100755
new mode 100644
diff --git a/app-dm/src/reportWebVitals.js b/app-dm/src/reportWebVitals.js
old mode 100755
new mode 100644
diff --git a/app-dm/src/router/index.jsx b/app-dm/src/router/index.jsx
index 9e8fbb7..1150800 100755
--- a/app-dm/src/router/index.jsx
+++ b/app-dm/src/router/index.jsx
@@ -21,7 +21,7 @@ import ClassID from '../TeacherPages/classlistpages/classId';
import ManageTest from '../TeacherPages/teachermanagetest/ManageTest';
import SendTest from '../TeacherPages/SendTest/SendTest';
import Marking from '../TeacherPages/MarkingPages/Marking';
-import TrainManage from '../TeacherPages/SendTest/trainmanage';
+import SendTrain from '../TeacherPages/SendTrain/SendTrain';
// 定义一个组件来包裹除了特定页面(exam)外的所有页面使其有导航
const MainLayout = ({ headerNav:HeaderNav }) => {
@@ -54,7 +54,7 @@ function App() {
}>
} />
}/>
- }/>
+ {/* }/> */}
} />
}/>
}/>
@@ -71,8 +71,7 @@ function App() {
}/>
}/>
}/>
-
-
+ }/>
{/* 独立的顶级路由,如登录页面,也不包含HeaderNav */}
{/* 登录页面 */}
} />
diff --git a/app-dm/src/setupProxy.js b/app-dm/src/setupProxy.js
new file mode 100644
index 0000000..d5f0756
--- /dev/null
+++ b/app-dm/src/setupProxy.js
@@ -0,0 +1,11 @@
+const { createProxyMiddleware } = require('http-proxy-middleware');
+
+module.exports = function(app) {
+ app.use(
+ '/api', // 如果请求路径匹配'/api',则进行代理
+ createProxyMiddleware({
+ target: 'http://localhost:5000', // 目标后端服务地址
+ changeOrigin: true,
+ })
+ );
+};
\ No newline at end of file
diff --git a/app-dm/src/setupTests.js b/app-dm/src/setupTests.js
old mode 100755
new mode 100644
diff --git a/app-dm/src/utils/request.js b/app-dm/src/utils/request.js
old mode 100755
new mode 100644
diff --git a/app-dm/src/vite.config.js b/app-dm/src/vite.config.js
old mode 100755
new mode 100644
diff --git a/app-dm/tailwind.config.js b/app-dm/tailwind.config.js
old mode 100755
new mode 100644
diff --git a/build.sh b/build.sh
old mode 100755
new mode 100644
index cd973f0..029e22f
--- a/build.sh
+++ b/build.sh
@@ -1,3 +1,51 @@
-docker compose build
-docker compose build build-dmpython
-docker compose build build-frontend
\ No newline at end of file
+#!/bin/bash
+
+# 获取当前文件夹名字
+current_dir=$(basename "$PWD")
+
+# 确保有稳定的网络环境
+ensure_network() {
+ read -p "请确保有稳定的网络环境[Y/N] " confirm
+ if [[ ! $confirm =~ ^[yY]([eE][sS])?$ ]]; then
+ exit 1
+ fi
+}
+
+# 打包镜像
+build_image() {
+ local service_name=$1
+ echo "打包${service_name}镜像"
+ docker compose build "$service_name"
+}
+
+# 推送镜像
+push_image() {
+ read -p "是否要推送到《达梦启元云原生大数据平台》? [Y/N] " confirm
+ if [[ $confirm =~ ^[yY]([eE][sS])?$ ]]; then
+ echo "tag"
+ docker tag "${current_dir}-flask-app" 36.138.114.105:31000/cnsof50011836/flask-app
+ echo "pushing"
+ docker push 36.138.114.105:31000/cnsof50011836/flask-app
+ echo "pushed"
+ else
+ echo "用户选择不推送镜像"
+ fi
+}
+
+# 主流程
+main() {
+ echo "打包中"
+ ensure_network
+
+ build_image base
+ build_image base-dm
+ build_image build-dmpython
+ build_image build-frontend
+ build_image flask-app
+
+ push_image
+
+ echo "脚本结束"
+}
+
+main
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
old mode 100755
new mode 100644
index a00f43d..7b095cd
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,8 +1,14 @@
services:
+ base:
+ build: ./docker/base
+ image: base
+
base-dm:
build: ./docker/base-dm
image: base-dm
+ depends_on:
+ - base
build-dmpython:
build: ./docker/build-dmpython
@@ -28,20 +34,3 @@ services:
retries: 3
command: gunicorn -w 3 -t 60 -b 0.0.0.0:8000 app:app
- nginx-proxy:
- build: ./docker/nginx
- restart: always
- volumes:
- - ./docker/nginx/default.conf:/tmp/default.conf
- environment:
- - FLASK_SERVER_ADDR=flask-app:8000
- ports:
- - "80:80"
- depends_on:
- - flask-app
- healthcheck:
- test: ["CMD-SHELL", "curl --silent --fail localhost:80/health-check || exit 1"]
- interval: 10s
- timeout: 10s
- retries: 3
- command: /app/start.sh
diff --git a/docker/base-dm/Dockerfile b/docker/base-dm/Dockerfile
old mode 100755
new mode 100644
index ad460c9..1d30f8f
--- a/docker/base-dm/Dockerfile
+++ b/docker/base-dm/Dockerfile
@@ -1,35 +1,16 @@
-FROM ubuntu
-# apt安装时,防止卡死在交互界面
-ENV DEBIAN_FRONTEND=noninteractive
-ENV LANG=zh_CN.UTF-8
-ENV LC_ALL=zh_CN.UTF-8
-# 基础软件安装
-RUN sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list \
-&& apt-get -y update && apt-get -y upgrade \
-&& apt-get install -y python3.10-venv libssl-dev sudo vim python3-pip ssh wget unzip p7zip* language-pack-zh-hans language-selector-common locales locales-all \
-# 设置中文环境
-&& apt install -y $(check-language-support) \
-&& echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen \
-&& sudo /usr/sbin/update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8 \
-&& locale-gen \
+FROM base
# 添加用户
-&& useradd -m -s /bin/bash dmdba \
+RUN useradd -m -s /bin/bash dmdba \
# 修改用户密码
-&& echo "dmdba:123456" | chpasswd \
-&& pip config set global.index-url https://mirrors.bfsu.edu.cn/pypi/web/simple \
-&& echo "**** clean up ****" && \
-apt-get clean && \
-rm -rf \
- /config/* \
- /tmp/* \
- /var/lib/apt/lists/* \
- /var/tmp/*
-# 传入安装包并解压
+&& echo "dmdba:123456" | chpasswd
WORKDIR /home/dmdba
+
+# 传入安装包并解压
RUN wget https://download.dameng.com/eco/adapter/DM8/202405/dm8_20240408_x86_rh7_64_ent_8.1.3.140.zip
RUN unzip dm8_20240408_x86_rh7_64_ent_8.1.3.140.zip \
&& chown -R dmdba:dmdba /home/dmdba \
&& rm -f dm8_20240408_x86_rh7_64_ent_8.1.3.140.zip \
&& 7z x dm8_20240408_x86_rh7_64.iso \
&& rm -f dm8_20240408_x86_rh7_64.iso \
-&& chmod +x DMInstall.bin
\ No newline at end of file
+&& chmod +x DMInstall.bin
+USER dmdba
\ No newline at end of file
diff --git a/docker/base/Dockerfile b/docker/base/Dockerfile
new file mode 100644
index 0000000..f73ec32
--- /dev/null
+++ b/docker/base/Dockerfile
@@ -0,0 +1,22 @@
+FROM ubuntu
+# apt安装时,防止卡死在交互界面
+ENV DEBIAN_FRONTEND=noninteractive
+ENV LANG=zh_CN.UTF-8
+ENV LC_ALL=zh_CN.UTF-8
+# 基础软件安装
+RUN sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list \
+&& apt-get -y update && apt-get -y upgrade \
+&& apt-get install -y python3.10-venv libssl-dev sudo vim python3-pip ssh wget unzip p7zip* language-pack-zh-hans language-selector-common locales locales-all \
+# 设置中文环境
+&& apt install -y $(check-language-support) \
+&& echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen \
+&& sudo /usr/sbin/update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8 \
+&& locale-gen \
+&& pip config set global.index-url https://mirrors.bfsu.edu.cn/pypi/web/simple \
+&& echo "**** clean up ****" && \
+apt-get clean && \
+rm -rf \
+ /config/* \
+ /tmp/* \
+ /var/lib/apt/lists/* \
+ /var/tmp/*
diff --git a/docker/build-dmpython/Dockerfile b/docker/build-dmpython/Dockerfile
old mode 100755
new mode 100644
diff --git a/docker/build-dmpython/auto_install.xml b/docker/build-dmpython/auto_install.xml
old mode 100755
new mode 100644
index 7a68ff0..e6e6523
--- a/docker/build-dmpython/auto_install.xml
+++ b/docker/build-dmpython/auto_install.xml
@@ -115,7 +115,7 @@
- Y
+ N
N
diff --git a/docker/code-server/.editorconfig b/docker/code-server/.editorconfig
old mode 100755
new mode 100644
diff --git a/docker/code-server/LICENSE b/docker/code-server/LICENSE
old mode 100755
new mode 100644
diff --git a/docker/code-server/package_versions.txt b/docker/code-server/package_versions.txt
old mode 100755
new mode 100644
diff --git a/docker/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/docker/code-server/root/etc/s6-overlay/s6-rc.d/init-code-server/run
old mode 100755
new mode 100644
diff --git a/docker/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/run b/docker/code-server/root/etc/s6-overlay/s6-rc.d/svc-code-server/run
old mode 100755
new mode 100644
diff --git a/docker/code-server/root/usr/local/bin/install-extension b/docker/code-server/root/usr/local/bin/install-extension
old mode 100755
new mode 100644
diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile
old mode 100755
new mode 100644
diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf
old mode 100755
new mode 100644
diff --git a/docker/nginx/nginx.conf b/docker/nginx/nginx.conf
old mode 100755
new mode 100644
diff --git a/docker/nginx/start.sh b/docker/nginx/start.sh
old mode 100755
new mode 100644
diff --git a/docker/ssh-server/Dockerfile b/docker/ssh-server/Dockerfile
old mode 100755
new mode 100644
diff --git a/python/Dockerfile b/python/Dockerfile
old mode 100755
new mode 100644
index ac80947..4d0eac3
--- a/python/Dockerfile
+++ b/python/Dockerfile
@@ -1,13 +1,13 @@
-FROM base-dm
+FROM base
# 升级pip
RUN pip install --upgrade pip
# 创建一个用户运行flask
-RUN adduser flask
-RUN chown -R flask:flask /home/flask
-RUN mkdir -p /var/log/flask-app && touch /var/log/flask-app/flask-app.err.log && touch /var/log/flask-app/flask-app.out.log
-RUN chown -R flask:flask /var/log/flask-app
+RUN adduser flask && \
+chown -R flask:flask /home/flask && \
+mkdir -p /var/log/flask-app && touch /var/log/flask-app/flask-app.err.log && touch /var/log/flask-app/flask-app.out.log && \
+chown -R flask:flask /var/log/flask-app
WORKDIR /home/flask
USER flask
@@ -16,18 +16,18 @@ COPY --chown=flask:flask . .
# venv
ENV VIRTUAL_ENV=/home/flask/venv
+ENV PATH="$VIRTUAL_ENV/bin:$PATH"
# 安装包
-RUN python3 -m venv "$VIRTUAL_ENV"
-ENV PATH="$VIRTUAL_ENV/bin:$PATH"
-RUN export FLASK_APP=main.py
COPY --from=build-dmpython --chown=flask:flask /home/dmdba/build_artifacts/dmPython-2.5.5-cp310-cp310-linux_x86_64.whl .
+RUN python3 -m venv "$VIRTUAL_ENV" && \
+export FLASK_APP=app.py && \
+pip3 install dmPython-2.5.5-cp310-cp310-linux_x86_64.whl && rm dmPython-2.5.5-cp310-cp310-linux_x86_64.whl && \
+MAKEFLAGS="-j$(nproc)" pip install -r requirements.txt
COPY --from=build-dmpython /home/dmdba/build_artifacts/libdmdpi.so /usr/lib/
COPY --from=build-frontend /usr/src/app/build/ /home/flask/public/
-RUN pip3 install dmPython-2.5.5-cp310-cp310-linux_x86_64.whl && rm dmPython-2.5.5-cp310-cp310-linux_x86_64.whl
-RUN MAKEFLAGS="-j$(nproc)" pip install -r requirements.txt
-USER root
+
# 暴露端口
EXPOSE 5000
-CMD ["python", "main.py"]
\ No newline at end of file
+CMD ["gunicorn", "-w", "3", "-t", "60", "-b", "0.0.0.0:8000", "app:app"]
\ No newline at end of file
diff --git a/python/app.py b/python/app.py
old mode 100755
new mode 100644
index df6673a..fcff020
--- a/python/app.py
+++ b/python/app.py
@@ -8,7 +8,7 @@ CORS(app, resources={r"/*": {"origins": "*"}})
app.config['SECRET_KEY'] = '350625'
-@app.route('/student', methods=['POST']) # 检测历史是否登录过,登录则直接进入index,反之则进去login界面
+@app.route('/api/student', methods=['POST']) # 检测历史是否登录过,登录则直接进入index,反之则进去login界面
def student(): # 判断是否已经登录
ID_data = request.json
ID = ID_data['student_ID']
@@ -17,13 +17,11 @@ def student(): # 判断是否已经登录
return jsonify({'student_succeed': student_succeed, 'student_lesson': student_lesson})
-@app.route('/login', methods=['POST']) # 登录功能
+@app.route('/api/login', methods=['POST']) # 登录功能
def login():
login_data = request.json # 获取前端发送过来的数据
ID = login_data['ID'] # 解析数据
password = login_data['password']
- print(ID)
- print(password)
if len(ID) == 8: # 根据长度判断,长度为十则是学生
try:
en_password, password = student_login_func(ID, password)
@@ -65,7 +63,7 @@ def login():
# postman
-@app.route('/logout', methods=['POST']) # 退出登录功能
+@app.route('/api/logout', methods=['POST']) # 退出登录功能
def logout(): # 退出登录
ID = session['id']
print(ID)
@@ -73,7 +71,7 @@ def logout(): # 退出登录
return jsonify({'result': '注销成功'})
-@app.route('/register', methods=['POST']) # 注册功能实现
+@app.route('/api/register', methods=['POST']) # 注册功能实现
def register():
register_data = request.json # 获取前端发送过来的数据
name = register_data['name']
@@ -88,7 +86,7 @@ def register():
return jsonify({'result': '注册成功'})
-@app.route('/student/get_lesson', methods=['GET'])
+@app.route('/api/student/get_lesson', methods=['GET'])
def get_lesson(): # 获取课程
student_id = session.get('id')
student_lesson = get_lesson_func(student_id)
@@ -97,27 +95,27 @@ def get_lesson(): # 获取课程
# 学生获取试卷
-@app.route('/student/get_test', methods=['POST'])
+@app.route('/api/student/get_test', methods=['POST'])
def get_test(): # 获取试卷以及历史试卷
data = request.json
ID = data['student_ID']
return jsonify({"data": fetch_test_func(ID)})
-@app.route('/student/fetch_result', methods=['POST']) # 查找成绩
+@app.route('/api/student/fetch_result', methods=['POST']) # 查找成绩
def fetch_result():
data = request.json
ID = data['student_ID']
return jsonify({'result': fetch_result_func(ID)})
-@app.route('/student/get_end_student', methods=['POST'])
+@app.route('/api/student/get_end_student', methods=['POST'])
def get_end_student():
data = request.json
ID = data['student_ID']
return jsonify({'result': find_end_test(ID)})
-@app.route('/student/score_entry', methods=['POST'])
+@app.route('/api/student/score_entry', methods=['POST'])
def score_entry():
data = request.json
ID = data['student_ID']
@@ -128,8 +126,24 @@ def score_entry():
return jsonify({'result': '成功'})
+@app.route('/api/student/FetchTrainTitle',methods=['POST'])
+def FetchTrainTitle():
+ data = request.json
+ ID = data['student_ID']
+ title=FetchTrainTitleFunc(ID)
+ return jsonify({'title': title})
+
+
+@app.route('/api/student/TrainData',methods=['POST'])
+def TrainData():
+ examID=request.json['operateID']
+ result=FetchTrainTestFunc(examID)
+ return result
+
+
+
# 以下为教师功能—————————————————————————————————————————————————————————————————————
-@app.route('/teacher/return_question', methods=['POST'])
+@app.route('/api/teacher/return_question', methods=['POST'])
def return_question():
data = request.json
ID = data['teacher_ID']
@@ -139,7 +153,7 @@ def return_question():
return jsonify({'选择': choice_question, '填空': completion_question, '判断': t_or_f_question})
-@app.route('/teacher/select_class', methods=['POST'])
+@app.route('/api/teacher/select_class', methods=['POST'])
def select_class(): # 查找每个老师管理的班级 以及在考试管理查找默认班级
teacher_id = request.json['teacher_ID']
# testID =request.json['testID']
@@ -148,23 +162,23 @@ def select_class(): # 查找每个老师管理的班级 以及在考试管理
# print(testID)
return jsonify({'Class': class_dic,'default': find_default_class_func(default_class, teacher_id)})
-@app.route('/teacher/change_class', methods=['POST'])
+@app.route('/api/teacher/change_class', methods=['POST'])
def change_class(): # 查找每个老师管理的班级 以及在考试管理查找默认班级
teacher_id = request.json['teacher_ID']
ClassID=request.json['selectedValue']
return jsonify({'default': find_default_class_func(ClassID,teacher_id)})
-@app.route('/teacher/detaileddata', methods=['POST'])
+@app.route('/api/teacher/detaileddata', methods=['POST'])
def detaileddata():
data=request.json
ClassID=data['selectedValue']
testID=data['testID']
return jsonify({'data':detailed_class(testID,ClassID)})
-@app.route('/teacher/', methods=['POST'])
+@app.route('/api/teacher/', methods=['POST'])
def find_test():
return
-@app.route('/teacher/find_student', methods=['POST'])
+@app.route('/api/teacher/find_student', methods=['POST'])
def find_student(): # 获取班级学生的具体信息
student_list = []
Data = request.json
@@ -175,7 +189,7 @@ def find_student(): # 获取班级学生的具体信息
return [student_succeed, student_list]
-@app.route('/teacher/accept_test', methods=['POST']) # 在前端发布成功之后要存入数据库
+@app.route('/api/teacher/accept_test', methods=['POST']) # 在前端发布成功之后要存入数据库
def accept_test():
data = request.json
choice_list = data['ChoiceQuestionSet']
@@ -190,11 +204,11 @@ def accept_test():
print('添加成功')
return jsonify({'result': '发布成功'})
-@app.route('/teacher/fetch_train_question',methods=["POST"])
+@app.route('/api/teacher/fetch_train_question',methods=["POST"])
def fetch_train_question():
return train_question()
-@app.route('/teacher/SendTrainTest',methods=["POST"])
+@app.route('/api/teacher/SendTrainTest',methods=["POST"])
def SendTrainTest():
data=request.json
TrainChoice=data['TrainChoice']
diff --git a/python/requirements.txt b/python/requirements.txt
old mode 100755
new mode 100644
diff --git a/python/student_func.py b/python/student_func.py
old mode 100755
new mode 100644
index 5cc7bcf..ffd1cb9
--- a/python/student_func.py
+++ b/python/student_func.py
@@ -203,6 +203,72 @@ def score_entry_func(score,testID,ID):
return '修改成功'
+def FetchTrainTitleFunc(ID):
+ cursor = db.cursor()
+ cursor.execute("SELECT * FROM TRAINSCORE WHERE STUDENT_ID=? and TF='false'",(ID))
+ train_title = cursor.fetchall()
+ titles = []
+ title = []
+ for i in train_title:
+ titles.append(i[2])
+
+ for i in titles:
+ cursor.execute('SELECT * FROM TRAINTEST WHERE ID=? ',(i))
+ title.append(cursor.fetchall())
+
+ cursor.close()
+ return title
+
+
+
+def FetchTrainTestFunc(operateID):
+ cursor = db.cursor()
+ cursor.execute("SELECT * FROM TRAINTEST WHERE ID=?",(operateID))
+ TrainID=cursor.fetchall()[0]
+ #获取题目
+ CHOICEID=json.loads(TrainID[0])
+ COMPLEID=json.loads(TrainID[1])
+ JUDGEID=json.loads(TrainID[2])
+ Train=json.loads(TrainID[11])
+
+ CHOICELIST=[]
+ COMPLELIST=[]
+ JUDGELIST=[]
+
+ CHOICE=[str(x) for x in CHOICEID]
+ COMPLE=[str(x) for x in COMPLEID]
+ JUDGE=[str(x) for x in JUDGEID]
+
+ for i in CHOICE:
+ cursor.execute('SELECT * FROM CHOICE_QUESTION_BANK WHERE ID=(?)',(i))
+ CHOICELIST.append(cursor.fetchall())
+
+ for i in COMPLE:
+ cursor.execute('SELECT * FROM COMPLETION_QUESTION_BANK WHERE ID=(?)',(i))
+ COMPLELIST.append(cursor.fetchall())
+
+ for i in JUDGE:
+ cursor.execute('SELECT * FROM T_OR_F_QUESTION_BANK WHERE ID=(?)',(i))
+ JUDGELIST.append(cursor.fetchall())
+
+ HOUR=TrainID[3]
+ MIN=TrainID[4]
+ if int(HOUR)==0:
+ time=int(MIN)
+ elif int(MIN)==0:
+ time=int(HOUR)*60
+ else:
+ time=int(HOUR)*60+int(MIN)
+
+
+ dic={'operateID':[CHOICELIST,COMPLELIST,JUDGELIST,Train,time]}
+
+ return dic
+
+
+# FetchTrainTestFunc('3')
+
+
diff --git a/python/teacher_func.py b/python/teacher_func.py
old mode 100755
new mode 100644
index acd83c4..21ef154
--- a/python/teacher_func.py
+++ b/python/teacher_func.py
@@ -5,7 +5,6 @@ from Crypto.Random import get_random_bytes
import base64
import datetime
-
db = dmPython.connect(user='SYSDBA', password='dameng!!', host="36.138.114.105", port="32522")
#获取题目
diff --git a/python/wsgi.py b/python/wsgi.py
old mode 100755
new mode 100644