Merge branches 'master' and 'master' of https://gitea.xn--7p0a.site/2312072104/dm

This commit is contained in:
nopy 2024-07-05 17:10:12 +08:00
commit afbf2e07af
13 changed files with 163 additions and 62 deletions

View File

@ -86,10 +86,6 @@ function StudentLink(){
</tbody> </tbody>
</table>} </table>}
<button onClick={submit} className='submit'>确定</button> <button onClick={submit} className='submit'>确定</button>
<button onClick={()=>{
console.log(score);
console.log(suggestion);
}}>测试</button>
</div> </div>
) )
} }

View File

@ -8,3 +8,30 @@
float: right; float: right;
background-color: #f7f8fa; background-color: #f7f8fa;
} }
.body-right-Pods-table{
margin-left: 20px;
text-align: center;
margin-top: 10px;
}
.body-right-Pods-table th{
width: 100px;
}
.body-right-Pods-table td{
text-align: center;
}
span{
all: unset;
}
.SrcBox{
border: 1px solid black;
}
.SrcBox th{
border-bottom: 1px solid black;
width: 220px;
}
.SrcBox td{
text-align: center;
}
.thd{
font-weight: bold;
}

View File

@ -3,8 +3,86 @@ import axios from 'axios';
import './TrainPods.css' import './TrainPods.css'
function TrainPods(){ function TrainPods(){
const teacher_ID=localStorage.getItem('islogin')
const[isTrue,setisTrue]=useState(true)
const [Pods,setPods]=useState()
const FindPodsFunc=async ()=>{
try{
const FindPodsFunc=await axios.post('/api/teacher/list_pods')
setPods(FindPodsFunc.data)
}catch{
}
}
useEffect(()=>{
FindPodsFunc()
},[])
const handleDelete=async(name)=> {
try{
const delPods=await axios.post('/api/teacher/DelPods',{
name
})
alert('删除成功')
}catch{
alert('出错')
}
};
const [SrcData,setSrcData]=useState()
const FindSrc=async(ID,key)=>{
try{
const FindSrcc=await axios.post('/api/teacher/FindSrc',{
ID,
key
})
setSrcData(FindSrcc.data['data'])
setisTrue(false)
}catch{
alert('SrcDAta出错')
}
}
// // eslint-disable-next-line no-restricted-globals
//
return( return(
<div className='body-right-Pods'>asdas</div> <div className='body-right-Pods'>
{isTrue&&<table className='body-right-Pods-table'>
<thead>
<tr>
<th>学号</th><th>实训类型</th><th>实训ID</th><th>IP</th><th>实训链接</th><span className='thd'>操作</span>
</tr>
</thead>
{Pods&&<tbody>
{Object.keys(Pods['list']).map((key,index)=>(
index>1&&
<tr key={key}>
<td>{Pods['list'][key]['name'].substring(1, 9)}</td>
<td>{Pods['list'][key]['name'].substring(0,1)==='n'? '终端实训':'网页实训'}</td>
<td>{Pods['list'][key]['name'].substring(10)}</td>
<td>{Pods['list'][key]['ip']}</td>
<td><button onClick={()=>FindSrc(Pods['list'][key]['name'].substring(1, 9),Pods['list'][key]['name'].substring(10))}>查看链接</button></td>
<td><button onClick={()=>handleDelete(Pods['list'][key]['name'])}>删除</button></td>
</tr>
))}
</tbody>}
</table>}
{!isTrue&& <table>
<span className='spanBox'>此学生的实训地址为</span>
<div className='SrcBox'>
<tr>
<th>LINK</th><th>LINK2</th><th>LINK3</th>
</tr>
{Object.keys(SrcData).map((key)=>(
<tr key={key}>
<td>{SrcData[0][0]}</td><td>{SrcData[0][1]}</td><td>{SrcData[0][2]}</td>
</tr>
))}
</div>
<button onClick={()=>setisTrue(!isTrue)} style={{marginLeft:'600px'}}>返回</button>
</table>}
</div>
) )
} }

View File

@ -68,7 +68,19 @@
text-decoration: none; text-decoration: none;
color: #000; color: #000;
position: absolute; position: absolute;
bottom: 50px; bottom: 170px;
right: 100px; right: 100px;
background-color: rgb(186, 237, 237); background-color: rgb(186, 237, 237);
border-radius: 20px;
}
.ManagePods{
border-radius: 20px;
position: absolute;
padding: 20px 30px;
text-decoration: none;
font-size: 20px;
color: #000;
right: 300px;
bottom: 170px;
background-color: rgb(186, 237, 237);
} }

View File

@ -48,12 +48,9 @@ function TrainManage(){
<p>关闭时间2024-11-5</p> <p>关闭时间2024-11-5</p>
</li> </li>
</ul> </ul>
<Link to='/teacher/trainmanage/TrainPods' >管理实训</Link> <Link to='/teacher/trainmanage/TrainPods' className='ManagePods' >管理实训</Link>
<Link to='/teacher/SendTrain' className='sendtestpage'>前往发布实训</Link> <Link to='/teacher/SendTrain' className='sendtestpage'>发布实训</Link>
</div>} </div>}
<button onClick={()=>{
console.log(Data);
}}></button>
</div> </div>
) )
} }

View File

@ -145,6 +145,7 @@ function Operation1() {
localStorage.setItem('answeredComple',answeredComple) localStorage.setItem('answeredComple',answeredComple)
localStorage.setItem('answeredJudge',answeredJudge) localStorage.setItem('answeredJudge',answeredJudge)
localStorage.setItem('TrainData',JSON.stringify(TrainData)) localStorage.setItem('TrainData',JSON.stringify(TrainData))
localStorage.setItem('score',score)
}; };
@ -205,6 +206,7 @@ function Operation1() {
} }
JUD_sum++ JUD_sum++
} }
alert('保存成功')
} }
// //
@ -349,9 +351,7 @@ function Operation1() {
</tbody> </tbody>
</table> </table>
)} )}
<button onClick={click}>测试</button> <button onClick={submit}>保存答案</button>
<button onClick={clear}>清除测试</button>
<button onClick={submit}>假提交按钮</button>
<Link to={`/operation2/${operateID}`}><button onClick={saveAnswers}>下一页</button></Link> <Link to={`/operation2/${operateID}`}><button onClick={saveAnswers}>下一页</button></Link>
</div> </div>
</div> </div>

View File

@ -12,6 +12,7 @@ import axios from 'axios';
import Test from '../../../TeacherPages/TestManage/Test'; import Test from '../../../TeacherPages/TestManage/Test';
function Operation2() { function Operation2() {
const student_ID=localStorage.getItem('islogin') const student_ID=localStorage.getItem('islogin')
const score=localStorage.getItem('score')
const { operateID } = useParams(); const { operateID } = useParams();
const [isTrue,setisTrue]=useState(false) const [isTrue,setisTrue]=useState(false)
@ -100,6 +101,7 @@ function Operation2() {
localStorage.removeItem('answeredComple') localStorage.removeItem('answeredComple')
localStorage.removeItem('answeredJudge') localStorage.removeItem('answeredJudge')
localStorage.removeItem('RemainingTime') localStorage.removeItem('RemainingTime')
localStorage.removeItem('score')
alert('提交成功') alert('提交成功')
window.location.href='/train' window.location.href='/train'
localStorage.removeItem('TrainData') localStorage.removeItem('TrainData')
@ -163,9 +165,6 @@ function Operation2() {
<Link to={Src[8]}>{Src[8]}</Link> <Link to={Src[8]}>{Src[8]}</Link>
<br /> <br />
点击以上链接前往实训 点击以上链接前往实训
<button onClick={()=>{
console.log(Src);
}}>dads</button>
</div> </div>
} }
{/* 前端连接数据库 ⬆*/} {/* 前端连接数据库 ⬆*/}

View File

@ -299,23 +299,30 @@ def GetTrain():
data=getTrainFunc(teacherID) data=getTrainFunc(teacherID)
return jsonify({'data':data}) return jsonify({'data':data})
@app.route('/api/teacher/FindSrc',methods=["POST"])
def FindSrc():
testID=request.json['key']
studentID=request.json['ID']
data=FindSrcFunc(studentID,testID)
return jsonify({'data':data})
@app.route("/api/teacher/list_pods") # 列出pod @app.route("/api/teacher/list_pods",methods=['POST']) # 列出pod
def teacher_list_pods(): def teacher_list_pods():
return jsonify(list_pods()) return list_pods()
@app.route("/api/teacher/list_services") # 列出服务 @app.route("/api/teacher/list_services") # 列出服务
def teacher_list_services(): def teacher_list_services():
return list_services() return list_services()
@app.route("/api/teacher/create_pod") # 创建服务 1为项目实训 0为安装实训 # @app.route("/api/teacher/create_pod") # 创建服务 1为项目实训 0为安装实训
def teacher_create_pod(): # def teacher_create_pod():
create_pod(1, "test2") # create_pod(1, "test2")
#
@app.route("/api/teacher/delete_pod") # 删除服务 @app.route("/api/teacher/delete_pod",methods=['POST']) # 删除服务
def teacher_delete_pod(): def teacher_delete_pod():
return delete_pod("test2") name=request.json['name']
return delete_pod(name=name)
@app.route("/api/student/check_pod",methods=['POST']) # 检测数据库是否安装成功 若成功返回OK 否则返回NO @app.route("/api/student/check_pod",methods=['POST']) # 检测数据库是否安装成功 若成功返回OK 否则返回NO
def teacher_check_pod(): def teacher_check_pod():
@ -323,7 +330,7 @@ def teacher_check_pod():
testID=request.json["operateID"] testID=request.json["operateID"]
name= 'n' + str(name) + '-' + str(testID) name= 'n' + str(name) + '-' + str(testID)
result = check_dm(name) result = check_dm(name)
return jsonify({'result':result}) return jsonify(result)
@app.route('/') @app.route('/')
@app.route('/<path:path>') @app.route('/<path:path>')

View File

@ -17,8 +17,8 @@ spec:
runAsGroup: 0 runAsGroup: 0
resources: resources:
limits: limits:
cpu: '1'
memory: 1.2Gi
requests:
cpu: '0.2' cpu: '0.2'
memory: 0.2Gi memory: 0.2Gi
requests:
cpu: '0.1'
memory: 0.1Gi

View File

@ -15,8 +15,8 @@ spec:
runAsGroup: 0 runAsGroup: 0
resources: resources:
limits: limits:
cpu: '1.3' cpu: '0.2'
memory: 1.3Gi memory: 0.2Gi
requests: requests:
cpu: '0.3' cpu: '0.1'
memory: 0.3Gi memory: 0.1Gi

View File

@ -1,5 +1,5 @@
import k8s_func import k8s_func
studentList=['n20240101-56','n20240102-56','s20240101-52','s20240102-52'] studentList=['n20240101-63','n20240102-63','s20240101-66']
for i in studentList: for i in studentList:
k8s_func.delete_pod(i) k8s_func.delete_pod(i)

View File

@ -388,3 +388,13 @@ def getTrainFunc(teacherID):
data = cursor.fetchall() data = cursor.fetchall()
return data return data
def FindSrcFunc(studentID, testID):
cursor = db.cursor()
cursor.execute(f'SELECT LINK,LINK2,LINK3 FROM TRAINSCORE WHERE STUDENT_ID=? AND TEST_ID=?',(studentID,testID))
data = cursor.fetchall()
cursor.close()
return data
# FindSrcFunc('20240101','68')

View File

@ -1,29 +1,4 @@
import json print('a')
import dmPython
import k8s_func
db = dmPython.connect(user='SYSDBA', password='dameng!!', host="36.138.114.105", port="32522")
cursor=db.cursor()
studentList=['20240101','20240102']
testID='5'
type1=2
for i in studentList:
if type1==1:
name='s'+i+'-'+testID
# k8s_func.create_pod(type1,name)
item=k8s_func.list_services()
for j in item['list']:
if j['name']==name+'-service':
Link = 'http://36.138.114.105/' + str(j['ports'][0]['node_port'])
Link2 = 'http://36.138.114.105/' + str(j['ports'][1]['node_port'])
Link3 = 'http://36.138.114.105/' + str(j['ports'][2]['node_port'])
else:
name='n'+i+'-'+testID
# k8s_func.create_pod(0,name)
item=k8s_func.list_services()
for j in item['list']:
if j['name']==name+'-service':
Link=j['ip']
print(Link)