forked from Open-CT/OpenPBL
feat: teacher update score of submits
This commit is contained in:
parent
8c29ac1a79
commit
34283671a7
|
@ -95,19 +95,15 @@ func (p *ProjectController) UpdateSubmit() {
|
|||
p.ServeJSON()
|
||||
return
|
||||
}
|
||||
if user.Tag != "student" {
|
||||
resp = Response{
|
||||
Code: 403,
|
||||
Msg: "非法用户",
|
||||
var uid string
|
||||
if user.Tag == "student" {
|
||||
uid = user.Username
|
||||
}
|
||||
p.Data["json"] = resp
|
||||
p.ServeJSON()
|
||||
return
|
||||
}
|
||||
uid := user.Username
|
||||
tid, err := p.GetInt64(":taskId")
|
||||
sid, err := p.GetInt64(":submitId")
|
||||
pid, err := p.GetInt64(":projectId")
|
||||
score, err := p.GetInt("score")
|
||||
scored, err := p.GetBool("scored")
|
||||
f := &models.Submit{
|
||||
Id: sid,
|
||||
ProjectId: pid,
|
||||
|
@ -119,16 +115,18 @@ func (p *ProjectController) UpdateSubmit() {
|
|||
SubmitContent: p.GetString("submitContent"),
|
||||
FilePath: p.GetString("filePath"),
|
||||
CreateAt: time.Now(),
|
||||
Score: score,
|
||||
Scored: scored,
|
||||
}
|
||||
var c =make([]models.Choice, 0)
|
||||
if f.SubmitType == "survey" {
|
||||
var c = make([]models.Choice, 0)
|
||||
if user.Tag == "student" && f.SubmitType == "survey" {
|
||||
err = json.Unmarshal([]byte(p.GetString("choices")), &c)
|
||||
}
|
||||
err = f.Update(c)
|
||||
if err != nil {
|
||||
p.Data["json"] = Response{
|
||||
Code: 400,
|
||||
Msg: "提交失败",
|
||||
Msg: err.Error(),
|
||||
}
|
||||
} else {
|
||||
p.Data["json"] = Response{
|
||||
|
@ -138,4 +136,3 @@ func (p *ProjectController) UpdateSubmit() {
|
|||
}
|
||||
p.ServeJSON()
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ type TaskResponse struct {
|
|||
Tasks []models.TaskDetail `json:"tasks"`
|
||||
Learning bool `json:"learning"`
|
||||
Editable bool `json:"editable"`
|
||||
TeacherScore bool `json:"teacherScore"`
|
||||
}
|
||||
|
||||
// GetSectionTasksDetail
|
||||
|
@ -124,16 +125,18 @@ func (p *ProjectController) GetProjectTasksDetail() {
|
|||
}
|
||||
|
||||
showSubmit := false
|
||||
teacherScore := false
|
||||
uid := user.Username
|
||||
editable := true
|
||||
pid := p.GetString(":projectId")
|
||||
|
||||
|
||||
if user.Tag == "teacher" {
|
||||
uid = p.GetString("studentId")
|
||||
showSubmit = true
|
||||
editable = false
|
||||
teacherScore = true
|
||||
}
|
||||
|
||||
pid := p.GetString(":projectId")
|
||||
if user.Tag != "student" {
|
||||
learning = false
|
||||
} else {
|
||||
|
@ -161,6 +164,7 @@ func (p *ProjectController) GetProjectTasksDetail() {
|
|||
Tasks: tasks,
|
||||
Learning: learning,
|
||||
Editable: editable,
|
||||
TeacherScore: teacherScore,
|
||||
}
|
||||
}
|
||||
p.ServeJSON()
|
||||
|
|
|
@ -70,7 +70,7 @@ func (p *Submit) Create(c []Choice) (err error) {
|
|||
}
|
||||
func (p *Submit) Update(c []Choice) (err error) {
|
||||
_, err = p.GetEngine().ID(p.Id).Update(p)
|
||||
if p.SubmitType == "survey" {
|
||||
if len(c) > 0 && p.SubmitType == "survey" {
|
||||
var cs []Choice
|
||||
err = (&Choice{}).GetEngine().
|
||||
Where("submit_id = ?", p.Id).
|
||||
|
@ -83,7 +83,6 @@ func (p *Submit) Update(c []Choice) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
|
||||
func CountSubmit(c []Choice, cl []Choice, taskId int64) {
|
||||
|
||||
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
import React, {useEffect, useState} from "react";
|
||||
import {Collapse, Divider, List, Progress} from "antd";
|
||||
import {Collapse, Divider, Input, List, Progress, message, InputNumber, Tooltip, Button} from "antd";
|
||||
|
||||
import TaskApi from "../../../../api/TaskApi";
|
||||
import ChapterApi from "../../../../api/ChapterApi";
|
||||
import TaskCard from "../../PreviewProject/component/TaskCard";
|
||||
import util from "../../component/Util"
|
||||
import SubmitApi from "../../../../api/SubmitApi";
|
||||
|
||||
function StudentEvidence(obj) {
|
||||
const pid = obj.project === undefined ? obj.pid : obj.project.id
|
||||
|
@ -12,6 +13,7 @@ function StudentEvidence(obj) {
|
|||
const [tasks, setTasks] = useState([])
|
||||
const [learning, setLearning] = useState(false)
|
||||
const [editable, setEditable] = useState(false)
|
||||
const [teacherScore, setTeacherScore] = useState(false)
|
||||
const [chapters, setChapters] = useState([])
|
||||
const [showMinute, setShowMinute] = useState(false)
|
||||
|
||||
|
@ -66,6 +68,7 @@ function StudentEvidence(obj) {
|
|||
setTasks(t)
|
||||
setLearning(res.data.learning)
|
||||
setEditable(res.data.editable)
|
||||
setTeacherScore(res.data.teacherScore)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -73,6 +76,23 @@ function StudentEvidence(obj) {
|
|||
console.log(e)
|
||||
})
|
||||
}
|
||||
const changeScore = (v, index) => {
|
||||
tasks[index].submit.score = v
|
||||
setTasks([...tasks])
|
||||
}
|
||||
const saveScore = (index) => {
|
||||
tasks[index].submit.scored = true
|
||||
SubmitApi.updateSubmit(pid, tasks[index].id, tasks[index].submit.id, tasks[index].submit)
|
||||
.then(res=>{
|
||||
if (res.data.code === 200) {
|
||||
message.success(res.data.msg)
|
||||
getTasks()
|
||||
} else {
|
||||
message.error(res.data.msg)
|
||||
}
|
||||
})
|
||||
.catch(e=>{console.log(e)})
|
||||
}
|
||||
const getScore = (score, weight) => {
|
||||
return (score * weight / 100).toFixed(2)
|
||||
}
|
||||
|
@ -162,6 +182,23 @@ function StudentEvidence(obj) {
|
|||
</>
|
||||
}
|
||||
>
|
||||
{teacherScore ?
|
||||
<div>
|
||||
<span style={{float: 'right'}}>
|
||||
<Button type="primary" disabled={!item.submitted} onClick={e=>saveScore(index)}>保存</Button>
|
||||
</span>
|
||||
<span style={{float: 'right', marginRight: '10px'}}>
|
||||
<InputNumber value={item.submit.score} disabled={!item.submitted} onChange={v=>changeScore(v, index)} min={0} max={100} /> / 100
|
||||
</span>
|
||||
<Tooltip title="满分为100分,系统自动根据权重计算本题实际分数">
|
||||
<span style={{float: 'right', marginRight: '10px'}}><p>教师评分:</p></span>
|
||||
</Tooltip>
|
||||
<br/>
|
||||
<Divider />
|
||||
</div>
|
||||
: null
|
||||
}
|
||||
|
||||
<TaskCard
|
||||
pid={pid}
|
||||
item={item}
|
||||
|
|
|
@ -45,18 +45,18 @@ func init() {
|
|||
|
||||
beego.GlobalControllerRouter["OpenPBL/controllers:ProjectController"] = append(beego.GlobalControllerRouter["OpenPBL/controllers:ProjectController"],
|
||||
beego.ControllerComments{
|
||||
Method: "UpdateProject",
|
||||
Method: "GetProjectDetail",
|
||||
Router: "/:id",
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
AllowHTTPMethods: []string{"get"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["OpenPBL/controllers:ProjectController"] = append(beego.GlobalControllerRouter["OpenPBL/controllers:ProjectController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetProjectDetail",
|
||||
Method: "UpdateProject",
|
||||
Router: "/:id",
|
||||
AllowHTTPMethods: []string{"get"},
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
@ -279,18 +279,18 @@ func init() {
|
|||
|
||||
beego.GlobalControllerRouter["OpenPBL/controllers:ProjectController"] = append(beego.GlobalControllerRouter["OpenPBL/controllers:ProjectController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetSurveyDetailByTaskId",
|
||||
Method: "CreateSurvey",
|
||||
Router: "/:projectId/task/:taskId/survey",
|
||||
AllowHTTPMethods: []string{"get"},
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["OpenPBL/controllers:ProjectController"] = append(beego.GlobalControllerRouter["OpenPBL/controllers:ProjectController"],
|
||||
beego.ControllerComments{
|
||||
Method: "CreateSurvey",
|
||||
Method: "GetSurveyDetailByTaskId",
|
||||
Router: "/:projectId/task/:taskId/survey",
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
AllowHTTPMethods: []string{"get"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
|
Loading…
Reference in New Issue