Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-lab
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-lab
Commits
27c2d305
提交
27c2d305
authored
9月 23, 2022
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
320adfe6
隐藏空白字符变更
内嵌
并排
正在显示
29 个修改的文件
包含
107 行增加
和
19 行删除
+107
-19
Message.vue
src/components/Message.vue
+2
-2
index.ts
src/modules/admin/contest/analyze/index.ts
+13
-0
Score.vue
src/modules/admin/contest/analyze/views/Score.vue
+4
-0
Student.vue
src/modules/admin/contest/analyze/views/Student.vue
+4
-0
api.ts
src/modules/admin/contest/check/api.ts
+2
-2
ImportExamDialog.vue
...dules/admin/contest/check/components/ImportExamDialog.vue
+0
-0
ImportScoreDialog.vue
...ules/admin/contest/check/components/ImportScoreDialog.vue
+0
-0
ScoreDialog.vue
src/modules/admin/contest/check/components/ScoreDialog.vue
+0
-0
SyncExamDialog.vue
...modules/admin/contest/check/components/SyncExamDialog.vue
+0
-0
useFilterList.ts
src/modules/admin/contest/check/composables/useFilterList.ts
+0
-0
index.ts
src/modules/admin/contest/check/index.ts
+1
-1
types.ts
src/modules/admin/contest/check/types.ts
+0
-0
Detail.vue
src/modules/admin/contest/check/views/Detail.vue
+0
-0
Index.vue
src/modules/admin/contest/check/views/Index.vue
+3
-3
ViewBook.vue
src/modules/admin/contest/items/components/ViewBook.vue
+11
-1
ViewBookPreviewDialog.vue
.../admin/contest/items/components/ViewBookPreviewDialog.vue
+19
-0
ViewVideo.vue
src/modules/admin/contest/items/components/ViewVideo.vue
+11
-1
ViewVideoPreviewDialog.vue
...admin/contest/items/components/ViewVideoPreviewDialog.vue
+29
-0
api.ts
src/modules/admin/lab/score/api.ts
+0
-0
ImportDialog.vue
src/modules/admin/lab/score/components/ImportDialog.vue
+0
-0
ScoreDialog.vue
src/modules/admin/lab/score/components/ScoreDialog.vue
+0
-0
useFilterList.ts
src/modules/admin/lab/score/composables/useFilterList.ts
+0
-0
index.ts
src/modules/admin/lab/score/index.ts
+1
-1
types.ts
src/modules/admin/lab/score/types.ts
+0
-0
Index.vue
src/modules/admin/lab/score/views/Index.vue
+0
-0
AdminHome.vue
src/modules/home/components/AdminHome.vue
+1
-1
TeacherHome.vue
src/modules/home/components/TeacherHome.vue
+1
-1
Score.vue
src/modules/student/contest/views/Score.vue
+1
-2
menu.ts
src/stores/menu.ts
+4
-4
没有找到文件。
src/components/Message.vue
浏览文件 @
27c2d305
...
@@ -32,13 +32,13 @@ function handleClick(data: MessageType) {
...
@@ -32,13 +32,13 @@ function handleClick(data: MessageType) {
// 指导老师
// 指导老师
// 实验评分
// 实验评分
if
(
payload
?.
channel
===
1
)
{
if
(
payload
?.
channel
===
1
)
{
router
.
push
({
path
:
'/admin/lab/
record
'
,
query
:
payload
})
router
.
push
({
path
:
'/admin/lab/
score
'
,
query
:
payload
})
}
}
}
else
if
(
userStore
.
role
?.
id
===
6
)
{
}
else
if
(
userStore
.
role
?.
id
===
6
)
{
// 专家
// 专家
// 大赛评分
// 大赛评分
if
(
payload
?.
channel
===
3
)
{
if
(
payload
?.
channel
===
3
)
{
router
.
push
({
path
:
'/admin/contest/
record
'
,
query
:
payload
})
router
.
push
({
path
:
'/admin/contest/
check
'
,
query
:
payload
})
}
}
}
else
{
}
else
{
// 学生
// 学生
...
...
src/modules/admin/contest/analyze/index.ts
0 → 100644
浏览文件 @
27c2d305
import
type
{
RouteRecordRaw
}
from
'vue-router'
import
AppLayout
from
'@/components/layout/Index.vue'
export
const
routes
:
Array
<
RouteRecordRaw
>
=
[
{
path
:
'/admin/contest/analyze'
,
component
:
AppLayout
,
children
:
[
{
path
:
'score'
,
component
:
()
=>
import
(
'./views/Score.vue'
)
},
{
path
:
'student'
,
component
:
()
=>
import
(
'./views/Student.vue'
)
}
]
}
]
src/modules/admin/contest/analyze/views/Score.vue
0 → 100644
浏览文件 @
27c2d305
<
script
setup
lang=
"ts"
></
script
>
<
template
>
<div></div>
</
template
>
src/modules/admin/contest/analyze/views/Student.vue
0 → 100644
浏览文件 @
27c2d305
<
script
setup
lang=
"ts"
></
script
>
<
template
>
<div></div>
</
template
>
src/modules/admin/contest/
record
/api.ts
→
src/modules/admin/contest/
check
/api.ts
浏览文件 @
27c2d305
import
httpRequest
from
'@/utils/axios'
import
httpRequest
from
'@/utils/axios'
// 获取
实验记录
列表
// 获取
大赛评分
列表
export
function
get
ExperimentRecord
List
(
params
?:
{
export
function
get
Check
List
(
params
?:
{
competition_id
?:
string
competition_id
?:
string
check_status
?:
string
check_status
?:
string
organ_id
?:
string
organ_id
?:
string
...
...
src/modules/admin/contest/
record
/components/ImportExamDialog.vue
→
src/modules/admin/contest/
check
/components/ImportExamDialog.vue
浏览文件 @
27c2d305
File moved
src/modules/admin/contest/
record
/components/ImportScoreDialog.vue
→
src/modules/admin/contest/
check
/components/ImportScoreDialog.vue
浏览文件 @
27c2d305
File moved
src/modules/admin/contest/
record
/components/ScoreDialog.vue
→
src/modules/admin/contest/
check
/components/ScoreDialog.vue
浏览文件 @
27c2d305
File moved
src/modules/admin/contest/
record
/components/SyncExamDialog.vue
→
src/modules/admin/contest/
check
/components/SyncExamDialog.vue
浏览文件 @
27c2d305
File moved
src/modules/admin/contest/
record
/composables/useFilterList.ts
→
src/modules/admin/contest/
check
/composables/useFilterList.ts
浏览文件 @
27c2d305
File moved
src/modules/admin/contest/
record
/index.ts
→
src/modules/admin/contest/
check
/index.ts
浏览文件 @
27c2d305
...
@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
...
@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
export
const
routes
:
Array
<
RouteRecordRaw
>
=
[
export
const
routes
:
Array
<
RouteRecordRaw
>
=
[
{
{
path
:
'/admin/contest/
record
'
,
path
:
'/admin/contest/
check
'
,
component
:
AppLayout
,
component
:
AppLayout
,
children
:
[
children
:
[
{
path
:
''
,
component
:
()
=>
import
(
'./views/Index.vue'
)
},
{
path
:
''
,
component
:
()
=>
import
(
'./views/Index.vue'
)
},
...
...
src/modules/admin/contest/
record
/types.ts
→
src/modules/admin/contest/
check
/types.ts
浏览文件 @
27c2d305
File moved
src/modules/admin/contest/
record
/views/Detail.vue
→
src/modules/admin/contest/
check
/views/Detail.vue
浏览文件 @
27c2d305
File moved
src/modules/admin/contest/
record
/views/Index.vue
→
src/modules/admin/contest/
check
/views/Index.vue
浏览文件 @
27c2d305
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
Refresh
,
Upload
}
from
'@element-plus/icons-vue'
import
{
Refresh
,
Upload
}
from
'@element-plus/icons-vue'
import
AppList
from
'@/components/base/AppList.vue'
import
AppList
from
'@/components/base/AppList.vue'
import
{
get
ExperimentRecord
List
}
from
'../api'
import
{
get
Check
List
}
from
'../api'
import
{
useFilterList
}
from
'../composables/useFilterList'
import
{
useFilterList
}
from
'../composables/useFilterList'
const
SyncExamDialog
=
defineAsyncComponent
(()
=>
import
(
'../components/SyncExamDialog.vue'
))
const
SyncExamDialog
=
defineAsyncComponent
(()
=>
import
(
'../components/SyncExamDialog.vue'
))
...
@@ -16,7 +16,7 @@ const appList = $ref<InstanceType<typeof AppList> | null>(null)
...
@@ -16,7 +16,7 @@ const appList = $ref<InstanceType<typeof AppList> | null>(null)
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
remote
:
{
remote
:
{
httpRequest
:
get
ExperimentRecord
List
,
httpRequest
:
get
Check
List
,
params
:
{
params
:
{
competition_id
:
''
,
competition_id
:
''
,
check_status
:
''
,
check_status
:
''
,
...
@@ -120,7 +120,7 @@ function onUpdateSuccess() {
...
@@ -120,7 +120,7 @@ function onUpdateSuccess() {
</
template
>
</
template
>
<
template
#
table-x=
"{ row }"
>
<
template
#
table-x=
"{ row }"
>
<el-button
text
type=
"primary"
v-if=
"row.publish_status === '0'"
v-permission=
"'v1-expert-check-set-score'"
>
<el-button
text
type=
"primary"
v-if=
"row.publish_status === '0'"
v-permission=
"'v1-expert-check-set-score'"
>
<router-link
:to=
"`/admin/contest/
record
/$
{row.id}`" target="_blank">评分
</router-link>
<router-link
:to=
"`/admin/contest/
check
/$
{row.id}`" target="_blank">评分
</router-link>
</el-button>
</el-button>
</
template
>
</
template
>
</AppList>
</AppList>
...
...
src/modules/admin/contest/items/components/ViewBook.vue
浏览文件 @
27c2d305
...
@@ -3,6 +3,7 @@ import type { ContestBookItem } from '../types'
...
@@ -3,6 +3,7 @@ import type { ContestBookItem } from '../types'
import
{
CirclePlus
}
from
'@element-plus/icons-vue'
import
{
CirclePlus
}
from
'@element-plus/icons-vue'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
AppList
from
'@/components/base/AppList.vue'
import
AppList
from
'@/components/base/AppList.vue'
import
ViewBookPreviewDialog
from
'./ViewBookPreviewDialog.vue'
import
{
getContestBook
,
deleteContestBook
}
from
'../api'
import
{
getContestBook
,
deleteContestBook
}
from
'../api'
const
FormDialog
=
defineAsyncComponent
(()
=>
import
(
'./ViewBookFormDialog.vue'
))
const
FormDialog
=
defineAsyncComponent
(()
=>
import
(
'./ViewBookFormDialog.vue'
))
...
@@ -46,6 +47,12 @@ function handleUpdate(row: ContestBookItem) {
...
@@ -46,6 +47,12 @@ function handleUpdate(row: ContestBookItem) {
rowData
.
value
=
row
rowData
.
value
=
row
dialogVisible
=
true
dialogVisible
=
true
}
}
// 查阅
let
viewVisible
=
$ref
(
false
)
function
handleView
(
row
:
ContestBookItem
)
{
rowData
.
value
=
row
viewVisible
=
true
}
// 删除
// 删除
function
handleRemoveClass
(
row
:
ContestBookItem
)
{
function
handleRemoveClass
(
row
:
ContestBookItem
)
{
ElMessageBox
.
confirm
(
'确定要删除吗?'
,
'提示'
).
then
(()
=>
{
ElMessageBox
.
confirm
(
'确定要删除吗?'
,
'提示'
).
then
(()
=>
{
...
@@ -68,7 +75,9 @@ function onUpdateSuccess() {
...
@@ -68,7 +75,9 @@ function onUpdateSuccess() {
>
>
</
template
>
</
template
>
<
template
#
table-x=
"{ row }"
>
<
template
#
table-x=
"{ row }"
>
<el-button
link
round
type=
"success"
v-permission=
"'competition-book-detail'"
>
查阅
</el-button>
<el-button
link
round
type=
"info"
@
click=
"handleView(row)"
v-permission=
"'competition-book-detail'"
>
查阅
</el-button
>
<el-button
link
round
type=
"primary"
@
click=
"handleUpdate(row)"
v-permission=
"'competition-book-update'"
<el-button
link
round
type=
"primary"
@
click=
"handleUpdate(row)"
v-permission=
"'competition-book-update'"
>
编辑
</el-button
>
编辑
</el-button
>
>
...
@@ -78,4 +87,5 @@ function onUpdateSuccess() {
...
@@ -78,4 +87,5 @@ function onUpdateSuccess() {
</
template
>
</
template
>
</AppList>
</AppList>
<FormDialog
v-model=
"dialogVisible"
:data=
"rowData"
@
update=
"onUpdateSuccess"
v-if=
"dialogVisible"
></FormDialog>
<FormDialog
v-model=
"dialogVisible"
:data=
"rowData"
@
update=
"onUpdateSuccess"
v-if=
"dialogVisible"
></FormDialog>
<ViewBookPreviewDialog
v-model=
"viewVisible"
:data=
"rowData"
v-if=
"viewVisible && rowData"
></ViewBookPreviewDialog>
</template>
</template>
src/modules/admin/contest/items/components/ViewBookPreviewDialog.vue
0 → 100644
浏览文件 @
27c2d305
<
script
setup
lang=
"ts"
>
import
type
{
ContestBookItem
}
from
'../types'
import
Preview
from
'@/components/Preview.vue'
interface
Props
{
data
:
ContestBookItem
}
const
props
=
defineProps
<
Props
>
()
const
file
=
$computed
(()
=>
{
return
JSON
.
parse
(
props
.
data
.
url
)
})
</
script
>
<
template
>
<el-dialog
title=
"查阅训练指导书"
>
<Preview
:url=
"file.url"
style=
"height: 60vh"
></Preview>
</el-dialog>
</
template
>
src/modules/admin/contest/items/components/ViewVideo.vue
浏览文件 @
27c2d305
...
@@ -3,6 +3,7 @@ import type { ContestVideoItem } from '../types'
...
@@ -3,6 +3,7 @@ import type { ContestVideoItem } from '../types'
import
{
CirclePlus
}
from
'@element-plus/icons-vue'
import
{
CirclePlus
}
from
'@element-plus/icons-vue'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
AppList
from
'@/components/base/AppList.vue'
import
AppList
from
'@/components/base/AppList.vue'
import
ViewVideoPreviewDialog
from
'./ViewVideoPreviewDialog.vue'
import
{
getContestVideoList
,
deleteContestVideo
}
from
'../api'
import
{
getContestVideoList
,
deleteContestVideo
}
from
'../api'
const
FormDialog
=
defineAsyncComponent
(()
=>
import
(
'./ViewVideoFormDialog.vue'
))
const
FormDialog
=
defineAsyncComponent
(()
=>
import
(
'./ViewVideoFormDialog.vue'
))
...
@@ -43,6 +44,12 @@ function handleUpdate(row: ContestVideoItem) {
...
@@ -43,6 +44,12 @@ function handleUpdate(row: ContestVideoItem) {
rowData
.
value
=
row
rowData
.
value
=
row
dialogVisible
=
true
dialogVisible
=
true
}
}
// 查阅
let
viewVisible
=
$ref
(
false
)
function
handleView
(
row
:
ContestVideoItem
)
{
rowData
.
value
=
row
viewVisible
=
true
}
// 删除
// 删除
function
handleRemoveClass
(
row
:
ContestVideoItem
)
{
function
handleRemoveClass
(
row
:
ContestVideoItem
)
{
ElMessageBox
.
confirm
(
'确定要删除吗?'
,
'提示'
).
then
(()
=>
{
ElMessageBox
.
confirm
(
'确定要删除吗?'
,
'提示'
).
then
(()
=>
{
...
@@ -65,7 +72,9 @@ function onUpdateSuccess() {
...
@@ -65,7 +72,9 @@ function onUpdateSuccess() {
>
>
</
template
>
</
template
>
<
template
#
table-x=
"{ row }"
>
<
template
#
table-x=
"{ row }"
>
<el-button
link
round
type=
"success"
v-permission=
"'competition-video-detail'"
>
查阅
</el-button>
<el-button
link
round
type=
"info"
@
click=
"handleView(row)"
v-permission=
"'competition-video-detail'"
>
查阅
</el-button
>
<el-button
link
round
type=
"primary"
@
click=
"handleUpdate(row)"
v-permission=
"'competition-video-update'"
<el-button
link
round
type=
"primary"
@
click=
"handleUpdate(row)"
v-permission=
"'competition-video-update'"
>
编辑
</el-button
>
编辑
</el-button
>
>
...
@@ -75,4 +84,5 @@ function onUpdateSuccess() {
...
@@ -75,4 +84,5 @@ function onUpdateSuccess() {
</
template
>
</
template
>
</AppList>
</AppList>
<FormDialog
v-model=
"dialogVisible"
:data=
"rowData"
@
update=
"onUpdateSuccess"
v-if=
"dialogVisible"
></FormDialog>
<FormDialog
v-model=
"dialogVisible"
:data=
"rowData"
@
update=
"onUpdateSuccess"
v-if=
"dialogVisible"
></FormDialog>
<ViewVideoPreviewDialog
v-model=
"viewVisible"
:data=
"rowData"
v-if=
"viewVisible && rowData"
></ViewVideoPreviewDialog>
</template>
</template>
src/modules/admin/contest/items/components/ViewVideoPreviewDialog.vue
0 → 100644
浏览文件 @
27c2d305
<
script
setup
lang=
"ts"
>
import
type
{
ContestVideoItem
}
from
'../types'
import
AppVideoPlayer
from
'@/components/base/AppVideoPlayer.vue'
import
{
getContestVideoPalyInfo
}
from
'../api'
interface
Props
{
data
:
ContestVideoItem
}
const
props
=
defineProps
<
Props
>
()
let
playList
=
$ref
<
any
>
([])
function
fetchInfo
()
{
getContestVideoPalyInfo
({
source_id
:
props
.
data
.
source_id
}).
then
(
res
=>
{
playList
=
res
.
data
.
replay_list
.
play_info_list
})
}
const
playUrl
=
$computed
(()
=>
{
return
playList
[
0
]?.
PlayURL
||
''
})
onMounted
(()
=>
{
fetchInfo
()
})
</
script
>
<
template
>
<el-dialog
title=
"查阅操作视频"
>
<AppVideoPlayer
:options=
"
{ fluid: true, sources: [{ src: playUrl, type: 'application/x-mpegURL' }] }"
v-if="playUrl">
</AppVideoPlayer>
</el-dialog>
</
template
>
src/modules/admin/lab/
record
/api.ts
→
src/modules/admin/lab/
score
/api.ts
浏览文件 @
27c2d305
File moved
src/modules/admin/lab/
record
/components/ImportDialog.vue
→
src/modules/admin/lab/
score
/components/ImportDialog.vue
浏览文件 @
27c2d305
File moved
src/modules/admin/lab/
record
/components/ScoreDialog.vue
→
src/modules/admin/lab/
score
/components/ScoreDialog.vue
浏览文件 @
27c2d305
File moved
src/modules/admin/lab/
record
/composables/useFilterList.ts
→
src/modules/admin/lab/
score
/composables/useFilterList.ts
浏览文件 @
27c2d305
File moved
src/modules/admin/lab/
record
/index.ts
→
src/modules/admin/lab/
score
/index.ts
浏览文件 @
27c2d305
...
@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
...
@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
export
const
routes
:
Array
<
RouteRecordRaw
>
=
[
export
const
routes
:
Array
<
RouteRecordRaw
>
=
[
{
{
path
:
'/admin/lab/
record
'
,
path
:
'/admin/lab/
score
'
,
component
:
AppLayout
,
component
:
AppLayout
,
children
:
[{
path
:
''
,
component
:
()
=>
import
(
'./views/Index.vue'
)
}]
children
:
[{
path
:
''
,
component
:
()
=>
import
(
'./views/Index.vue'
)
}]
}
}
...
...
src/modules/admin/lab/
record
/types.ts
→
src/modules/admin/lab/
score
/types.ts
浏览文件 @
27c2d305
File moved
src/modules/admin/lab/
record
/views/Index.vue
→
src/modules/admin/lab/
score
/views/Index.vue
浏览文件 @
27c2d305
File moved
src/modules/home/components/AdminHome.vue
浏览文件 @
27c2d305
...
@@ -24,7 +24,7 @@ function handleChange(id: string, type: number) {
...
@@ -24,7 +24,7 @@ function handleChange(id: string, type: number) {
<
template
>
<
template
>
<div
class=
"bg"
>
<div
class=
"bg"
>
<router-link
to=
"/admin/contest/score"
class=
"link1"
></router-link>
<router-link
to=
"/admin/contest/score"
class=
"link1"
></router-link>
<router-link
to=
"/admin/contest/
record
"
class=
"link2"
></router-link>
<router-link
to=
"/admin/contest/
check
"
class=
"link2"
></router-link>
<router-link
to=
"/admin/contest/discuss"
class=
"link3"
></router-link>
<router-link
to=
"/admin/contest/discuss"
class=
"link3"
></router-link>
<router-link
to=
"/admin/contest/discuss"
class=
"link4"
></router-link>
<router-link
to=
"/admin/contest/discuss"
class=
"link4"
></router-link>
</div>
</div>
...
...
src/modules/home/components/TeacherHome.vue
浏览文件 @
27c2d305
...
@@ -24,7 +24,7 @@ function handleChange(id: string, type: number) {
...
@@ -24,7 +24,7 @@ function handleChange(id: string, type: number) {
<
template
>
<
template
>
<div
class=
"bg"
>
<div
class=
"bg"
>
<router-link
to=
"/admin/lab/book"
class=
"link1"
></router-link>
<router-link
to=
"/admin/lab/book"
class=
"link1"
></router-link>
<router-link
to=
"/admin/lab/
record
"
class=
"link2"
></router-link>
<router-link
to=
"/admin/lab/
score
"
class=
"link2"
></router-link>
<router-link
to=
"/admin/lab/video"
class=
"link3"
></router-link>
<router-link
to=
"/admin/lab/video"
class=
"link3"
></router-link>
<router-link
to=
"/admin/lab/discuss"
class=
"link4"
></router-link>
<router-link
to=
"/admin/lab/discuss"
class=
"link4"
></router-link>
</div>
</div>
...
...
src/modules/student/contest/views/Score.vue
浏览文件 @
27c2d305
<
script
setup
lang=
"ts"
></
script
>
<
script
setup
lang=
"ts"
></
script
>
<
template
>
<
template
>
<
AppCard></AppCard
>
<
div></div
>
</
template
>
</
template
>
src/stores/menu.ts
浏览文件 @
27c2d305
...
@@ -58,7 +58,7 @@ const adminMenus: IMenuItem[] = [
...
@@ -58,7 +58,7 @@ const adminMenus: IMenuItem[] = [
},
},
{
{
name
:
'实验成绩管理'
,
name
:
'实验成绩管理'
,
path
:
'/admin/lab/
record
'
,
path
:
'/admin/lab/
score
'
,
tag
:
'v1-teacher-record'
tag
:
'v1-teacher-record'
}
}
]
]
...
@@ -89,7 +89,7 @@ const adminMenus: IMenuItem[] = [
...
@@ -89,7 +89,7 @@ const adminMenus: IMenuItem[] = [
},
},
{
{
name
:
'大赛评分'
,
name
:
'大赛评分'
,
path
:
'/admin/contest/
record
'
,
path
:
'/admin/contest/
check
'
,
tag
:
'v1-expert-check'
tag
:
'v1-expert-check'
},
},
{
{
...
@@ -105,11 +105,11 @@ const adminMenus: IMenuItem[] = [
...
@@ -105,11 +105,11 @@ const adminMenus: IMenuItem[] = [
children
:
[
children
:
[
{
{
name
:
'赛项成绩画像'
,
name
:
'赛项成绩画像'
,
path
:
'/admin/contest/
score/analyz
e'
path
:
'/admin/contest/
analyze/scor
e'
},
},
{
{
name
:
'学生个人成绩画像'
,
name
:
'学生个人成绩画像'
,
path
:
'/admin/contest/
student/analyze
'
path
:
'/admin/contest/
analyze/student
'
}
}
]
]
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论