Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-lab
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-lab
Commits
ac5e09be
提交
ac5e09be
authored
11月 27, 2024
作者:
lhh
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
11.27需求修改
上级
5cd99fb3
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
121 行增加
和
48 行删除
+121
-48
ScoreDialog.vue
src/modules/admin/contest/check/components/ScoreDialog.vue
+9
-5
SyncExamDialog.vue
...modules/admin/contest/check/components/SyncExamDialog.vue
+1
-1
Index.vue
src/modules/admin/contest/dashboard/views/Index.vue
+19
-18
Index.vue
src/modules/admin/contest/experts/views/Index.vue
+1
-0
ContestantDialog.vue
...dules/admin/contest/items/components/ContestantDialog.vue
+1
-0
FormDialog copy.vue
...odules/admin/contest/items/components/FormDialog copy.vue
+0
-0
FormDialog.vue
src/modules/admin/contest/items/components/FormDialog.vue
+0
-0
ScoringExpertsDialog.vue
...s/admin/contest/items/components/ScoringExpertsDialog.vue
+1
-0
index.ts
src/modules/admin/contest/items/index.ts
+2
-1
types.ts
src/modules/admin/contest/items/types.ts
+2
-1
Edit.vue
src/modules/admin/contest/items/views/Edit.vue
+55
-0
Index.vue
src/modules/admin/contest/items/views/Index.vue
+26
-18
View.vue
src/modules/admin/contest/items/views/View.vue
+4
-4
没有找到文件。
src/modules/admin/contest/check/components/ScoreDialog.vue
浏览文件 @
ac5e09be
...
...
@@ -21,7 +21,7 @@ watchEffect(() => {
...
item
,
old_score
:
parseFloat
(
item
.
old_score
),
ratio
:
parseFloat
(
item
.
ratio
),
score
:
isNaN
(
parseFloat
(
item
.
score
))
?
null
:
parseFloat
(
item
.
score
)
score
:
isNaN
(
parseFloat
(
item
.
score
))
?
'null'
:
parseFloat
(
item
.
score
)
}
})
})
...
...
@@ -43,7 +43,9 @@ const score = $computed(() => {
// 提交
function
handleSubmit
()
{
const
scores
=
tableList
.
map
((
item
:
any
)
=>
{
if
(
item
.
type
===
'2'
)
{
item
.
score
=
0
}
if
(
item
.
type
===
'2'
)
{
item
.
score
=
0
}
return
{
id
:
item
.
id
,
score
:
item
.
score
}
})
const
params
=
{
id
:
detail
.
id
,
scores
:
JSON
.
stringify
(
scores
)
}
...
...
@@ -75,7 +77,7 @@ const handleScoreRule = function () {
<el-form-item
label=
"选手姓名"
>
{{
detail
.
student_name
}}
</el-form-item>
<el-form-item
label=
"选手ID"
>
{{
detail
.
login_id
}}
</el-form-item>
<div
style=
"display: flex; justify-content: space-between"
>
<el-form-item
label=
"报告"
>
<el-form-item
label=
"报告"
v-if=
"reportList.length"
>
<el-dropdown>
<el-button
text
>
查看报告
<el-icon
class=
"el-icon--right"
><arrow-down
/></el-icon>
...
...
@@ -89,7 +91,7 @@ const handleScoreRule = function () {
</
template
>
</el-dropdown>
</el-form-item>
<el-button
type=
"primary"
@
click=
"handleScoreRule"
>
查看评分规则
</el-button>
<el-button
type=
"primary"
style=
"margin-bottom: 20px"
@
click=
"handleScoreRule"
>
查看评分规则
</el-button>
</div>
</el-form>
<el-table
:data=
"tableList"
:header-cell-style=
"{ background: '#ededed' }"
>
...
...
@@ -100,6 +102,7 @@ const handleScoreRule = function () {
<el-table-column
label=
"评分"
prop=
"score"
align=
"center"
>
<
template
#
default=
"{ row }"
>
<el-input-number
:disabled=
"row.type === '2'"
:controls=
"false"
v-model=
"row.score"
step-strictly
...
...
@@ -107,10 +110,11 @@ const handleScoreRule = function () {
:min=
"0"
:max=
"row.old_score"
style=
"width: 100%"
placeholder=
"--"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
>
<el-table-column
label=
"操作"
align=
"center"
v-if=
"false"
>
<
template
#
default=
"{ row }"
>
<el-button
text
type=
"primary"
v-if=
"row.type === '2'"
>
<a
:href=
"`$
{qaURL}/exam/markingPaper?exam_id=${row.exam_id}
&
id_number=${detail.id_number}`" target="_blank"
...
...
src/modules/admin/contest/check/components/SyncExamDialog.vue
浏览文件 @
ac5e09be
...
...
@@ -29,7 +29,7 @@ function scoreMethodText(value: string) {
</
script
>
<
template
>
<el-dialog
title=
"同步1+
X
考试成绩"
:close-on-click-modal=
"false"
>
<el-dialog
title=
"同步1+
同步线上
考试成绩"
:close-on-click-modal=
"false"
>
<el-form>
<el-form-item
label=
"赛项名称"
>
<el-select
v-model=
"form.competition"
value-key=
"id"
>
...
...
src/modules/admin/contest/dashboard/views/Index.vue
浏览文件 @
ac5e09be
...
...
@@ -29,10 +29,10 @@ onMounted(() => {
fetchCompetition
()
})
const
platformKey
=
ref
(
'
career_data_analysis
'
)
const
platformKey
=
ref
(
'
data_marketing
'
)
const
platformKeys
=
ref
([
{
platform_key
:
'career_data_analysis'
,
name
:
'商业数据分析实验'
},
{
platform_key
:
'data_marketing'
,
name
:
'数据营销实操'
}
,
{
platform_key
:
'data_marketing'
,
name
:
'数据营销实操'
}
])
// async function fetchPlatformKeys(competition_id: string) {
// const res = await getPlatformKeys({ competition_id })
...
...
@@ -62,7 +62,7 @@ onUnmounted(() => {
const
statistics
=
reactive
({
competitor_count
:
0
,
complete_answer_competitor_count
:
0
,
starting_answer_competitor_count
:
0
,
starting_answer_competitor_count
:
0
})
async
function
fetchStatistics
(
competition_id
:
string
,
platform_key
=
'career_data_analysis'
)
{
const
res
=
await
getCompetitionStatistics
({
competition_id
,
platform_key
})
...
...
@@ -97,8 +97,8 @@ const submittedListOptions = {
{
label
:
'所在专业'
,
prop
:
'student.specialty_name'
},
{
label
:
'所在班级'
,
prop
:
'student.class_name'
},
{
label
:
'提交时间'
,
prop
:
'commit_time'
},
{
label
:
'作答用时'
,
prop
:
'answer_time'
}
,
]
,
{
label
:
'作答用时'
,
prop
:
'answer_time'
}
]
}
const
submittedLis
=
computed
(()
=>
{
return
competitorsTableData
.
value
.
filter
((
item
:
any
)
=>
item
.
commit_status
==
3
)
...
...
@@ -114,9 +114,9 @@ const answeringListOptions = {
{
label
:
'所在班级'
,
prop
:
'student.class_name'
},
{
label
:
'作答用时'
,
prop
:
'answer_time'
,
}
,
]
,
prop
:
'answer_time'
}
]
}
const
answeringList
=
computed
(()
=>
{
return
competitorsTableData
.
value
.
filter
((
item
:
any
)
=>
item
.
commit_status
==
2
||
item
.
commit_status
==
4
)
...
...
@@ -137,44 +137,44 @@ const listOptions = {
prop
:
'module_1'
,
computed
({
row
}:
{
row
:
any
})
{
return
getModuleStatus
(
row
,
0
)
}
,
}
},
{
label
:
'模块二'
,
prop
:
'module_2'
,
computed
({
row
}:
{
row
:
any
})
{
return
getModuleStatus
(
row
,
1
)
}
,
}
},
{
label
:
'模块三'
,
prop
:
'module_3'
,
computed
({
row
}:
{
row
:
any
})
{
return
getModuleStatus
(
row
,
2
)
}
,
}
},
{
label
:
'模块四'
,
prop
:
'module_4'
,
computed
({
row
}:
{
row
:
any
})
{
return
getModuleStatus
(
row
,
3
)
}
,
}
},
{
label
:
'模块五'
,
prop
:
'module_5'
,
computed
({
row
}:
{
row
:
any
})
{
return
getModuleStatus
(
row
,
4
)
}
,
}
},
{
label
:
'模块六'
,
prop
:
'module_6'
,
computed
({
row
}:
{
row
:
any
})
{
return
getModuleStatus
(
row
,
5
)
}
,
}
,
]
,
}
}
]
}
function
getModuleStatus
(
row
:
any
,
index
:
number
)
{
try
{
...
...
@@ -201,12 +201,13 @@ function getModuleStatus(row: any, index: number) {
<el-select
v-model=
"currentCompetition"
value-key=
"id"
size=
"large"
style=
"margin-right: 20px"
>
<el-option
v-for=
"item in competitionList"
:key=
"item.id"
:value=
"item"
:label=
"item.name"
></el-option>
</el-select>
<el-select
v-model=
"platformKey"
size=
"large"
>
<el-select
v-model=
"platformKey"
size=
"large"
v-if=
"false"
>
<el-option
v-for=
"item in platformKeys"
:key=
"item.platform_key"
:value=
"item.platform_key"
:label=
"item.name"
></el-option>
:label=
"item.name"
></el-option>
</el-select>
</el-row>
<ul
class=
"statistics"
>
...
...
src/modules/admin/contest/experts/views/Index.vue
浏览文件 @
ac5e09be
...
...
@@ -37,6 +37,7 @@ const listOptions = $computed(() => {
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
width
:
60
},
{
label
:
'专家姓名'
,
prop
:
'name'
},
{
label
:
'电话'
,
prop
:
'mobile'
},
{
label
:
'所在单位'
,
prop
:
'company'
},
{
label
:
'性别'
,
...
...
src/modules/admin/contest/items/components/ContestantDialog.vue
浏览文件 @
ac5e09be
...
...
@@ -20,6 +20,7 @@ const listOptions = {
{
label
:
'序号'
,
type
:
'index'
,
width
:
60
},
{
label
:
'选手姓名'
,
prop
:
'student.name'
},
{
label
:
'参赛ID'
,
prop
:
'login_id'
},
{
label
:
'电话'
,
prop
:
'mobile'
},
{
label
:
'性别'
,
prop
:
'student.gender'
,
...
...
src/modules/admin/contest/items/components/FormDialog copy.vue
0 → 100644
浏览文件 @
ac5e09be
差异被折叠。
点击展开。
src/modules/admin/contest/items/components/FormDialog.vue
浏览文件 @
ac5e09be
差异被折叠。
点击展开。
src/modules/admin/contest/items/components/ScoringExpertsDialog.vue
浏览文件 @
ac5e09be
...
...
@@ -43,6 +43,7 @@ const listOptions = $computed(() => {
{
type
:
'expand'
,
slots
:
'class'
},
{
label
:
'序号'
,
type
:
'index'
,
width
:
60
},
{
label
:
'专家姓名'
,
prop
:
'name'
},
{
label
:
'电话'
,
prop
:
'mobile'
},
{
label
:
'所在单位'
,
prop
:
'company'
},
{
label
:
'性别'
,
...
...
src/modules/admin/contest/items/index.ts
浏览文件 @
ac5e09be
...
...
@@ -11,7 +11,8 @@ export const routes: Array<RouteRecordRaw> = [
component
:
AppLayout
,
children
:
[
{
path
:
''
,
component
:
()
=>
import
(
'./views/Index.vue'
)
},
{
path
:
':id'
,
component
:
()
=>
import
(
'./views/View.vue'
),
props
:
true
}
{
path
:
':id'
,
component
:
()
=>
import
(
'./views/View.vue'
),
props
:
true
},
{
path
:
'edit/:id'
,
component
:
()
=>
import
(
'./views/Edit.vue'
),
props
:
true
}
]
}
]
src/modules/admin/contest/items/types.ts
浏览文件 @
ac5e09be
...
...
@@ -34,7 +34,8 @@ export interface ContestItem {
expert_count
:
number
train_platform_configs
:
any
[]
competition_platform_configs
:
any
[]
is_switchable_theory_practice
:
string
is_switchable_theory_practice
:
string
,
is_customer_anti_cheat
:
string
}
export
interface
ContestCreateParams
{
...
...
src/modules/admin/contest/items/views/Edit.vue
0 → 100644
浏览文件 @
ac5e09be
<
script
setup
lang=
"ts"
>
import
type
{
ContestItem
}
from
'../types'
// import { ElMessage } from 'element-plus'
import
{
getContest
}
from
'../api'
const
FormDialog
=
defineAsyncComponent
(()
=>
import
(
'../components/FormDialog.vue'
))
interface
Props
{
id
:
string
}
const
props
=
defineProps
<
Props
>
()
let
detail
=
$ref
<
ContestItem
|
null
>
(
null
)
provide
(
'detail'
,
$$
(
detail
))
// 获取赛项信息
function
fetchInfo
()
{
getContest
({
id
:
props
.
id
}).
then
(
res
=>
{
detail
=
res
.
data
.
detail
})
}
onMounted
(()
=>
{
if
(
props
.
id
===
'1'
)
return
fetchInfo
()
})
</
script
>
<
template
>
<AppCard
title=
"编辑赛项"
>
<FormDialog
:data=
"detail"
></FormDialog>
</AppCard>
</
template
>
<
style
lang=
"scss"
>
.top
{
display
:
flex
;
.el-descriptions
{
flex
:
1
;
margin-top
:
30px
;
}
}
.top-cover
{
width
:
300px
;
margin-right
:
20px
;
p
{
font-weight
:
normal
;
line-height
:
30px
;
font-size
:
14px
;
}
img
{
width
:
100%
;
}
}
</
style
>
src/modules/admin/contest/items/views/Index.vue
浏览文件 @
ac5e09be
...
...
@@ -8,7 +8,7 @@ import { useMapStore } from '@/stores/map'
// 赛项类型
const
types
=
useMapStore
().
getMapValuesByKey
(
'competition_type'
)
const
FormDialog
=
defineAsyncComponent
(()
=>
import
(
'../components/FormDialog.vue'
))
//
const FormDialog = defineAsyncComponent(() => import('../components/FormDialog.vue'))
const
appList
=
$ref
<
InstanceType
<
typeof
AppList
>
|
null
>
(
null
)
...
...
@@ -50,31 +50,34 @@ const listOptions = {
]
}
let
dialogVisible
=
$ref
(
false
)
const
rowData
=
ref
<
ContestItem
|
undefined
|
null
>
(
null
)
//
let dialogVisible = $ref(false)
//
const rowData = ref
<
ContestItem
|
undefined
|
null
>
(
null
)
// 新增
function
handleAdd
()
{
rowData
.
value
=
null
dialogVisible
=
true
}
// 编辑
function
handleUpdate
(
row
:
ContestItem
)
{
rowData
.
value
=
row
dialogVisible
=
true
}
//
function handleAdd() {
//
rowData.value = null
//
dialogVisible = true
//
}
//
//
编辑
//
function handleUpdate(row: ContestItem) {
//
rowData.value = row
//
dialogVisible = true
//
}
function
onUpdateSuccess
()
{
appList
?.
refetch
()
}
//
function onUpdateSuccess() {
//
appList?.refetch()
//
}
</
script
>
<
template
>
<AppCard
title=
"赛项管理"
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
>
<template
#
header-buttons
>
<el-button
type=
"primary"
:icon=
"CirclePlus"
v-permission=
"'competition-create'"
@
click=
"handleAdd"
>
<
!--
<
el-button
type=
"primary"
:icon=
"CirclePlus"
v-permission=
"'competition-create'"
@
click=
"handleAdd"
>
新增赛项
</el-button>
-->
<el-button
type=
"primary"
:icon=
"CirclePlus"
round
v-permission=
"'competition-create'"
>
<router-link
:to=
"`/admin/contest/items/edit/1`"
target=
"_blank"
>
新增赛项
</router-link>
</el-button>
</
template
>
...
...
@@ -82,9 +85,14 @@ function onUpdateSuccess() {
<el-button
type=
"primary"
round
v-permission=
"'competition-detail'"
>
<router-link
:to=
"`/admin/contest/items/$
{row.id}`" target="_blank">查看
</router-link>
</el-button>
<el-button
type=
"primary"
round
@
click=
"handleUpdate(row)"
v-permission=
"'competition-edit'"
>
编辑
</el-button>
<el-button
type=
"primary"
round
v-permission=
"'competition-detail'"
>
<router-link
:to=
"`/admin/contest/items/edit/$
{row.id}`" target="_blank" v-permission="'competition-edit'"
>编辑
</router-link
>
</el-button>
<!--
<el-button
type=
"primary"
round
@
click=
"handleUpdate(row)"
v-permission=
"'competition-edit'"
>
编辑
</el-button>
-->
</
template
>
</AppList>
</AppCard>
<
FormDialog
v-model=
"dialogVisible"
:data=
"rowData"
@
update=
"onUpdateSuccess"
v-if=
"dialogVisible"
></FormDialog
>
<
!-- <FormDialog v-model="dialogVisible" :data="rowData" @update="onUpdateSuccess" v-if="dialogVisible"></FormDialog> --
>
</template>
src/modules/admin/contest/items/views/View.vue
浏览文件 @
ac5e09be
...
...
@@ -161,16 +161,16 @@ function handleExperts() {
<AppCard
title=
"训练指导书"
>
<ViewBook
:id=
"id"
></ViewBook>
</AppCard>
<AppCard
title=
"操作视频"
>
<AppCard
title=
"
训练
操作视频"
>
<ViewVideo
:id=
"id"
></ViewVideo>
</AppCard>
<AppCard
title=
"
大赛试
题"
>
<AppCard
title=
"
比赛实操赛
题"
>
<ViewQuestion
:id=
"id"
></ViewQuestion>
</AppCard>
<AppCard
title=
"
大赛
试卷"
>
<AppCard
title=
"
比赛实操
试卷"
>
<ViewExam
:id=
"id"
></ViewExam>
</AppCard>
<AppCard
title=
"关联实验"
>
<AppCard
title=
"关联
营销
实验"
>
<ViewExperiment
:id=
"detail?.id || ''"
:pid=
"id"
></ViewExperiment>
</AppCard>
<AppCard
title=
"抽签加密"
>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论