|
|
@@ -27,6 +27,9 @@
|
|
|
<el-col :span="1.5">
|
|
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:gameEventProject:add']"> 新增 </el-button>
|
|
|
</el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button type="info" plain icon="Collection" @click="handleViewProjectLibrary()"> 项目库 </el-button>
|
|
|
+ </el-col>
|
|
|
<el-col :span="1.5">
|
|
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['system:gameEventProject:edit']"
|
|
|
>修改
|
|
|
@@ -46,14 +49,14 @@
|
|
|
|
|
|
<el-table v-loading="loading" border :data="gameEventProjectList" @selection-change="handleSelectionChange">
|
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
|
- <el-table-column label="主键" align="center" prop="projectId" v-if="columns[0].visible" />
|
|
|
+ <el-table-column label="项目id" align="center" prop="projectId" v-if="columns[0].visible" />
|
|
|
<el-table-column label="项目名称" align="center" prop="projectName" v-if="columns[1].visible" />
|
|
|
<el-table-column label="项目类型" align="center" prop="projectType" v-if="columns[2].visible">
|
|
|
<template #default="scope">
|
|
|
<dict-tag :options="game_project_type" :value="scope.row.projectType || ''" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="项目归类" align="center" prop="classification" v-if="columns[3].visible">
|
|
|
+ <el-table-column label="项目归类" align="center" prop="classification" v-if="columns[3].visible" >
|
|
|
<template #default="scope">
|
|
|
<dict-tag :options="game_project_classification" :value="scope.row.classification || '未知'" />
|
|
|
</template>
|
|
|
@@ -66,12 +69,12 @@
|
|
|
</el-table-column>
|
|
|
<el-table-column label="开始时间" align="center" prop="startTime" width="180" v-if="columns[6].visible">
|
|
|
<template #default="scope">
|
|
|
- <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
|
|
|
+ <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="结束时间" align="center" prop="endTime" width="180" v-if="columns[7].visible">
|
|
|
<template #default="scope">
|
|
|
- <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
|
|
|
+ <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="裁判组" align="center" prop="refereeGroup" v-if="columns[8].visible">
|
|
|
@@ -84,23 +87,31 @@
|
|
|
>
|
|
|
查看裁判组 ({{ scope.row.refereeGroups.length }}人)
|
|
|
</el-button>
|
|
|
- <span v-else style="color: #999">暂无裁判</span>
|
|
|
+ <span v-else style="color: #999;">暂无裁判</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<!-- <el-table-column label="参赛组数" align="center" prop="groupNum" />
|
|
|
<el-table-column label="参赛人数" align="center" prop="participateNum" /> -->
|
|
|
- <el-table-column label="轮次" align="center" prop="roundType" v-if="columns[9].visible" />
|
|
|
+ <el-table-column label="录取名次" align="center" prop="roundType" v-if="columns[9].visible" />
|
|
|
<el-table-column label="排序方式" align="center" prop="orderType" v-if="columns[10].visible">
|
|
|
<template #default="scope">
|
|
|
{{ scope.row.orderType === '0' ? '升序' : '降序' }}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="积分分值" align="center" prop="scoreValue" v-if="columns[11].visible" />
|
|
|
- <!-- <el-table-column label="奖项" align="center" prop="award" />
|
|
|
- <el-table-column label="计时点名称" align="center" prop="timePoint" />
|
|
|
- <el-table-column label="控制盒编号" align="center" prop="boxCode" />
|
|
|
- <el-table-column label="状态" align="center" prop="status" />
|
|
|
- <el-table-column label="备注" align="center" prop="remark" /> -->
|
|
|
+ <!-- <el-table-column label="奖项" align="center" prop="award" /> -->
|
|
|
+ <el-table-column label="比赛轮次" align="center" prop="gameRound" v-if="columns[12].visible">
|
|
|
+ <template #default="scope">
|
|
|
+ <dict-tag :options="game_round" :value="scope.row.gameRound || ''" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="比赛阶段" align="center" prop="gameStage" v-if="columns[13].visible">
|
|
|
+ <template #default="scope">
|
|
|
+ <dict-tag :options="game_stage" :value="scope.row.gameStage || ''" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <!-- <el-table-column label="状态" align="center" prop="status" /> -->
|
|
|
+ <!-- <el-table-column label="备注" align="center" prop="remark" /> -->
|
|
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
|
<template #default="scope">
|
|
|
<el-tooltip content="修改" placement="top">
|
|
|
@@ -146,6 +157,16 @@
|
|
|
<el-form-item label="参赛人数" prop="participateNum">
|
|
|
<el-input v-model="form.participateNum" placeholder="请输入参赛人数" />
|
|
|
</el-form-item> -->
|
|
|
+ <el-form-item label="比赛阶段" prop="gameStage">
|
|
|
+ <el-radio-group v-model="form.gameStage" style="width: 100%">
|
|
|
+ <el-radio v-for="dict in game_stage" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="比赛轮次" prop="gameRound">
|
|
|
+ <el-radio-group v-model="form.gameRound" style="width: 100%">
|
|
|
+ <el-radio v-for="dict in game_round" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
<el-form-item label="计算规则" prop="scoreRule">
|
|
|
<el-select v-model="form.scoreRule" placeholder="请选择计算规则" style="width: 100%">
|
|
|
<el-option v-for="dict in game_score_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
@@ -157,11 +178,20 @@
|
|
|
<el-radio value="1">降序</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="积分分值" prop="scoreValue">
|
|
|
- <el-input v-model="form.scoreValue" placeholder="请输入积分分值" />
|
|
|
+ <el-form-item label="录取名次" prop="roundType">
|
|
|
+ <el-input v-model="form.roundType" placeholder="请输入录取名次" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="轮次" prop="roundType">
|
|
|
- <el-input v-model="form.roundType" placeholder="请输入轮次" />
|
|
|
+ <el-form-item label="积分分值" prop="scoreValue">
|
|
|
+ <template #label>
|
|
|
+ <span>
|
|
|
+ <el-tooltip content="各值之间以英文逗号分隔" placement="top">
|
|
|
+ <el-icon>
|
|
|
+ <question-filled />
|
|
|
+ </el-icon>
|
|
|
+ </el-tooltip>
|
|
|
+ 积分</span>
|
|
|
+ </template>
|
|
|
+ <el-input v-model="form.scoreValue" placeholder="请输入名次对应的积分" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="开始时间" prop="startTime">
|
|
|
<el-date-picker clearable v-model="form.startTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择开始时间">
|
|
|
@@ -173,14 +203,9 @@
|
|
|
</el-form-item>
|
|
|
<!-- <el-form-item label="奖项" prop="award">
|
|
|
<el-input v-model="form.award" placeholder="请输入奖项" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="计时点名称" prop="timePoint">
|
|
|
- <el-input v-model="form.timePoint" placeholder="请输入计时点名称" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="控制盒编号" prop="boxCode">
|
|
|
- <el-input v-model="form.boxCode" placeholder="请输入控制盒编号" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="备注" prop="remark">
|
|
|
+ </el-form-item> -->
|
|
|
+
|
|
|
+ <!-- <el-form-item label="备注" prop="remark">
|
|
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
|
|
</el-form-item> -->
|
|
|
</el-form>
|
|
|
@@ -194,6 +219,9 @@
|
|
|
|
|
|
<!-- 裁判组查看对话框 -->
|
|
|
<RefereeGroupDialog ref="refereeGroupDialogRef" />
|
|
|
+
|
|
|
+ <!-- 项目库查看对话框 -->
|
|
|
+ <ProjectLibraryDialog ref="projectLibraryDialog" @confirm="handleLibraryConfirm" />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -203,18 +231,18 @@ import {
|
|
|
getGameEventProject,
|
|
|
delGameEventProject,
|
|
|
addGameEventProject,
|
|
|
- updateGameEventProject
|
|
|
+ updateGameEventProject,
|
|
|
+ BatchAddProject
|
|
|
} from '@/api/system/gameEventProject';
|
|
|
import { listGameEventGroup } from '@/api/system/gameEventGroup';
|
|
|
import { GameEventProjectVO, GameEventProjectQuery, GameEventProjectForm } from '@/api/system/gameEventProject/types';
|
|
|
import RefereeGroupDialog from './RefereeGroupDialog.vue';
|
|
|
+import ProjectLibraryDialog from './ProjectLibraryDialog.vue';
|
|
|
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
-const { game_score_type, game_project_type, game_project_classification } = toRefs<any>(
|
|
|
- proxy?.useDict('game_score_type', 'game_project_type', 'game_project_classification')
|
|
|
-);
|
|
|
+const { game_score_type, game_project_type, game_project_classification, game_round, game_stage } = toRefs<any>(proxy?.useDict('game_score_type', 'game_project_type', 'game_project_classification', 'game_round', 'game_stage'));
|
|
|
|
|
|
-const gameEventGroupList = ref<any[]>([]); // 赛事分组列表
|
|
|
+const gameEventGroupList = ref<any[]>([]); // ���·����б�
|
|
|
|
|
|
const gameEventProjectList = ref<GameEventProjectVO[]>([]);
|
|
|
const buttonLoading = ref(false);
|
|
|
@@ -232,8 +260,13 @@ const gameEventProjectFormRef = ref<ElFormInstance>();
|
|
|
interface RefereeGroupDialogInstance {
|
|
|
openDialog: (refereeGroups: string[], projectName: string) => void;
|
|
|
}
|
|
|
+// 定义 ProjectLibraryDialog 组件的类型
|
|
|
+interface ProjectLibraryDialogInstance {
|
|
|
+ openDialog: () => void;
|
|
|
+}
|
|
|
|
|
|
const refereeGroupDialogRef = ref<(InstanceType<typeof RefereeGroupDialog> & RefereeGroupDialogInstance) | null>(null);
|
|
|
+const projectLibraryDialog = ref<(InstanceType<typeof ProjectLibraryDialog> & ProjectLibraryDialogInstance) | null>(null);
|
|
|
|
|
|
const dialog = reactive<DialogOption>({
|
|
|
visible: false,
|
|
|
@@ -242,7 +275,7 @@ const dialog = reactive<DialogOption>({
|
|
|
|
|
|
// 列显隐数据
|
|
|
const columns = ref<FieldOption[]>([
|
|
|
- { key: 0, label: '主键', visible: false },
|
|
|
+ { key: 0, label: '项目id', visible: false },
|
|
|
{ key: 1, label: '项目名称', visible: true },
|
|
|
{ key: 2, label: '项目类型', visible: true },
|
|
|
{ key: 3, label: '归类', visible: true },
|
|
|
@@ -251,9 +284,11 @@ const columns = ref<FieldOption[]>([
|
|
|
{ key: 6, label: '开始时间', visible: true },
|
|
|
{ key: 7, label: '结束时间', visible: true },
|
|
|
{ key: 8, label: '裁判组', visible: true },
|
|
|
- { key: 9, label: '轮次', visible: true },
|
|
|
- { key: 10, label: '排序方式', visible: true },
|
|
|
- { key: 11, label: '积分分值', visible: true }
|
|
|
+ { key: 9, label: '录取名次', visible: true },
|
|
|
+ { key: 10, label: '积分分值', visible: true },
|
|
|
+ { key: 11, label: '排序方式', visible: true },
|
|
|
+ { key: 12, label: '比赛轮次', visible: true },
|
|
|
+ { key: 13, label: '比赛阶段', visible: true },
|
|
|
]);
|
|
|
|
|
|
const initFormData: GameEventProjectForm = {
|
|
|
@@ -273,8 +308,8 @@ const initFormData: GameEventProjectForm = {
|
|
|
scoreRule: undefined,
|
|
|
scoreValue: undefined,
|
|
|
award: undefined,
|
|
|
- timePoint: undefined,
|
|
|
- boxCode: undefined,
|
|
|
+ gameRound: undefined,
|
|
|
+ gameStage: undefined,
|
|
|
status: undefined,
|
|
|
remark: undefined
|
|
|
};
|
|
|
@@ -285,13 +320,13 @@ const data = reactive<PageData<GameEventProjectForm, GameEventProjectQuery>>({
|
|
|
pageSize: 10,
|
|
|
classification: undefined,
|
|
|
orderByColumn: undefined,
|
|
|
- isAsc: undefined
|
|
|
+ isAsc: undefined,
|
|
|
},
|
|
|
rules: {
|
|
|
projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
|
|
|
projectType: [{ required: true, message: '项目类型不能为空', trigger: 'change' }],
|
|
|
classification: [{ required: true, message: '归类不能为空', trigger: 'change' }],
|
|
|
- orderType: [{ required: true, message: '排序方式不能为空', trigger: 'change' }]
|
|
|
+ orderType: [{ required: true, message: '排序方式不能为空', trigger: 'change' }],
|
|
|
}
|
|
|
});
|
|
|
|
|
|
@@ -312,7 +347,7 @@ const getGameEventGroupList = async () => {
|
|
|
pageNum: 1,
|
|
|
pageSize: 10,
|
|
|
orderByColumn: undefined,
|
|
|
- isAsc: undefined
|
|
|
+ isAsc: undefined,
|
|
|
});
|
|
|
gameEventGroupList.value = res.data;
|
|
|
};
|
|
|
@@ -343,7 +378,7 @@ const resetQuery = () => {
|
|
|
|
|
|
/** 多选框选中数据 */
|
|
|
const handleSelectionChange = (selection: any[]) => {
|
|
|
- ids.value = selection.map((item) => item.projectId);
|
|
|
+ ids.value = selection.map(item => item.projectId);
|
|
|
single.value = selection.length !== 1;
|
|
|
multiple.value = !selection.length;
|
|
|
};
|
|
|
@@ -359,7 +394,7 @@ const handleAdd = () => {
|
|
|
const handleUpdate = (row?: GameEventProjectVO) => {
|
|
|
reset();
|
|
|
const projectId = row?.projectId || ids.value.at(0);
|
|
|
- getGameEventProject(projectId).then((response) => {
|
|
|
+ getGameEventProject(projectId).then(response => {
|
|
|
Object.assign(form.value, response.data);
|
|
|
dialog.visible = true;
|
|
|
dialog.title = '修改赛事项目';
|
|
|
@@ -368,29 +403,25 @@ const handleUpdate = (row?: GameEventProjectVO) => {
|
|
|
|
|
|
/** 提交按钮 */
|
|
|
const submitForm = () => {
|
|
|
- gameEventProjectFormRef.value?.validate((valid) => {
|
|
|
+ gameEventProjectFormRef.value?.validate(valid => {
|
|
|
if (valid) {
|
|
|
buttonLoading.value = true;
|
|
|
if (form.value.projectId !== undefined) {
|
|
|
- updateGameEventProject(form.value)
|
|
|
- .then((response) => {
|
|
|
- proxy?.$modal.msgSuccess('修改成功');
|
|
|
- dialog.visible = false;
|
|
|
- getList();
|
|
|
- })
|
|
|
- .finally(() => {
|
|
|
- buttonLoading.value = false;
|
|
|
- });
|
|
|
+ updateGameEventProject(form.value).then(response => {
|
|
|
+ proxy?.$modal.msgSuccess('修改成功');
|
|
|
+ dialog.visible = false;
|
|
|
+ getList();
|
|
|
+ }).finally(() => {
|
|
|
+ buttonLoading.value = false;
|
|
|
+ });
|
|
|
} else {
|
|
|
- addGameEventProject(form.value)
|
|
|
- .then((response) => {
|
|
|
- proxy?.$modal.msgSuccess('新增成功');
|
|
|
- dialog.visible = false;
|
|
|
- getList();
|
|
|
- })
|
|
|
- .finally(() => {
|
|
|
- buttonLoading.value = false;
|
|
|
- });
|
|
|
+ addGameEventProject(form.value).then(response => {
|
|
|
+ proxy?.$modal.msgSuccess('新增成功');
|
|
|
+ dialog.visible = false;
|
|
|
+ getList();
|
|
|
+ }).finally(() => {
|
|
|
+ buttonLoading.value = false;
|
|
|
+ });
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
@@ -399,18 +430,12 @@ const submitForm = () => {
|
|
|
/** 删除按钮操作 */
|
|
|
const handleDelete = (row?: GameEventProjectVO) => {
|
|
|
const projectIds = row?.projectId || ids.value;
|
|
|
- proxy?.$modal
|
|
|
- .confirm('是否确认删除赛事项目编号为"' + projectIds + '"的数据项?')
|
|
|
- .then(function () {
|
|
|
- return delGameEventProject(projectIds);
|
|
|
- })
|
|
|
- .then(() => {
|
|
|
- getList();
|
|
|
- proxy?.$modal.msgSuccess('删除成功');
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- proxy?.$modal.msgSuccess('删除失败');
|
|
|
- });
|
|
|
+ proxy?.$modal.confirm('是否确认删除赛事项目编号为"' + projectIds + '"的数据项?').then(function () {
|
|
|
+ return delGameEventProject(projectIds);
|
|
|
+ }).then(() => {
|
|
|
+ getList();
|
|
|
+ proxy?.$modal.msgSuccess('删除成功');
|
|
|
+ }).catch(() => {proxy?.$modal.msgSuccess('删除失败');});
|
|
|
};
|
|
|
|
|
|
/** 导出按钮操作 */
|
|
|
@@ -429,8 +454,28 @@ const handleViewRefereeGroup = (refereeGroups: string[], projectName: string) =>
|
|
|
refereeGroupDialogRef.value?.openDialog(refereeGroups, projectName);
|
|
|
};
|
|
|
|
|
|
+/** 查看项目库 */
|
|
|
+const handleViewProjectLibrary = () => {
|
|
|
+ projectLibraryDialog.value?.openDialog();
|
|
|
+};
|
|
|
+
|
|
|
+/** 处理项目库选择确认 */
|
|
|
+const handleLibraryConfirm = async (projects: GameEventProjectVO[]) => {
|
|
|
+ try {
|
|
|
+ // 调用添加接口
|
|
|
+ await BatchAddProject(projects);
|
|
|
+ } catch (error) {
|
|
|
+ console.error('添加项目失败:', error);
|
|
|
+ proxy?.$modal.msgError(`添加项目失败`);
|
|
|
+ }
|
|
|
+
|
|
|
+ proxy?.$modal.msgSuccess(`成功添加${projects.length}个项目`);
|
|
|
+ getList(); // 刷新列表
|
|
|
+};
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
getList();
|
|
|
// getGameEventGroupList();
|
|
|
});
|
|
|
+
|
|
|
</script>
|