Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-lab
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-lab
Commits
5fee6261
提交
5fee6261
authored
11月 15, 2022
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
dba3278d
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
134 行增加
和
27 行删除
+134
-27
ScoringRulesDialog.vue
...les/admin/contest/items/components/ScoringRulesDialog.vue
+4
-2
api.ts
src/modules/admin/lab/experiment/api.ts
+22
-0
GradeRulesDialog.vue
...ules/admin/lab/experiment/components/GradeRulesDialog.vue
+108
-25
report.vue
src/modules/admin/lab/experiment/mixins/report.vue
+0
-0
没有找到文件。
src/modules/admin/contest/items/components/ScoringRulesDialog.vue
浏览文件 @
5fee6261
...
...
@@ -141,7 +141,9 @@ function handleRatioChange(row: any, index: number) {
return
result
},
0
)
// 最大可输入占比
row
.
ratio
=
Math
.
min
(
100
-
otherTotal
,
row
.
ratio
)
nextTick
(()
=>
{
row
.
ratio
=
Math
.
min
(
100
-
otherTotal
,
row
.
ratio
)
})
}
</
script
>
...
...
@@ -259,7 +261,7 @@ function handleRatioChange(row: any, index: number) {
}
.total
{
width
:
100%
;
padding
:
10px
6
0px
;
padding
:
10px
9
0px
;
text-align
:
right
;
box-sizing
:
border-box
;
p
{
...
...
src/modules/admin/lab/experiment/api.ts
浏览文件 @
5fee6261
...
...
@@ -71,3 +71,25 @@ export function experimentGroupAddStudent(data: { team_id: string; students_id:
export
function
getExperimentGroupStudentList
(
params
:
{
team_id
:
string
;
page
?:
number
;
'per-page'
?:
number
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/experiment/team-add-student'
,
{
params
})
}
// 获取实验成绩规则
export
function
getExperimentGradeRule
(
params
:
{
experiment_id
:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/experiment-score-rule/detail'
,
{
params
})
}
// 更新实验成绩规则
export
function
updateExperimentGradeRule
(
data
:
{
experiment_id
:
string
;
is_show
:
string
;
rule_list
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/backend/experiment-score-rule/save'
,
data
)
}
// 获取实验报告规则
export
function
getExperimentReportRule
(
params
:
{
experiment_id
:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/experiment-report/detail'
,
{
params
})
}
// 更新实验报告规则
export
function
updateExperimentReportRule
(
data
:
{
experiment_id
:
string
report_upload_way
:
number
detail_list
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/backend/experiment-report/save'
,
data
)
}
src/modules/admin/lab/experiment/components/GradeRulesDialog.vue
浏览文件 @
5fee6261
...
...
@@ -2,47 +2,86 @@
import
type
{
FormInstance
}
from
'element-plus'
import
type
{
ExperimentItem
}
from
'../types'
import
{
Plus
}
from
'@element-plus/icons-vue'
import
{
gradeRuleList
}
from
'@/utils/dictionary'
import
{
ElMessage
}
from
'element-plus'
import
{
gradeRule
,
gradeRuleList
}
from
'@/utils/dictionary'
import
{
getExperimentGradeRule
,
updateExperimentGradeRule
}
from
'../api'
interface
Props
{
data
:
ExperimentItem
}
defineProps
<
Props
>
()
const
props
=
defineProps
<
Props
>
()
defineEmits
<
{
const
emit
=
defineEmits
<
{
(
e
:
'update'
):
void
(
e
:
'update:modelValue'
,
visible
:
boolean
):
void
}
>
()
const
formRef
=
$ref
<
FormInstance
>
()
const
form
=
reactive
<
any
>
({
is_show
:
1
,
rule_list
:
[
{
id
:
'232'
,
name
:
'实验报告'
,
type
:
1
,
percent
:
100
,
rule_mode
:
1
is_show
:
'1'
,
rule_list
:
[{
name
:
'实验报告'
,
type
:
1
,
percent
:
100
,
rule_mode
:
1
}]
})
function
fetchInfo
()
{
getExperimentGradeRule
({
experiment_id
:
props
.
data
.
id
}).
then
(
res
=>
{
const
{
detail
}
=
res
.
data
if
(
!
detail
.
id
)
return
let
ruleList
=
[]
try
{
ruleList
=
JSON
.
parse
(
detail
.
rule_list
).
map
((
item
:
any
)
=>
{
return
{
...
item
,
percent
:
parseFloat
(
item
.
percent
)
}
})
}
catch
(
error
)
{
console
.
log
(
error
)
}
]
Object
.
assign
(
form
,
detail
,
{
rule_list
:
ruleList
})
})
}
onMounted
(()
=>
{
fetchInfo
()
})
// 合计
const
total
=
$computed
(()
=>
{
return
form
.
rule_list
.
reduce
((
result
:
number
,
item
:
any
)
=>
{
return
result
+
(
item
.
percent
||
0
)
},
0
)
})
// 添加
function
handleAdd
()
{
form
.
rule_list
.
push
({
id
:
'0'
,
name
:
''
,
type
:
undefined
,
percent
:
100
,
rule_mode
:
1
})
form
.
rule_list
.
push
({
name
:
''
,
type
:
undefined
,
percent
:
undefined
,
rule_mode
:
1
})
}
// 删除
function
handleRemove
(
index
:
number
)
{
form
.
rule_list
.
splice
(
index
,
1
)
}
// 提交
function
handleSubmit
()
{
for
(
let
i
=
0
;
i
<
form
.
rule_list
.
length
;
i
++
)
{
const
item
=
form
.
rule_list
[
i
]
if
(
!
item
.
name
||
!
item
.
type
||
!
item
.
percent
)
{
ElMessage
.
error
(
`第
${
i
+
1
}
行规则配置错误,请检查后重试`
)
return
}
if
(
item
.
type
===
5
&&
/实验报告|实验准备|实验结果|课堂活跃度/
.
test
(
item
.
name
))
{
ElMessage
.
error
(
`第
${
i
+
1
}
行规则配置错误,自定义的名称不能包含“实验报告”、“实验准备”、“实验结果”和“课堂活跃度”`
)
return
}
}
if
(
total
<
100
)
{
ElMessage
.
error
(
'实验成绩规则项权重之和必须为100%!'
)
return
}
formRef
?.
validate
().
then
(()
=>
{
console
.
log
(
1
)
const
params
=
{
experiment_id
:
props
.
data
.
id
,
...
form
,
rule_list
:
JSON
.
stringify
(
form
.
rule_list
)
}
updateExperimentGradeRule
(
params
).
then
(()
=>
{
ElMessage
({
message
:
'保存成功'
,
type
:
'success'
})
emit
(
'update'
)
emit
(
'update:modelValue'
,
false
)
})
})
}
...
...
@@ -53,6 +92,24 @@ function currentRuleNames(value: number) {
return
item
.
value
===
value
||
item
.
value
===
5
||
!
typeList
.
includes
(
item
.
value
)
})
}
function
handleTypeChange
(
row
:
any
)
{
if
(
row
.
type
===
5
)
return
row
.
name
=
gradeRule
[
row
.
type
]
}
// 占比改变
function
handlePercentChange
(
row
:
any
,
index
:
number
)
{
const
otherTotal
=
form
.
rule_list
.
reduce
((
result
:
number
,
item
:
any
,
i
:
number
)
=>
{
if
(
index
!==
i
)
{
result
+=
item
.
percent
||
0
}
return
result
},
0
)
// 最大可输入占比
nextTick
(()
=>
{
row
.
percent
=
Math
.
min
(
100
-
otherTotal
,
row
.
percent
)
})
}
</
script
>
<
template
>
...
...
@@ -65,8 +122,8 @@ function currentRuleNames(value: number) {
<el-form-item
label=
"实验名称"
>
{{
data
?.
name
}}
</el-form-item>
<el-form-item
label=
"是否允许查看成绩明细"
prop=
"is_show"
>
<el-radio-group
v-model=
"form.is_show"
>
<el-radio
:
label=
"1"
>
是
</el-radio>
<el-radio
:
label=
"0"
>
否
</el-radio>
<el-radio
label=
"1"
>
是
</el-radio>
<el-radio
label=
"0"
>
否
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
...
...
@@ -75,16 +132,23 @@ function currentRuleNames(value: number) {
<el-button
type=
"primary"
:icon=
"Plus"
@
click=
"handleAdd"
></el-button>
</el-row>
<el-table
:data=
"form.rule_list"
row-key=
"id"
>
<el-table-column
prop=
"name"
>
<el-table-column
prop=
"name"
width=
"250"
>
<template
#
default=
"
{ row }">
<el-input
v-model=
"row.name"
style=
"width: 100%"
v-if=
"row.type === 5"
/>
<el-select
v-model=
"row.type"
:disabled=
"row.type === 1"
style=
"width: 100%"
v-else
>
<el-input
v-model=
"row.name"
:maxlength=
"20"
style=
"width: 100%"
v-if=
"row.type === 5"
/>
<el-select
v-model=
"row.type"
:disabled=
"row.type === 1"
style=
"width: 100%"
@
change=
"handleTypeChange(row)"
v-else
>
<el-option
v-for=
"item in currentRuleNames(row.type)"
:key=
"item.value"
v-bind=
"item"
></el-option>
</el-select>
</
template
>
</el-table-column>
<el-table-column
prop=
"percent"
align=
"center"
width=
"200"
>
<
template
#
default=
"{ row }"
><el-input-number
v-model=
"row.percent"
/>
%
</
template
>
<
template
#
default=
"{ row, $index }"
>
<el-input-number
v-model=
"row.percent"
:min=
"0"
@
change=
"handlePercentChange(row, $index)"
/>
%
</
template
>
</el-table-column>
<el-table-column
prop=
"rule_mode"
>
<
template
#
default=
"{ row }"
>
...
...
@@ -94,12 +158,15 @@ function currentRuleNames(value: number) {
</el-radio-group>
</
template
>
</el-table-column>
<el-table-column
prop=
"rule_mode"
align=
"center"
width=
"9
0"
>
<
template
#
default=
"{ $index }"
>
<el-button
text
type=
"primary"
@
click=
"handleRemove($index)"
>
删除
</el-button>
<el-table-column
align=
"right"
width=
"7
0"
>
<
template
#
default=
"{ $index
, row
}"
>
<el-button
text
type=
"primary"
@
click=
"handleRemove($index)"
v-if=
"row.type !== 1"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
<div
class=
"total"
v-if=
"form.rule_list.length"
>
<p>
合计:{{ total }}%
</p>
</div>
</el-form-item>
</el-form>
<el-row
justify=
"center"
>
...
...
@@ -108,3 +175,19 @@ function currentRuleNames(value: number) {
</el-row>
</el-dialog>
</template>
<
style
lang=
"scss"
scoped
>
.total
{
width
:
100%
;
padding
:
10px
250px
;
box-sizing
:
border-box
;
p
{
margin-left
:
16px
;
display
:
inline-block
;
min-width
:
150px
;
text-align
:
center
;
color
:
#016fa0
;
background-color
:
#ededed
;
}
}
</
style
>
src/modules/admin/lab/experiment/mixins/report.vue
deleted
100644 → 0
浏览文件 @
dba3278d
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论