用户管理证书
This commit is contained in:
parent
ecec637f05
commit
bbab43e8fa
@ -41,7 +41,7 @@ export const eventrecordPageGet = (params) => {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取证书列表
|
* 获取证书列表
|
||||||
* @param {number} registrationid - 报名记录ID (路径参数)
|
* @param {Array<number>} registrationIds - 报名记录ID列表
|
||||||
* @returns {Promise<Array<{
|
* @returns {Promise<Array<{
|
||||||
* id: number,
|
* id: number,
|
||||||
* name: string,
|
* name: string,
|
||||||
@ -50,8 +50,8 @@ export const eventrecordPageGet = (params) => {
|
|||||||
* imageUrl: string
|
* imageUrl: string
|
||||||
* }>>}
|
* }>>}
|
||||||
*/
|
*/
|
||||||
export const eventrecordCertificatesGet = (registrationid) => {
|
export const eventrecordCertificatesGet = (registrationIds) => {
|
||||||
return http.get(`/eventrecord/${registrationid}/certificates`);
|
return http.get('/eventrecord/certificates', { params: { registrationIds } });
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -56,7 +56,7 @@ const route = useRoute();
|
|||||||
const state = reactive({
|
const state = reactive({
|
||||||
// 修复:https://gitee.com/lyt-top/vue-next-admin/issues/I3YX6G
|
// 修复:https://gitee.com/lyt-top/vue-next-admin/issues/I3YX6G
|
||||||
defaultActive: route.meta.isDynamic ? route.meta.isDynamicPath : route.path,
|
defaultActive: route.meta.isDynamic ? route.meta.isDynamicPath : route.path,
|
||||||
isCollapse: false,
|
isCollapse: themeConfig.value.isCollapse,
|
||||||
});
|
});
|
||||||
|
|
||||||
// 获取父级菜单数据
|
// 获取父级菜单数据
|
||||||
@ -93,7 +93,9 @@ onBeforeRouteUpdate((to) => {
|
|||||||
watch(
|
watch(
|
||||||
() => themeConfig.value.isCollapse,
|
() => themeConfig.value.isCollapse,
|
||||||
(isCollapse) => {
|
(isCollapse) => {
|
||||||
document.body.clientWidth <= 1000 ? (state.isCollapse = false) : (state.isCollapse = isCollapse);
|
if (document.body.clientWidth > 1000) {
|
||||||
|
state.isCollapse = isCollapse;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
immediate: true,
|
immediate: true,
|
||||||
|
|||||||
@ -27,10 +27,35 @@
|
|||||||
|
|
||||||
<!-- 弹窗 -->
|
<!-- 弹窗 -->
|
||||||
<el-dialog title="参赛记录" v-model="isShowDialog" width="80%" @close="onDialogClose">
|
<el-dialog title="参赛记录" v-model="isShowDialog" width="80%" @close="onDialogClose">
|
||||||
<ProTable v-if="isShowDialog" ref="table" :request-api="eventrecordPageGet" :columns="columnsUser" :pagination="true" :tool-button="false" :initParam="initParamUser">
|
<ProTable v-if="isShowDialog" ref="table" :request-api="eventrecordPageGet" :columns="columnsUser" :pagination="true" :tool-button="false" :initParam="initParamUser" preserve-expanded-content>
|
||||||
|
<!-- 展开列 -->
|
||||||
|
<el-table-column type="expand">
|
||||||
|
<template #default="scope">
|
||||||
|
<div class="expand-content">
|
||||||
|
<el-table :data="scope.row.items || []" border style="width: 100%; margin-top: 10px;">
|
||||||
|
<el-table-column label="项目名称" prop="projectName" min-width="150" />
|
||||||
|
<el-table-column label="项目类型" prop="projectTypeName" width="120" />
|
||||||
|
<el-table-column label="参赛组别" prop="groupName" width="120" />
|
||||||
|
<el-table-column label="报名人数" prop="personCount" width="100" align="center" />
|
||||||
|
<el-table-column label="成绩" prop="score" width="120" />
|
||||||
|
<el-table-column label="名次" prop="rank" width="100" />
|
||||||
|
<el-table-column label="操作" width="150" align="center" fixed="right">
|
||||||
|
<template #default="item">
|
||||||
|
<el-button size="small" text type="primary" @click="lookBook(scope.row, item.row)">查看证书</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<template #index="scope">
|
<template #index="scope">
|
||||||
{{ scope.$index + 1 }}
|
{{ scope.$index + 1 }}
|
||||||
</template>
|
</template>
|
||||||
|
<template #eventType="scope">
|
||||||
|
<el-tag :type="scope.row.eventType === 'Online' ? 'primary' : 'success'">
|
||||||
|
{{ scope.row.eventType === 'Online' ? '线上' : '线下' }}
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
<template #startTime="scope"> {{ scope.row.startTime }} -- {{ scope.row.endTime }} </template>
|
<template #startTime="scope"> {{ scope.row.startTime }} -- {{ scope.row.endTime }} </template>
|
||||||
<template #action="scope">
|
<template #action="scope">
|
||||||
<el-button v-auth="'user:general:record'" size="small" text type="primary" @click="lookBook(scope.row)"> 查看证书 </el-button>
|
<el-button v-auth="'user:general:record'" size="small" text type="primary" @click="lookBook(scope.row)"> 查看证书 </el-button>
|
||||||
@ -46,7 +71,19 @@
|
|||||||
|
|
||||||
<!-- 弹窗 -->
|
<!-- 弹窗 -->
|
||||||
<el-dialog title="查看证书" v-model="isShowBook" width="80%">
|
<el-dialog title="查看证书" v-model="isShowBook" width="80%">
|
||||||
<div>证书</div>
|
<div v-if="certificates.length > 0">
|
||||||
|
<el-table :data="certificates" border>
|
||||||
|
<el-table-column label="证书名称" prop="name" />
|
||||||
|
<el-table-column label="获奖等级" prop="awardLevel" />
|
||||||
|
<el-table-column label="证书类型" prop="certificateType" />
|
||||||
|
<el-table-column label="查看">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button size="small" text type="primary" @click="openCertificate(scope.row.imageUrl)">查看</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
<div v-else>暂无证书</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer">
|
<span class="dialog-footer">
|
||||||
<el-button @click="onCancelB">取消</el-button>
|
<el-button @click="onCancelB">取消</el-button>
|
||||||
@ -164,21 +201,7 @@ const statusNameList = ['未提交', '未审核', '已通过', '未通过'];
|
|||||||
const columnsUser = ref([
|
const columnsUser = ref([
|
||||||
{ prop: 'index', label: '序号', align: 'center' },
|
{ prop: 'index', label: '序号', align: 'center' },
|
||||||
{ prop: 'eventName', label: '赛事名称', search: { el: 'input' } },
|
{ prop: 'eventName', label: '赛事名称', search: { el: 'input' } },
|
||||||
|
{ prop: 'eventType', label: '赛事类型', width: '100' },
|
||||||
// {
|
|
||||||
// prop: 'auditStatus',
|
|
||||||
// label: '赛事类型',
|
|
||||||
// search: {
|
|
||||||
// el: 'select',
|
|
||||||
// },
|
|
||||||
// enum: [
|
|
||||||
// { label: '全部', value: '' },
|
|
||||||
// { label: '未通过', value: 3 },
|
|
||||||
// { label: '已通过', value: 2 },
|
|
||||||
// { label: '未审核', value: 1 },
|
|
||||||
// { label: '未提交', value: 0 },
|
|
||||||
// ],
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
prop: 'startTime',
|
prop: 'startTime',
|
||||||
label: '起止时间',
|
label: '起止时间',
|
||||||
@ -198,6 +221,7 @@ const columnsUser = ref([
|
|||||||
|
|
||||||
const isShowDialog = ref(false);
|
const isShowDialog = ref(false);
|
||||||
const table = ref();
|
const table = ref();
|
||||||
|
const certificates = ref([]);
|
||||||
|
|
||||||
const onOpenMenu = (row) => {
|
const onOpenMenu = (row) => {
|
||||||
console.log(row);
|
console.log(row);
|
||||||
@ -240,15 +264,31 @@ const onCancelB = () => {
|
|||||||
|
|
||||||
// 查看证书
|
// 查看证书
|
||||||
const isShowBook = ref(false);
|
const isShowBook = ref(false);
|
||||||
const lookBook = async (row) => {
|
const lookBook = async (row, item) => {
|
||||||
const { succeeded, data } = await eventrecordCertificatesGet(row.id);
|
console.log('查看证书', row, item);
|
||||||
|
const registrationIds = row.registrationIds || [];
|
||||||
|
if (registrationIds.length === 0) {
|
||||||
|
ElMessage.warning('暂无报名记录');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const { succeeded, data } = await eventrecordCertificatesGet(registrationIds);
|
||||||
if (succeeded) {
|
if (succeeded) {
|
||||||
|
certificates.value = data || [];
|
||||||
isShowBook.value = true;
|
isShowBook.value = true;
|
||||||
} else {
|
} else {
|
||||||
ElMessage.error(data);
|
ElMessage.error(data);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 打开证书图片
|
||||||
|
const openCertificate = (url) => {
|
||||||
|
if (url) {
|
||||||
|
window.open(url, '_blank');
|
||||||
|
} else {
|
||||||
|
ElMessage.warning('证书链接无效');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// 对话框关闭时清理
|
// 对话框关闭时清理
|
||||||
const onDialogClose = () => {
|
const onDialogClose = () => {
|
||||||
// 清理参数,避免下次查询时使用旧参数
|
// 清理参数,避免下次查询时使用旧参数
|
||||||
|
|||||||
@ -32,10 +32,35 @@
|
|||||||
|
|
||||||
<!-- 弹窗 -->
|
<!-- 弹窗 -->
|
||||||
<el-dialog title="参赛记录" v-model="isShowDialog" width="80%" @close="onDialogClose">
|
<el-dialog title="参赛记录" v-model="isShowDialog" width="80%" @close="onDialogClose">
|
||||||
<ProTable v-if="isShowDialog" ref="table" :request-api="eventrecordPageGet" :columns="columnsUser" :pagination="true" :tool-button="false" :initParam="initParamUser">
|
<ProTable v-if="isShowDialog" ref="table" :request-api="eventrecordPageGet" :columns="columnsUser" :pagination="true" :tool-button="false" :initParam="initParamUser" preserve-expanded-content>
|
||||||
|
<!-- 展开列 -->
|
||||||
|
<el-table-column type="expand">
|
||||||
|
<template #default="scope">
|
||||||
|
<div class="expand-content">
|
||||||
|
<el-table :data="scope.row.items || []" border style="width: 100%; margin-top: 10px;">
|
||||||
|
<el-table-column label="项目名称" prop="projectName" min-width="150" />
|
||||||
|
<el-table-column label="项目类型" prop="projectTypeName" width="120" />
|
||||||
|
<el-table-column label="参赛组别" prop="groupName" width="120" />
|
||||||
|
<el-table-column label="报名人数" prop="personCount" width="100" align="center" />
|
||||||
|
<el-table-column label="成绩" prop="score" width="120" />
|
||||||
|
<el-table-column label="名次" prop="rank" width="100" />
|
||||||
|
<el-table-column label="操作" width="150" align="center" fixed="right">
|
||||||
|
<template #default="item">
|
||||||
|
<el-button size="small" text type="primary" @click="lookBook(scope.row, item.row)">查看证书</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<template #index="scope">
|
<template #index="scope">
|
||||||
{{ scope.$index + 1 }}
|
{{ scope.$index + 1 }}
|
||||||
</template>
|
</template>
|
||||||
|
<template #eventType="scope">
|
||||||
|
<el-tag :type="scope.row.eventType === 'Online' ? 'primary' : 'success'">
|
||||||
|
{{ scope.row.eventType === 'Online' ? '线上' : '线下' }}
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
<template #startTime="scope"> {{ scope.row.startTime }} -- {{ scope.row.endTime }} </template>
|
<template #startTime="scope"> {{ scope.row.startTime }} -- {{ scope.row.endTime }} </template>
|
||||||
<template #action="scope">
|
<template #action="scope">
|
||||||
<el-button v-auth="'user:general:record'" size="small" text type="primary" @click="lookBook(scope.row)"> 查看证书 </el-button>
|
<el-button v-auth="'user:general:record'" size="small" text type="primary" @click="lookBook(scope.row)"> 查看证书 </el-button>
|
||||||
@ -51,7 +76,19 @@
|
|||||||
|
|
||||||
<!-- 弹窗 -->
|
<!-- 弹窗 -->
|
||||||
<el-dialog title="查看证书" v-model="isShowBook" width="80%">
|
<el-dialog title="查看证书" v-model="isShowBook" width="80%">
|
||||||
<div>证书</div>
|
<div v-if="certificates.length > 0">
|
||||||
|
<el-table :data="certificates" border>
|
||||||
|
<el-table-column label="证书名称" prop="name" />
|
||||||
|
<el-table-column label="获奖等级" prop="awardLevel" />
|
||||||
|
<el-table-column label="证书类型" prop="certificateType" />
|
||||||
|
<el-table-column label="查看">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button size="small" text type="primary" @click="openCertificate(scope.row.imageUrl)">查看</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
<div v-else>暂无证书</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer">
|
<span class="dialog-footer">
|
||||||
<el-button @click="onCancelB">取消</el-button>
|
<el-button @click="onCancelB">取消</el-button>
|
||||||
@ -178,21 +215,7 @@ const handleSelectionChange = (val) => {
|
|||||||
const columnsUser = ref([
|
const columnsUser = ref([
|
||||||
{ prop: 'index', label: '序号', align: 'center' },
|
{ prop: 'index', label: '序号', align: 'center' },
|
||||||
{ prop: 'eventName', label: '赛事名称', search: { el: 'input' } },
|
{ prop: 'eventName', label: '赛事名称', search: { el: 'input' } },
|
||||||
|
{ prop: 'eventType', label: '赛事类型', width: '100' },
|
||||||
// {
|
|
||||||
// prop: 'auditStatus',
|
|
||||||
// label: '赛事类型',
|
|
||||||
// search: {
|
|
||||||
// el: 'select',
|
|
||||||
// },
|
|
||||||
// enum: [
|
|
||||||
// { label: '全部', value: '' },
|
|
||||||
// { label: '未通过', value: 3 },
|
|
||||||
// { label: '已通过', value: 2 },
|
|
||||||
// { label: '未审核', value: 1 },
|
|
||||||
// { label: '未提交', value: 0 },
|
|
||||||
// ],
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
prop: 'startTime',
|
prop: 'startTime',
|
||||||
label: '起止时间',
|
label: '起止时间',
|
||||||
@ -212,6 +235,7 @@ const columnsUser = ref([
|
|||||||
|
|
||||||
const isShowDialog = ref(false);
|
const isShowDialog = ref(false);
|
||||||
const table = ref();
|
const table = ref();
|
||||||
|
const certificates = ref([]);
|
||||||
|
|
||||||
const onOpenMenu = (row) => {
|
const onOpenMenu = (row) => {
|
||||||
console.log(row);
|
console.log(row);
|
||||||
@ -241,15 +265,31 @@ const onCancelB = () => {
|
|||||||
|
|
||||||
// 查看证书
|
// 查看证书
|
||||||
const isShowBook = ref(false);
|
const isShowBook = ref(false);
|
||||||
const lookBook = async (row) => {
|
const lookBook = async (row, item) => {
|
||||||
const { succeeded, data } = await eventrecordCertificatesGet(row.id);
|
console.log('查看证书', row, item);
|
||||||
|
const registrationIds = row.registrationIds || [];
|
||||||
|
if (registrationIds.length === 0) {
|
||||||
|
ElMessage.warning('暂无报名记录');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const { succeeded, data } = await eventrecordCertificatesGet(registrationIds);
|
||||||
if (succeeded) {
|
if (succeeded) {
|
||||||
|
certificates.value = data || [];
|
||||||
isShowBook.value = true;
|
isShowBook.value = true;
|
||||||
} else {
|
} else {
|
||||||
ElMessage.error(data);
|
ElMessage.error(data);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 打开证书图片
|
||||||
|
const openCertificate = (url) => {
|
||||||
|
if (url) {
|
||||||
|
window.open(url, '_blank');
|
||||||
|
} else {
|
||||||
|
ElMessage.warning('证书链接无效');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// 审核弹窗相关
|
// 审核弹窗相关
|
||||||
const isShowAuditDialog = ref(false);
|
const isShowAuditDialog = ref(false);
|
||||||
const auditForm = reactive({
|
const auditForm = reactive({
|
||||||
|
|||||||
@ -188,8 +188,8 @@ import { ElMessage, ElForm } from 'element-plus';
|
|||||||
import SysMenuApi from '/@/api/SysMenuApi';
|
import SysMenuApi from '/@/api/SysMenuApi';
|
||||||
import { auths } from '/@/utils/authFunction';
|
import { auths } from '/@/utils/authFunction';
|
||||||
import ProTable from '/@/components/ProTable/index.vue';
|
import ProTable from '/@/components/ProTable/index.vue';
|
||||||
import { teamPageGet, teamDetailGet, teamAddPost, teamDeleteDelete, teamUpdatePut } from '/@/api/match/unitUser';
|
import { teamPageGet, teamDetailGet, teamAddPost, teamDeleteDelete, teamUpdatePut } from '/@/api/match/unituser';
|
||||||
import { appuserAthletePageGet, appuserAthleteAddPost, appuserAthleteUpdatePut, appuserLeaderPageGet, appuserCoachPageGet } from '/@/api/match/appuser';
|
import { appuserAthletePageGet, appuserAthleteAddPost, appuserAthleteUpdatePut, appuserLeaderPageGet, appuserCoachPageGet, appuserMemberDeletePost } from '/@/api/match/appuser';
|
||||||
import { commonOcrRecognizeIdcardPost, commonOcrRecognizePassportPost, commonSmsSendVerificationCodePost } from '/@/api/match/common';
|
import { commonOcrRecognizeIdcardPost, commonOcrRecognizePassportPost, commonSmsSendVerificationCodePost } from '/@/api/match/common';
|
||||||
// 定义表单引用类型
|
// 定义表单引用类型
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
@ -563,14 +563,25 @@ const onOpenMenu = (row) => {
|
|||||||
isShowDialog.value = true;
|
isShowDialog.value = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
//删除菜单
|
//删除运动员
|
||||||
const onDeleteMenu = async (id) => {
|
const onDeleteMenu = async (id) => {
|
||||||
// 保留给其它删除场景(如果需要),目前不改动
|
try {
|
||||||
const { succeeded, errors } = await SysMenuApi.delete({ id });
|
const res = await appuserMemberDeletePost(id);
|
||||||
if (succeeded) {
|
if (res && res.succeeded) {
|
||||||
ElMessage.success('删除成功');
|
ElMessage.success('删除成功');
|
||||||
} else {
|
// 刷新运动员表格
|
||||||
ElMessage.error(errors);
|
try {
|
||||||
|
await nextTick();
|
||||||
|
initParam.value.refresh = !initParam.value.refresh;
|
||||||
|
} catch (e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ElMessage.error(res.errors || res.msg || '删除失败');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
ElMessage.error('删除失败');
|
||||||
|
console.error(e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user