Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-lab
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-lab
Commits
a5fe817b
提交
a5fe817b
authored
5月 15, 2023
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: 专家评分增加查看报告
上级
769b7bb3
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
81 行增加
和
17 行删除
+81
-17
api.ts
src/modules/admin/contest/check/api.ts
+5
-0
ScoreDialog.vue
src/modules/admin/contest/check/components/ScoreDialog.vue
+18
-1
types.ts
src/modules/admin/contest/check/types.ts
+14
-0
Detail.vue
src/modules/admin/contest/check/views/Detail.vue
+44
-16
没有找到文件。
src/modules/admin/contest/check/api.ts
浏览文件 @
a5fe817b
...
@@ -46,3 +46,8 @@ export function importScore(data: { competition_id: string; file: File }) {
...
@@ -46,3 +46,8 @@ export function importScore(data: { competition_id: string; file: File }) {
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
headers
:
{
'Content-Type'
:
'multipart/form-data'
}
})
})
}
}
// 获取大赛学员提交报告列表
export
function
getReportList
(
params
:
{
competition_id
:
string
;
student_id
:
string
})
{
return
httpRequest
.
get
(
'/api/lab/v1/expert/report/list'
,
{
params
})
}
src/modules/admin/contest/check/components/ScoreDialog.vue
浏览文件 @
a5fe817b
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
ElMessage
}
from
'element-plus'
import
{
ElMessage
}
from
'element-plus'
import
{
ArrowDown
}
from
'@element-plus/icons-vue'
import
{
usePrecision
}
from
'@vueuse/math'
import
{
usePrecision
}
from
'@vueuse/math'
import
type
{
ReportItem
}
from
'../types'
import
{
submitScore
}
from
'../api'
import
{
submitScore
}
from
'../api'
defineProps
<
{
reportList
:
ReportItem
[]
}
>
()
const
emit
=
defineEmits
<
{
const
emit
=
defineEmits
<
{
(
e
:
'update'
):
void
(
e
:
'update'
):
void
(
e
:
'update:modelValue'
,
visible
:
boolean
):
void
(
e
:
'update:modelValue'
,
visible
:
boolean
):
void
...
@@ -57,6 +60,20 @@ function handleSubmit() {
...
@@ -57,6 +60,20 @@ function handleSubmit() {
<el-form-item
label=
"赛项名称"
>
{{
detail
.
competition_id_name
}}
</el-form-item>
<el-form-item
label=
"赛项名称"
>
{{
detail
.
competition_id_name
}}
</el-form-item>
<el-form-item
label=
"选手姓名"
>
{{
detail
.
student_name
}}
</el-form-item>
<el-form-item
label=
"选手姓名"
>
{{
detail
.
student_name
}}
</el-form-item>
<el-form-item
label=
"选手ID"
>
{{
detail
.
login_id
}}
</el-form-item>
<el-form-item
label=
"选手ID"
>
{{
detail
.
login_id
}}
</el-form-item>
<el-form-item
label=
"报告"
>
<el-dropdown>
<el-button
text
>
查看报告
<el-icon
class=
"el-icon--right"
><arrow-down
/></el-icon>
</el-button>
<template
#
dropdown
>
<el-dropdown-menu
v-if=
"reportList.length"
>
<el-dropdown-item
v-for=
"item in reportList"
:key=
"item.id"
>
<a
:href=
"item.url"
target=
"_blank"
>
{{
item
.
platform
.
name
}}
</a>
</el-dropdown-item>
</el-dropdown-menu>
</
template
>
</el-dropdown>
</el-form-item>
</el-form>
</el-form>
<el-table
:data=
"tableList"
:header-cell-style=
"{ background: '#ededed' }"
>
<el-table
:data=
"tableList"
:header-cell-style=
"{ background: '#ededed' }"
>
<el-table-column
label=
"评分规则"
prop=
"name"
align=
"center"
></el-table-column>
<el-table-column
label=
"评分规则"
prop=
"name"
align=
"center"
></el-table-column>
...
...
src/modules/admin/contest/check/types.ts
浏览文件 @
a5fe817b
...
@@ -25,3 +25,17 @@ export interface FileItem {
...
@@ -25,3 +25,17 @@ export interface FileItem {
url
:
string
url
:
string
upload_time
:
string
upload_time
:
string
}
}
export
interface
ReportItem
{
id
:
string
name
:
string
type
:
string
url
:
string
size
:
number
platform
:
{
platform_key
:
string
name
:
string
url
:
string
}
created_at
:
string
}
src/modules/admin/contest/check/views/Detail.vue
浏览文件 @
a5fe817b
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
type
{
ReportItem
}
from
'../types'
import
{
ArrowDown
}
from
'@element-plus/icons-vue'
import
Preview
from
'@/components/Preview.vue'
import
Preview
from
'@/components/Preview.vue'
import
DragPanel
from
'@/components/DragPanel.vue'
import
DragPanel
from
'@/components/DragPanel.vue'
import
{
getCheckView
}
from
'../api'
import
{
getCheckView
,
getReportList
}
from
'../api'
const
ScoreDialog
=
defineAsyncComponent
(()
=>
import
(
'../components/ScoreDialog.vue'
))
const
ScoreDialog
=
defineAsyncComponent
(()
=>
import
(
'../components/ScoreDialog.vue'
))
...
@@ -18,13 +20,33 @@ provide('detail', $$(detail))
...
@@ -18,13 +20,33 @@ provide('detail', $$(detail))
const
file
=
$computed
(()
=>
{
const
file
=
$computed
(()
=>
{
return
detail
?
JSON
.
parse
(
detail
?.
competition_rubric
.
url
)
:
{
url
:
''
}
return
detail
?
JSON
.
parse
(
detail
?.
competition_rubric
.
url
)
:
{
url
:
''
}
})
})
function
fetchInfo
()
{
getCheckView
({
id
:
props
.
id
}).
then
(
res
=>
{
const
platformUrl
=
ref
(
''
)
const
platformList
=
computed
(()
=>
{
if
(
!
detail
)
return
[]
return
detail
.
competition_platform_configs
.
filter
((
item
:
any
)
=>
item
.
is_show
===
'1'
)
})
watchEffect
(()
=>
{
const
[
first
=
{}]
=
platformList
.
value
platformUrl
.
value
=
first
.
url
})
async
function
fetchInfo
()
{
const
res
=
await
getCheckView
({
id
:
props
.
id
})
detail
=
res
.
data
detail
=
res
.
data
})
}
}
watchEffect
(()
=>
{
fetchInfo
()
const
reportList
=
ref
<
ReportItem
[]
>
([])
async
function
fetchReport
()
{
const
res
=
await
getReportList
({
competition_id
:
detail
.
competition_id
,
student_id
:
detail
.
student_id
})
reportList
.
value
=
res
.
data
.
items
}
onMounted
(
async
()
=>
{
await
fetchInfo
()
await
fetchReport
()
})
})
// 评分
// 评分
...
@@ -34,10 +56,6 @@ let resizeKey = $ref(0)
...
@@ -34,10 +56,6 @@ let resizeKey = $ref(0)
function
handleResize
()
{
function
handleResize
()
{
resizeKey
=
Date
.
now
()
resizeKey
=
Date
.
now
()
}
}
const
goPage
=
function
(
url
:
string
)
{
window
.
open
(
url
)
}
</
script
>
</
script
>
<
template
>
<
template
>
...
@@ -66,11 +84,21 @@ const goPage = function (url: string) {
...
@@ -66,11 +84,21 @@ const goPage = function (url: string) {
</p>
</p>
</div>
</div>
<div>
<div>
<template
v-for=
"item in detail.competition_platform_configs"
>
<el-select
v-model=
"platformUrl"
>
<el-button
type=
"primary"
:key=
"item.id"
v-if=
"item.is_show === '1'"
@
click=
"goPage(item.url)"
>
{{
<el-option
v-for=
"item in platformList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.url"
></el-option>
item
.
name
</el-select>
}}
</el-button>
<el-dropdown
style=
"margin: 0 10px"
>
<el-button
plain
>
查看报告
<el-icon
class=
"el-icon--right"
><arrow-down
/></el-icon>
</el-button>
<template
#
dropdown
>
<el-dropdown-menu
v-if=
"reportList.length"
>
<el-dropdown-item
v-for=
"item in reportList"
:key=
"item.id"
>
<a
:href=
"item.url"
target=
"_blank"
>
{{
item
.
platform
.
name
}}
</a>
</el-dropdown-item>
</el-dropdown-menu>
</
template
>
</
template
>
</el-dropdown>
<el-button
type=
"primary"
@
click=
"dialogVisible = true"
v-permission=
"'v1-expert-check-set-score'"
<el-button
type=
"primary"
@
click=
"dialogVisible = true"
v-permission=
"'v1-expert-check-set-score'"
>
评分
</el-button
>
评分
</el-button
>
>
...
@@ -78,11 +106,11 @@ const goPage = function (url: string) {
...
@@ -78,11 +106,11 @@ const goPage = function (url: string) {
</el-row>
</el-row>
</AppCard>
</AppCard>
<div
class=
"lab-box"
>
<div
class=
"lab-box"
>
<iframe
:src=
"
detail.competition_uri
"
frameborder=
"0"
class=
"iframe"
ref=
"iframeRef"
></iframe>
<iframe
:src=
"
platformUrl
"
frameborder=
"0"
class=
"iframe"
ref=
"iframeRef"
></iframe>
</div>
</div>
</template>
</template>
</DragPanel>
</DragPanel>
<ScoreDialog
v-model=
"dialogVisible"
></ScoreDialog>
<ScoreDialog
v-model=
"dialogVisible"
:reportList=
"reportList"
></ScoreDialog>
</template>
</template>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论