forgeplus-react/src/glcc/interimReview/tutorReview.jsx

172 lines
7.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React, {useState, useEffect, useCallback} from "react";
import { Form, Input, Icon, Button, Tabs, Radio, message } from "antd";
import { Link } from "react-router-dom";
import bg from '../img/bgPng.png';
import { getAuditList, getMediumTermExamineInfo, submitTutorEvaluation, updateTutorEvaluation } from '../api';
import './index.scss';
import '../check/index.scss'
import Nodata from "../../forge/Nodata";
import {httpUrl} from '../fetch';
const { TabPane } = Tabs;
const { TextArea } = Input;
function TutorReview(props){
const {form, current_user, showNotification, checkTime2} = props;
const {getFieldDecorator, setFieldsValue, validateFieldsAndScroll } = form;
const [taskId, setTaskId] = useState();
const [taskList, setTaskList] = useState([]);
const [wordNum, setWordNum] = useState(0);
const [detail, setDetail] = useState(undefined);
const [reload, setReload] = useState(undefined);
useEffect(() => {
if(!checkTime2){
window.location.href="/glcc";
}else{
getAuditList({ userId: current_user.user_id, pass: 1 }).then(res => {
if (res.message == 'success') {
setTaskList(res.data.rows);
res.data.rows.length && setTaskId(res.data.rows[0].id);
} else {
res && showNotification(res.message || '查询课题列表失败');
}
})
}
}, [])
useEffect(()=>{
// 查询是否已经提交考核材料
taskId && getMediumTermExamineInfo(taskId).then(res=>{
if(res && res.message === "success"){
setDetail(res.data);
if(res && res.data && res.data.glccTutorEvaluation){
const {totalityEvaluation, comment} = res.data.glccTutorEvaluation;
console.log('totalityEvaluation', totalityEvaluation, comment);
setFieldsValue({...res.data.glccTutorEvaluation});
}
}
})
},[taskId, reload])
// 学生提交材料
function submit(e){
e.preventDefault();
validateFieldsAndScroll((err, values) => {
console.log('aaa', err, values);
if(!err){
const params = {
...values,
mediumTermExamineMaterialId: detail.id,
tutorUserId: detail.studentRegId
}
if(detail.glccTutorEvaluation){
params['id'] = detail.glccTutorEvaluation.id;
updateTutorEvaluation(params).then(res=>{
if(res && res.message === "success"){
console.log('评论', res);
message.success("修改成功");
setReload(Math.random());
}
})
}else{
submitTutorEvaluation(params).then(res=>{
if(res && res.message === "success"){
console.log('评论', res);
message.success("您已成功评分");
setReload(Math.random());
}
})
}
}
})
}
const RadioGroup = <Radio.Group>
<Radio value={'A'}>A</Radio>
<Radio value={'B'}>B</Radio>
<Radio value={'C'}>C</Radio>
<Radio value={'D'}>D</Radio>
</Radio.Group>;
const helper = useCallback(
(label, name, rules, widget, className) => (
<Form.Item label={label} className={`referItem ${className}`}>
{getFieldDecorator(name, { rules, validateFirst: true })(widget)}
</Form.Item>
),[taskId, reload]
);
return <div className="interimBox glcc-check">
<img src={bg} alt="" className="bg1"/>
<img src={bg} alt="" className="bg2"/>
<div className="mainBox">
<div className="navBox font-16"><Link to={`/glcc`} className="linkBox">开源夏令营 / </Link></div>
<div className="tipBox mt30">
<div className="font-15 spanBox">导师考核说明:</div>
<div>1请各位导师根据工作态度开发进度项目完成质量总体评分四个角度根据学生提交的考核材料与实际开发情况客观地进行打分打分标准分为S:特别优秀A:优秀B:良好C:合格D:不合格五个等级</div>
<div>2总体评分这一项将决定学生是否通过本次考核若总体评分为SABC则视为通过中期考核若该结果为D则该课题中期考核不通过课题将自动终止请各位导师谨慎做出评价</div>
<div>3在审核阶段 (<span className="spanBox">2022年8月12日10点至2022年8月24日24点</span>) </div>
<div>4北京时间<span className="spanBox">2022年8月26日20点</span>GLCC</div>
</div>
<div className="tutorContent">
<Tabs className="task-tabs" onChange={(e) => { setTaskId(e) }} activeKey={taskId + ''}>
{
taskList.map((item, i) => {
return <TabPane tab={`课题${i + 1}`} key={item.id} >
<div className="task-title-stuName font-16">{item.studentName} {item.taskName}</div>
</TabPane>
})
}
</Tabs>
{detail ? <div className="reviewBox">
{/* 学生提交的资料 */}
<div className="stuCont pl20 pr20">
<div className="title font-16 mb15"><span className="blueBox"></span></div>
<div className="flexBox">
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;答辩视频:<a className="blueSpan ml10" href={detail.defenceVideoUrl} target="_blank">{detail.defenceVideoUrl}</a></div>
<div>代码/pr地址:<a className="blueSpan ml10" href={detail.codeOrPrUrl} target="_blank">{detail.codeOrPrUrl}</a></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PPT附件:<i className="iconfont icon-lianjie3 font-13 mr5 ml10"></i><a className="mr10 pptAttachment" href={`${httpUrl}/busiAttachments/download/${detail.pptAttachment.id}`}>{detail.pptAttachment.fileName}</a>{detail.pptAttachment.fileSizeString}</div>
</div>
</div>
<div className="title font-16 pl20 mt25"><span className="blueBox"></span></div>
{/* 导师打分 */}
<Form className="referBox tutor" onSubmit={submit} labelAlign="left" labelCol={{ span: 5 }} colon={false}>
{helper('工作态度',
'workAttitudeEvaluation',
[{ required: true, message: "请打分" }],
RadioGroup
)}
{helper('工作进度',
'developProgressEvaluation',
[{ required: true, message: "请打分" }],
RadioGroup
)}
{helper('项目完成质量',
'projectQualityEvaluation',
[{ required: true, message: "请打分" }],
RadioGroup
)}
{helper('总体评分',
'totalityEvaluation',
[{ required: true, message: "请打分" }],
RadioGroup
)}
<div className="remarkBox">
{helper('填写评语',
'comment',
[{ required: true, message: "请输入评语!" }],
<TextArea rows={8} placeholder="请对学生项目表现进行总体评价" className="contentBox" maxLength={500} onChange={(e)=>{setWordNum(e.target.value.length);}}/>,
'oneCont'
)}
<div className="wordNum">{wordNum} / 500</div>
</div>
<Form.Item className="referItem oneCont">
<Button style={{width: '100px', height: '36px'}} className="mt20" type="primary" htmlType="submit">{detail.glccTutorEvaluation ? '修改' : '提交'}</Button>
</Form.Item>
</Form>
</div>:<Nodata _html="该课题学生暂未提交中期考核材料,请提醒学生尽快提交"/>}
</div>
</div>
</div>
}
export default Form.create()(TutorReview);