提交 b6d51968 authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 72a9cb18
...@@ -30,6 +30,7 @@ export interface ExperimentItem { ...@@ -30,6 +30,7 @@ export interface ExperimentItem {
requirements: string requirements: string
content: string content: string
procedure: string procedure: string
stu_commit_count: number
} }
export interface ExperimentCreateItem { export interface ExperimentCreateItem {
......
...@@ -132,13 +132,15 @@ function handleUpdateGradeRules(row: ExperimentItem) { ...@@ -132,13 +132,15 @@ function handleUpdateGradeRules(row: ExperimentItem) {
</template> </template>
<template #table-x="{ row }: { row: ExperimentItem }"> <template #table-x="{ row }: { row: ExperimentItem }">
<el-button type="info" round style="width: 132px; margin-bottom: 12px" @click="handleUpdateGradeRules(row)" <template v-if="!row.stu_commit_count">
>编辑成绩规则</el-button <el-button type="info" round style="width: 132px; margin-bottom: 12px" @click="handleUpdateGradeRules(row)"
><br /> >编辑成绩规则</el-button
<el-button type="info" round style="width: 132px; margin-bottom: 12px"> ><br />
<router-link :to="`/admin/lab/experiment/report/${row.id}`" target="_blank">编辑报告规则</router-link> <el-button type="info" round style="width: 132px; margin-bottom: 12px">
</el-button> <router-link :to="`/admin/lab/experiment/report/${row.id}`" target="_blank">编辑报告规则</router-link>
<br /> </el-button>
<br />
</template>
<el-button type="primary" round v-permission="'v1-backend-experiment-view'"> <el-button type="primary" round v-permission="'v1-backend-experiment-view'">
<router-link :to="`/admin/lab/experiment/${row.id}`" target="_blank">查看</router-link> <router-link :to="`/admin/lab/experiment/${row.id}`" target="_blank">查看</router-link>
</el-button> </el-button>
......
...@@ -56,7 +56,12 @@ export function getExperimentReport(params: { experiment_id: string; student_id: ...@@ -56,7 +56,12 @@ export function getExperimentReport(params: { experiment_id: string; student_id:
return httpRequest.get('/api/lab/v1/teacher/experiment/report-achievement', { params }) return httpRequest.get('/api/lab/v1/teacher/experiment/report-achievement', { params })
} }
// 批改学员实验报告成绩 // 批改学员实验报告成绩
export function updateExperimentReport(data: { experiment_id: string; student_id: string; score_detail: string }) { export function updateExperimentReport(data: {
experiment_id: string
student_id: string
score_detail: string
comment: string
}) {
return httpRequest.post('/api/lab/v1/teacher/experiment/report-check', data) return httpRequest.post('/api/lab/v1/teacher/experiment/report-check', data)
} }
......
...@@ -147,7 +147,9 @@ const resultVisible = $ref(false) ...@@ -147,7 +147,9 @@ const resultVisible = $ref(false)
:header-cell-style="{ background: '#ededed' }" :header-cell-style="{ background: '#ededed' }"
style="margin-top: 20px"> style="margin-top: 20px">
<el-table-column label="实验成绩组成项" prop="name" align="center"></el-table-column> <el-table-column label="实验成绩组成项" prop="name" align="center"></el-table-column>
<el-table-column label="权重" prop="percent" align="center"> </el-table-column> <el-table-column label="权重" prop="percent" align="center">
<template #default="{ row }"> {{ row.percent }}% </template>
</el-table-column>
<el-table-column label="得分" prop="commit_score" align="center"></el-table-column> <el-table-column label="得分" prop="commit_score" align="center"></el-table-column>
<el-table-column label="操作" prop="commit_score" align="center"> <el-table-column label="操作" prop="commit_score" align="center">
<template #default="{ row }"> <template #default="{ row }">
......
<script setup> <script setup>
import { ElMessage } from 'element-plus'
import { getExperimentScore, getExperimentReport, updateExperimentReport } from '../api' import { getExperimentScore, getExperimentReport, updateExperimentReport } from '../api'
import { reportScoreRule } from '@/utils/dictionary' import { reportScoreRule } from '@/utils/dictionary'
...@@ -7,12 +8,16 @@ const route = useRoute() ...@@ -7,12 +8,16 @@ const route = useRoute()
let experiment = $ref() let experiment = $ref()
let report = $ref() let report = $ref()
const formRef = $ref()
const form = reactive({ const form = reactive({
experiment_id: route.query.experiment_id, experiment_id: route.query.experiment_id,
student_id: route.query.student_id, student_id: route.query.student_id,
score_detail: [] score_detail: [],
comment: ''
})
const rules = reactive({
// comment: [{ required: true, message: '请输入评语', trigger: 'blur' }]
}) })
const teacherText = $computed(() => { const teacherText = $computed(() => {
if (!experiment) return '' if (!experiment) return ''
return experiment.teachers.map(item => item.name).join('、') return experiment.teachers.map(item => item.name).join('、')
...@@ -36,6 +41,7 @@ function fetchReport() { ...@@ -36,6 +41,7 @@ function fetchReport() {
} catch (error) { } catch (error) {
console.log(error) console.log(error)
} }
form.comment = report.comment || ''
form.score_detail = detail.map(item => { form.score_detail = detail.map(item => {
item.min_score = parseFloat(item.min_score) item.min_score = parseFloat(item.min_score)
item.commit_score = item.commit_score ? parseFloat(item.commit_score) : 0 item.commit_score = item.commit_score ? parseFloat(item.commit_score) : 0
...@@ -57,21 +63,39 @@ const score = $computed(() => { ...@@ -57,21 +63,39 @@ const score = $computed(() => {
}) })
function handleSubmit() { function handleSubmit() {
const params = { ...form, score_detail: JSON.stringify(form.score_detail) } formRef?.validate().then(() => {
updateExperimentReport(params).then(res => { const params = { ...form, score_detail: JSON.stringify(form.score_detail) }
console.log(res) updateExperimentReport(params).then(res => {
console.log(res)
ElMessage.success('批改成功')
})
}) })
} }
// 关闭 // 关闭
function handleClose() { function handleClose() {
window.close() window.close()
} }
function scoreValue(value) {
if (typeof value !== 'number' && !value) {
return '--'
} else {
return value
}
}
</script> </script>
<template> <template>
<AppCard title="批改实验报告"> <AppCard title="批改实验报告">
<h1 class="report-title">实验报告</h1> <h1 class="report-title">实验报告</h1>
<el-form label-suffix=":" hide-required-asterisk v-if="experiment && report"> <el-form
ref="formRef"
:model="form"
:rules="rules"
label-suffix=":"
hide-required-asterisk
scroll-to-error
v-if="experiment && report">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="课程名称">{{ experiment.course.name }}</el-form-item> <el-form-item label="课程名称">{{ experiment.course.name }}</el-form-item>
...@@ -113,16 +137,21 @@ function handleClose() { ...@@ -113,16 +137,21 @@ function handleClose() {
</el-col> </el-col>
</el-row> </el-row>
<el-divider /> <el-divider />
<p class="report-score">总分:{{ score || '--' }}</p> <p class="report-score">总分:{{ scoreValue(score) }}</p>
<el-form-item v-for="(item, index) in form.score_detail" :key="item.id" class="report-form-item"> <el-form-item
v-for="(item, index) in form.score_detail"
:key="item.id"
:prop="'score_detail.' + index + '.commit_score'"
:rules="{ required: true, message: '请输入该项得分', trigger: 'blur' }"
class="report-form-item">
<div class="form-hd"> <div class="form-hd">
<h3>{{ index + 1 }}{{ item.name }}</h3> <h3>{{ index + 1 }}{{ item.name }}</h3>
<div> <div>
<span class="score">{{ item.score }}</span> <span>{{ item.score }}</span>
<span class="rule-mode">{{ reportScoreRule[item.rule_mode] }}</span> <span>{{ reportScoreRule[item.rule_mode] }}</span>
</div> </div>
<div> <div>
<p class="score">得分:{{ item.commit_score }}</p> <span>得分:{{ scoreValue(item.commit_score) }}</span>
<el-input-number <el-input-number
v-model="item.commit_score" v-model="item.commit_score"
:min="item.min_score" :min="item.min_score"
...@@ -162,13 +191,52 @@ function handleClose() { ...@@ -162,13 +191,52 @@ function handleClose() {
{{ item.question_stem }} {{ item.question_stem }}
<div class="report-form-item__content" v-html="item.content"></div> <div class="report-form-item__content" v-html="item.content"></div>
</template> </template>
<p>评语:</p> <div class="report-form-item-comment">
<el-input type="textarea" maxlength="200" v-model="item.comment" placeholder="请填写评语" :autosize="{ minRows: 4 }"></el-input> <div class="report-form-item-comment_hd">
<p>评语:</p>
<div>
<span>快速评语:</span>
<el-button
type="primary"
size="small"
@click="item.comment = '此部分内容填写完善,内容充实,符合本实验相应要求。'"
>很好</el-button
>
<el-button
type="primary"
size="small"
@click="
item.comment = '此部分内容填写较为完善,内容较为充实,比较符合本实验相应要求,但仍然有提升空间。'
"
>一般</el-button
>
<el-button
type="primary"
size="small"
@click="item.comment = '此部分内容仍然有提升空间,建议继续针对该实验进行相应训练,加油!'"
>鼓励</el-button
>
</div>
</div>
<el-input
type="textarea"
maxlength="200"
v-model="item.comment"
placeholder="请填写评语"
:autosize="{ minRows: 3 }"></el-input>
</div>
</el-form-item>
<el-form-item prop="comment">
<p class="t2">实验整体评语</p>
<el-input
type="textarea"
maxlength="500"
v-model="form.comment"
placeholder="请填写评语"
:autosize="{ minRows: 8 }"></el-input>
</el-form-item> </el-form-item>
<p>实验整体评语:</p>
<el-input type="textarea" maxlength="500" placeholder="请填写评语" :autosize="{ minRows: 6 }"></el-input>
</el-form> </el-form>
<el-row justify="center"> <el-row justify="center" style="margin: 40px 0">
<el-button type="primary" round auto-insert-space @click="handleSubmit">保存</el-button> <el-button type="primary" round auto-insert-space @click="handleSubmit">保存</el-button>
<el-button round auto-insert-space @click="handleClose">关闭</el-button> <el-button round auto-insert-space @click="handleClose">关闭</el-button>
</el-row> </el-row>
...@@ -186,17 +254,18 @@ function handleClose() { ...@@ -186,17 +254,18 @@ function handleClose() {
font-size: 24px; font-size: 24px;
font-weight: bold; font-weight: bold;
color: var(--main-color); color: var(--main-color);
margin: 40px 0;
} }
.report-form-item { .report-form-item {
margin-bottom: 40px;
.form-hd { .form-hd {
display: flex; display: flex;
width: 100%; width: 100%;
font-size: 14px; font-size: 14px;
font-weight: bold; font-weight: bold;
justify-content: space-between; justify-content: space-between;
.rule-mode { span {
width: 100px; padding: 0 40px;
text-align: right;
} }
} }
} }
...@@ -208,4 +277,24 @@ function handleClose() { ...@@ -208,4 +277,24 @@ function handleClose() {
border-radius: 6px; border-radius: 6px;
box-sizing: border-box; box-sizing: border-box;
} }
.report-form-item-comment {
width: 100%;
padding: 20px 0;
}
.report-form-item-comment_hd {
margin-bottom: 10px;
display: flex;
align-items: center;
justify-content: space-between;
line-height: 32px;
}
.t2 {
margin: 40px 0 20px;
width: 100%;
color: #fff;
background-color: var(--main-color);
text-align: center;
line-height: 40px;
}
</style> </style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论