feat(admin): 支持模板页码和题目类型细分,优化评分界面
- 在模板详情页添加页码(PageNo)字段,支持模板按页管理 - 将汉字听写和成语题型细分为多个子类型,提升题目分类精度 - 重构结果详情页的评分界面,区分客观题(网格布局)和主观题(分屏布局) - 添加AI评分推荐和人工校准功能,支持分数手动调整和快捷打分 - 实现活动复制功能,优化题目排序逻辑和界面间距 - 新增评委打分和状态更新接口,完善评分数据持久化机制
This commit is contained in:
@ -163,7 +163,7 @@ async function submitForm() {
|
||||
})
|
||||
|
||||
// 根据 questionID 降序排序 (例如: 54455 -> 55544)
|
||||
questionParams.sort((a, b) => Number(b.questionID) - Number(a.questionID))
|
||||
// questionParams.sort((a, b) => Number(b.questionID) - Number(a.questionID))
|
||||
|
||||
// 重新计算 questionIndex
|
||||
questionParams.forEach((item, index) => {
|
||||
|
||||
@ -186,7 +186,7 @@ defineExpose({ validate, reset })
|
||||
</div>
|
||||
|
||||
<!-- 列表内容 -->
|
||||
<div v-else class="flex flex-col gap-6 pb-10">
|
||||
<div v-else class="flex flex-col gap-6 pb-40">
|
||||
<div
|
||||
v-for="(round, roundIndex) in props.modelValue?.rounds" :key="round.id"
|
||||
class="group relative overflow-hidden border border-gray-100 rounded-2xl bg-white p-1 shadow-sm transition-all hover:shadow-md"
|
||||
|
||||
@ -114,8 +114,8 @@ async function getQuestionList(id: number) {
|
||||
// 点击编辑模块
|
||||
/** 请求编辑模块 */
|
||||
function handleRequestEdit(moduleName: string) {
|
||||
if (basicInfo.value.PublishStatus === PublishStatus.Processing || basicInfo.value.PublishStatus === PublishStatus.Finished) {
|
||||
window.$message?.warning('进行中或已结束的赛事无法编辑')
|
||||
if (basicInfo.value.PublishStatus === PublishStatus.Processing || basicInfo.value.PublishStatus === PublishStatus.Finished || basicInfo.value.PublishStatus === PublishStatus.Published) {
|
||||
window.$message?.warning('已发布、进行中或已结束的赛事无法编辑')
|
||||
return
|
||||
}
|
||||
if (activeEditModule.value && activeEditModule.value !== moduleName) {
|
||||
@ -220,7 +220,7 @@ async function handleSaveQuestion() {
|
||||
})
|
||||
|
||||
// 根据 questionID 降序排序 (例如: 54455 -> 55544)
|
||||
flatQuestions.sort((a, b) => Number(b.QuestionID) - Number(a.QuestionID))
|
||||
// flatQuestions.sort((a, b) => Number(b.QuestionID) - Number(a.QuestionID))
|
||||
|
||||
// 重新计算 questionIndex
|
||||
flatQuestions.forEach((item, index) => {
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
import { NButton, NGi, NGrid, NSpace } from 'naive-ui'
|
||||
import { computed, onMounted, ref } from 'vue'
|
||||
import { useRouterPush } from '@/hooks/common/router'
|
||||
import { fetchDeleteActivity, fetchGetActivityList } from '@/service/api/competition'
|
||||
import { fetchCopyActivity, fetchDeleteActivity, fetchGetActivityList } from '@/service/api/competition'
|
||||
import { useAppStore } from '@/store/modules/app'
|
||||
import CompetitionAddModal from '../competition-add/index.vue'
|
||||
|
||||
@ -21,9 +21,23 @@ function handleAdd() {
|
||||
showAddModal.value = true
|
||||
}
|
||||
|
||||
function handleCopy(item: Api.Competition.CompetitionItem) {
|
||||
async function handleCopy(item: Api.Competition.CompetitionItem) {
|
||||
// TODO: 实现复制逻辑
|
||||
try {
|
||||
const { error } = await fetchCopyActivity(item.Id)
|
||||
if (error) {
|
||||
window.$message?.error(error.message || '复制失败')
|
||||
return
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.error(e)
|
||||
window.$message?.error('复制失败')
|
||||
return
|
||||
}
|
||||
window.$message?.success(`已复制活动:${item.Name}`)
|
||||
// 刷新列表
|
||||
fetchActivityList()
|
||||
}
|
||||
|
||||
function handleDelete(item: Api.Competition.CompetitionItem) {
|
||||
|
||||
Reference in New Issue
Block a user