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 && ( + +

选择题:

+ + {Object.keys(TrainData['operateID'][0]).map((key) => ( + + {TrainData['operateID'][0][key][0][1]} +
+ +
+ +
+ +
+ +
+ + ))} + +
+ )} + {TrainData&&( + + +

填空题:

+ {Object.keys(TrainData['operateID'][1]).map((key)=>( + {TrainData['operateID'][1][key][0][1]} +
+ 请填入你的答案: + + + ))} + +
+ )} + {TrainData&&( + + +

判断题:

+ {Object.keys(TrainData['operateID'][2]).map((key)=>( + {TrainData['operateID'][2][key][0][1]} + + + + + + ))} + + +
+ )} + +
- - -

下一页

-
) 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