This commit is contained in:
李旭明 committed 2025-08-28 13:55:36 +08:00
1 parent 64886ba214
commit f030749dd5
13 files changed
+408 -380

No files matched your search

@@ -80,8 +80,9 @@ public class StglMyController extends BaseController {
@GetMapping("/registrations") @GetMapping("/registrations")
public TableDataInfo<MyRegistrationVo> getMyRegistrations( public TableDataInfo<MyRegistrationVo> getMyRegistrations(
@Parameter(description = "分页参数") PageQuery pageQuery, @Parameter(description = "分页参数") PageQuery pageQuery,
@Parameter(description = "报名类型(1-社团 2-志愿团队 3-活动)") @RequestParam(required = false) String registrationType) { @Parameter(description = "报名类型(1-社团 2-志愿团队 3-活动)") @RequestParam(required = false) String registrationType,
return stglMyService.queryMyRegistrations(pageQuery, registrationType); @Parameter(description = "名称(模糊查询)") @RequestParam(required = false) String name) {
return stglMyService.queryMyRegistrations(pageQuery, registrationType, name);
} }
/** /**
@@ -54,10 +54,12 @@ public interface StglMyMapper {
* *
* @param userId 用户ID * @param userId 用户ID
* @param registrationType 报名类型(可选) * @param registrationType 报名类型(可选)
* @param name 名称(可选,模糊查询)
* @return 报名记录列表 * @return 报名记录列表
*/ */
List<MyRegistrationVo> selectMyRegistrations(@Param("userId") Long userId, List<MyRegistrationVo> selectMyRegistrations(@Param("userId") Long userId,
@Param("registrationType") String registrationType); @Param("registrationType") String registrationType,
@Param("name") String name);
/** /**
* 分页查询我的报名记录(社团+志愿团队+活动) * 分页查询我的报名记录(社团+志愿团队+活动)
@@ -65,11 +67,13 @@ public interface StglMyMapper {
* @param page 分页对象 * @param page 分页对象
* @param userId 用户ID * @param userId 用户ID
* @param registrationType 报名类型(可选) * @param registrationType 报名类型(可选)
* @param name 名称(可选,模糊查询)
* @return 分页结果 * @return 分页结果
*/ */
Page<MyRegistrationVo> selectMyRegistrationsPage(@Param("page") Page<MyRegistrationVo> page, Page<MyRegistrationVo> selectMyRegistrationsPage(@Param("page") Page<MyRegistrationVo> page,
@Param("userId") Long userId, @Param("userId") Long userId,
@Param("registrationType") String registrationType); @Param("registrationType") String registrationType,
@Param("name") String name);
/** /**
* 查询我的报名记录总数 * 查询我的报名记录总数
@@ -47,9 +47,10 @@ public interface IStglMyService {
* *
* @param pageQuery 分页参数 * @param pageQuery 分页参数
* @param registrationType 报名类型(可选) * @param registrationType 报名类型(可选)
* @param name 名称(可选,模糊查询)
* @return 报名记录分页信息 * @return 报名记录分页信息
*/ */
TableDataInfo<MyRegistrationVo> queryMyRegistrations(PageQuery pageQuery, String registrationType); TableDataInfo<MyRegistrationVo> queryMyRegistrations(PageQuery pageQuery, String registrationType, String name);
/** /**
* 对活动进行评分 * 对活动进行评分
@@ -72,10 +72,10 @@ public class StglMyServiceImpl implements IStglMyService {
* 分页查询我的报名记录 * 分页查询我的报名记录
*/ */
@Override @Override
public TableDataInfo<MyRegistrationVo> queryMyRegistrations(PageQuery pageQuery, String registrationType) { public TableDataInfo<MyRegistrationVo> queryMyRegistrations(PageQuery pageQuery, String registrationType, String name) {
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
Page<MyRegistrationVo> result = stglMyMapper.selectMyRegistrationsPage(pageQuery.build(), userId, registrationType); Page<MyRegistrationVo> result = stglMyMapper.selectMyRegistrationsPage(pageQuery.build(), userId, registrationType, name);
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@@ -267,8 +267,8 @@
NULL as approval_time, NULL as approval_time,
NULL as approval_by, NULL as approval_by,
m.remark, m.remark,
CASE WHEN m.status = '1' THEN '正常' ELSE '待审核' END as current_status, (SELECT dict_label FROM sys_dict_data WHERE dict_type = 'stgl_member_status' AND dict_value = CAST(m.status AS CHAR) AND tenant_id = '000000') as current_status,
(SELECT dict_label FROM sys_dict_data WHERE dict_type = 'stgl_member_role' AND dict_value = CAST(m.role_type AS CHAR) AND tenant_id = '000000') as role, m.role_type as role,
c.president_name as organizer, c.president_name as organizer,
c.establish_date as time_info, c.establish_date as time_info,
'' as location, '' as location,
@@ -279,6 +279,9 @@
FROM stgl_member m FROM stgl_member m
INNER JOIN stgl_club c ON m.relation_id = c.id AND m.member_type = 1 AND m.tenant_id = '000000' AND c.tenant_id = '000000' INNER JOIN stgl_club c ON m.relation_id = c.id AND m.member_type = 1 AND m.tenant_id = '000000' AND c.tenant_id = '000000'
WHERE m.user_id = #{userId} AND m.deleted = 0 AND c.deleted = 0 WHERE m.user_id = #{userId} AND m.deleted = 0 AND c.deleted = 0
<if test="name != null and name != ''">
AND c.club_name LIKE CONCAT('%', #{name}, '%')
</if>
) )
UNION ALL UNION ALL
( (
@@ -293,7 +296,7 @@
NULL as approval_time, NULL as approval_time,
NULL as approval_by, NULL as approval_by,
m.remark, m.remark,
CASE WHEN m.status = '1' THEN '正常' ELSE '待审核' END as current_status, (SELECT dict_label FROM sys_dict_data WHERE dict_type = 'stgl_member_status' AND dict_value = CAST(m.status AS CHAR) AND tenant_id = '000000') as current_status,
(SELECT dict_label FROM sys_dict_data WHERE dict_type = 'stgl_volunteer_role' AND dict_value = CAST(m.role_type AS CHAR) AND tenant_id = '000000') as role, (SELECT dict_label FROM sys_dict_data WHERE dict_type = 'stgl_volunteer_role' AND dict_value = CAST(m.role_type AS CHAR) AND tenant_id = '000000') as role,
vt.leader_name as organizer, vt.leader_name as organizer,
vt.establish_date as time_info, vt.establish_date as time_info,
@@ -305,6 +308,9 @@
FROM stgl_member m FROM stgl_member m
INNER JOIN stgl_volunteer_team vt ON m.relation_id = vt.id AND m.member_type = 2 AND m.tenant_id = '000000' AND vt.tenant_id = '000000' INNER JOIN stgl_volunteer_team vt ON m.relation_id = vt.id AND m.member_type = 2 AND m.tenant_id = '000000' AND vt.tenant_id = '000000'
WHERE m.user_id = #{userId} AND m.deleted = 0 AND vt.deleted = 0 WHERE m.user_id = #{userId} AND m.deleted = 0 AND vt.deleted = 0
<if test="name != null and name != ''">
AND vt.team_name LIKE CONCAT('%', #{name}, '%')
</if>
) )
UNION ALL UNION ALL
( (
@@ -319,7 +325,7 @@
ar.approval_time, ar.approval_time,
ar.approval_by, ar.approval_by,
ar.remark, ar.remark,
CASE WHEN ar.approval_status = '1' THEN '已报名' ELSE '待审核' END as current_status, (SELECT dict_label FROM sys_dict_data WHERE dict_type = 'stgl_approval_status' AND dict_value = CAST(ar.approval_status AS CHAR) AND tenant_id = '000000') as current_status,
'参与者' as role, '参与者' as role,
a.organizer_name as organizer, a.organizer_name as organizer,
a.start_time as time_info, a.start_time as time_info,
@@ -331,10 +337,18 @@
FROM stgl_activity_registration ar FROM stgl_activity_registration ar
INNER JOIN stgl_activity a ON ar.activity_id = a.id AND ar.tenant_id = '000000' AND a.tenant_id = '000000' INNER JOIN stgl_activity a ON ar.activity_id = a.id AND ar.tenant_id = '000000' AND a.tenant_id = '000000'
WHERE ar.user_id = #{userId} AND ar.deleted = 0 AND a.deleted = 0 WHERE ar.user_id = #{userId} AND ar.deleted = 0 AND a.deleted = 0
<if test="name != null and name != ''">
AND a.activity_name LIKE CONCAT('%', #{name}, '%')
</if>
) )
<if test="registrationType != null and registrationType != ''"> <where>
WHERE registration_type = #{registrationType} <if test="registrationType != null and registrationType != ''">
</if> AND registration_type = #{registrationType}
</if>
<if test="name != null and name != ''">
AND target_name LIKE CONCAT('%', #{name}, '%')
</if>
</where>
ORDER BY registration_time DESC ORDER BY registration_time DESC
</select> </select>
@@ -379,8 +393,8 @@
NULL as approval_time, NULL as approval_time,
NULL as approval_by, NULL as approval_by,
m.remark, m.remark,
CASE WHEN m.status = '1' THEN '正常' ELSE '待审核' END as current_status, (SELECT dict_label FROM sys_dict_data WHERE dict_type = 'stgl_member_status' AND dict_value = CAST(m.status AS CHAR) AND tenant_id = '000000') as current_status,
(SELECT dict_label FROM sys_dict_data WHERE dict_type = 'stgl_member_role' AND dict_value = CAST(m.role_type AS CHAR) AND tenant_id = '000000') as role, m.role_type as role,
c.president_name as organizer, c.president_name as organizer,
c.establish_date as time_info, c.establish_date as time_info,
'' as location, '' as location,
@@ -391,6 +405,9 @@
FROM stgl_member m FROM stgl_member m
INNER JOIN stgl_club c ON m.relation_id = c.id AND m.member_type = 1 AND m.tenant_id = '000000' AND c.tenant_id = '000000' INNER JOIN stgl_club c ON m.relation_id = c.id AND m.member_type = 1 AND m.tenant_id = '000000' AND c.tenant_id = '000000'
WHERE m.user_id = #{userId} AND m.deleted = 0 AND c.deleted = 0 WHERE m.user_id = #{userId} AND m.deleted = 0 AND c.deleted = 0
<if test="name != null and name != ''">
AND c.club_name LIKE CONCAT('%', #{name}, '%')
</if>
) )
UNION ALL UNION ALL
( (
@@ -405,7 +422,7 @@
NULL as approval_time, NULL as approval_time,
NULL as approval_by, NULL as approval_by,
m.remark, m.remark,
CASE WHEN m.status = '1' THEN '正常' ELSE '待审核' END as current_status, (SELECT dict_label FROM sys_dict_data WHERE dict_type = 'stgl_member_status' AND dict_value = CAST(m.status AS CHAR) AND tenant_id = '000000') as current_status,
(SELECT dict_label FROM sys_dict_data WHERE dict_type = 'stgl_volunteer_role' AND dict_value = CAST(m.role_type AS CHAR) AND tenant_id = '000000') as role, (SELECT dict_label FROM sys_dict_data WHERE dict_type = 'stgl_volunteer_role' AND dict_value = CAST(m.role_type AS CHAR) AND tenant_id = '000000') as role,
vt.leader_name as organizer, vt.leader_name as organizer,
vt.establish_date as time_info, vt.establish_date as time_info,
@@ -417,6 +434,9 @@
FROM stgl_member m FROM stgl_member m
INNER JOIN stgl_volunteer_team vt ON m.relation_id = vt.id AND m.member_type = 2 AND m.tenant_id = '000000' AND vt.tenant_id = '000000' INNER JOIN stgl_volunteer_team vt ON m.relation_id = vt.id AND m.member_type = 2 AND m.tenant_id = '000000' AND vt.tenant_id = '000000'
WHERE m.user_id = #{userId} AND m.deleted = 0 AND vt.deleted = 0 WHERE m.user_id = #{userId} AND m.deleted = 0 AND vt.deleted = 0
<if test="name != null and name != ''">
AND vt.team_name LIKE CONCAT('%', #{name}, '%')
</if>
) )
UNION ALL UNION ALL
( (
@@ -431,7 +451,7 @@
ar.approval_time, ar.approval_time,
ar.approval_by, ar.approval_by,
ar.remark, ar.remark,
CASE WHEN ar.approval_status = '1' THEN '已报名' ELSE '待审核' END as current_status, (SELECT dict_label FROM sys_dict_data WHERE dict_type = 'stgl_approval_status' AND dict_value = CAST(ar.approval_status AS CHAR) AND tenant_id = '000000') as current_status,
'参与者' as role, '参与者' as role,
a.organizer_name as organizer, a.organizer_name as organizer,
a.start_time as time_info, a.start_time as time_info,
@@ -443,11 +463,19 @@
FROM stgl_activity_registration ar FROM stgl_activity_registration ar
INNER JOIN stgl_activity a ON ar.activity_id = a.id AND ar.tenant_id = '000000' AND a.tenant_id = '000000' INNER JOIN stgl_activity a ON ar.activity_id = a.id AND ar.tenant_id = '000000' AND a.tenant_id = '000000'
WHERE ar.user_id = #{userId} AND ar.deleted = 0 AND a.deleted = 0 WHERE ar.user_id = #{userId} AND ar.deleted = 0 AND a.deleted = 0
<if test="name != null and name != ''">
AND a.activity_name LIKE CONCAT('%', #{name}, '%')
</if>
) )
) all_registrations ) all_registrations
<if test="registrationType != null and registrationType != ''"> <where>
WHERE registration_type = #{registrationType} <if test="registrationType != null and registrationType != ''">
</if> AND registration_type = #{registrationType}
</if>
<if test="name != null and name != ''">
AND target_name LIKE CONCAT('%', #{name}, '%')
</if>
</where>
ORDER BY registration_time DESC ORDER BY registration_time DESC
</select> </select>
+2 -2
View File
@@ -211,8 +211,8 @@ export interface MyRegistrationQuery {
pageNum?: number; pageNum?: number;
/** 每页显示记录数 */ /** 每页显示记录数 */
pageSize?: number; pageSize?: number;
/** 名称 */
name?: string;
/** 报名类型 */ /** 报名类型 */
registrationType?: string; registrationType?: string;
/** 审核状态 */
approvalStatus?: string;
} }
@@ -3,186 +3,69 @@
<el-tabs type="border-card" v-model="activeTab"> <el-tabs type="border-card" v-model="activeTab">
<!-- 基本信息标签页 --> <!-- 基本信息标签页 -->
<el-tab-pane label="基本信息" name="basic"> <el-tab-pane label="基本信息" name="basic">
<el-row :gutter="20"> <!-- 基本信息区域 -->
<el-col :span="12"> <el-divider content-position="left">基本信息</el-divider>
<div class="detail-item"> <el-descriptions :column="2" border class="basic-info-section custom-width-registration">
<label class="detail-label">活动名称</label> <el-descriptions-item label="活动名称">{{ activity.activityName || '暂无' }}</el-descriptions-item>
<div class="detail-value">{{ activity.activityName || '暂无' }}</div> <el-descriptions-item label="活动类型">
</div> <dict-tag :options="stgl_activity_type" :value="activity.activityType" />
</el-col> </el-descriptions-item>
<el-col :span="12"> <el-descriptions-item label="活动主题">{{ activity.activityTheme || '暂无' }}</el-descriptions-item>
<div class="detail-item"> <el-descriptions-item label="活动地点">{{ activity.location || '暂无' }}</el-descriptions-item>
<label class="detail-label">活动类型</label> <el-descriptions-item label="开始时间">{{ activity.startTime || '暂无' }}</el-descriptions-item>
<div class="detail-value"> <el-descriptions-item label="结束时间">{{ activity.endTime || '暂无' }}</el-descriptions-item>
<dict-tag :options="stgl_activity_type" :value="activity.activityType" /> <el-descriptions-item label="活动状态">
</div> <dict-tag :options="stgl_activity_status" :value="activity.activityStatus" />
</div> </el-descriptions-item>
</el-col> <el-descriptions-item label="关联社团/队伍">{{ activity.relatedClubName || '暂无' }}</el-descriptions-item>
</el-row> </el-descriptions>
<el-row :gutter="20"> <!-- 活动海报区域 -->
<el-col :span="12"> <el-divider content-position="left">活动海报</el-divider>
<div class="detail-item"> <div v-if="activity.posterUrl" class="view-poster">
<label class="detail-label">活动主题</label> <image-preview :src="activity.posterUrl" :width="200" :height="150" />
<div class="detail-value">{{ activity.activityTheme || '暂无' }}</div> </div>
</div> <div v-else class="no-poster">
</el-col> <span class="no-poster-text">暂无海报</span>
<el-col :span="12">
<div class="detail-item">
<label class="detail-label">活动地点</label>
<div class="detail-value">{{ activity.location || '暂无' }}</div>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<div class="detail-item">
<label class="detail-label">开始时间</label>
<div class="detail-value">{{ activity.startTime || '暂无' }}</div>
</div>
</el-col>
<el-col :span="12">
<div class="detail-item">
<label class="detail-label">结束时间</label>
<div class="detail-value">{{ activity.endTime || '暂无' }}</div>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<div class="detail-item">
<label class="detail-label">活动状态</label>
<div class="detail-value">
<dict-tag :options="stgl_activity_status" :value="activity.activityStatus" />
</div>
</div>
</el-col>
<el-col :span="12">
<div class="detail-item">
<label class="detail-label">关联社团/队伍</label>
<div class="detail-value">{{ activity.relatedClubName || '暂无' }}</div>
</div>
</el-col>
</el-row>
<div class="detail-item">
<label class="detail-label">活动海报</label>
<div class="detail-value">
<div v-if="activity.posterUrl" class="view-poster">
<image-preview :src="activity.posterUrl" :width="200" :height="150" />
</div>
<div v-else class="no-poster">
<span class="no-poster-text">暂无海报</span>
</div>
</div>
</div> </div>
<div class="detail-item"> <!-- 活动简介区域 -->
<label class="detail-label">活动简介</label> <el-divider content-position="left">活动简介</el-divider>
<div class="detail-value"> <div class="view-description">
<div class="view-description"> {{ activity.description || '暂无简介' }}
{{ activity.description || '暂无简介' }}
</div>
</div>
</div> </div>
<!-- 主办方信息 --> <!-- 主办方信息区域 -->
<div class="section-divider"> <el-divider content-position="left">主办方信息</el-divider>
<h4 class="section-title">主办方信息</h4> <el-descriptions :column="3" border class="organizer-info-section custom-width-organizer">
</div> <el-descriptions-item label="主办方名称" :label-style="{ width: '13%' }" :content-style="{ width: '35%' }">{{ activity.organizerName || '暂无' }}</el-descriptions-item>
<el-row :gutter="20"> <el-descriptions-item label="联系人" :label-style="{ width: '10%' }" :content-style="{ width: '15%' }">{{ activity.organizerContact || '暂无' }}</el-descriptions-item>
<el-col :span="12"> <el-descriptions-item label="联系电话" :label-style="{ width: '10%' }" :content-style="{ width: '17%' }">{{ activity.organizerPhone || '暂无' }}</el-descriptions-item>
<div class="detail-item"> </el-descriptions>
<label class="detail-label">主办方名称</label>
<div class="detail-value">{{ activity.organizerName || '暂无' }}</div>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<div class="detail-item">
<label class="detail-label">联系人</label>
<div class="detail-value">{{ activity.organizerContact || '暂无' }}</div>
</div>
</el-col>
<el-col :span="12">
<div class="detail-item">
<label class="detail-label">联系电话</label>
<div class="detail-value">{{ activity.organizerPhone || '暂无' }}</div>
</div>
</el-col>
</el-row>
<!-- 承办方信息 --> <!-- 承办方信息区域 -->
<div class="section-divider"> <el-divider content-position="left">承办方信息</el-divider>
<h4 class="section-title">承办方信息</h4>
</div>
<div v-if="coOrganizerList.length > 0"> <div v-if="coOrganizerList.length > 0">
<div v-for="(organizer, index) in coOrganizerList" :key="index" class="co-organizer-item"> <div v-for="(organizer, index) in coOrganizerList" :key="index" class="co-organizer-item custom-width-co-organizer">
<el-row :gutter="20"> <el-descriptions :column="3" border>
<el-col :span="6"> <el-descriptions-item label="承办方名称" :label-style="{ width: '12%' }" :content-style="{ width: '36%' }">{{ organizer.name || '暂无' }}</el-descriptions-item>
<div class="detail-item"> <el-descriptions-item label="联系人" :label-style="{ width: '10%' }" :content-style="{ width: '16%' }">{{ organizer.contact || '暂无' }}</el-descriptions-item>
<label class="detail-label">承办方名称</label> <el-descriptions-item label="联系电话" :label-style="{ width: '10%' }" :content-style="{ width: '16%' }">{{ organizer.phone || '暂无' }}</el-descriptions-item>
<div class="detail-value">{{ organizer.name || '暂无' }}</div> </el-descriptions>
</div>
</el-col>
<el-col :span="6">
<div class="detail-item">
<label class="detail-label">承办方类型</label>
<div class="detail-value">{{ organizer.type || '暂无' }}</div>
</div>
</el-col>
<el-col :span="6">
<div class="detail-item">
<label class="detail-label">联系人</label>
<div class="detail-value">{{ organizer.contact || '暂无' }}</div>
</div>
</el-col>
<el-col :span="6">
<div class="detail-item">
<label class="detail-label">联系电话</label>
<div class="detail-value">{{ organizer.phone || '暂无' }}</div>
</div>
</el-col>
</el-row>
</div> </div>
</div> </div>
<div v-else class="no-data">暂无承办方信息</div> <div v-else class="no-data">暂无承办方信息</div>
<!-- 指导老师信息 --> <!-- 指导老师信息区域 -->
<div class="section-divider"> <el-divider content-position="left">指导老师信息</el-divider>
<h4 class="section-title">指导老师信息</h4>
</div>
<div v-if="instructorList.length > 0"> <div v-if="instructorList.length > 0">
<div v-for="(instructor, index) in instructorList" :key="index" class="instructor-item"> <div v-for="(instructor, index) in instructorList" :key="index" class="instructor-item custom-width-instructor">
<el-row :gutter="20"> <el-descriptions :column="4" border size="small">
<el-col :span="6"> <el-descriptions-item label="姓名" :label-style="{ width: '8%' }" :content-style="{ width: '15%' }">{{ instructor.name || '暂无' }}</el-descriptions-item>
<div class="detail-item"> <el-descriptions-item label="部门" :label-style="{ width: '8%' }" :content-style="{ width: '17%' }">{{ instructor.dept || '暂无' }}</el-descriptions-item>
<label class="detail-label">姓名</label> <el-descriptions-item label="电话" :label-style="{ width: '8%' }" :content-style="{ width: '15%' }">{{ instructor.phone || '暂无' }}</el-descriptions-item>
<div class="detail-value">{{ instructor.name || '暂无' }}</div> <el-descriptions-item label="邮箱" :label-style="{ width: '8%' }" :content-style="{ width: '17%' }">{{ instructor.email || '暂无' }}</el-descriptions-item>
</div> </el-descriptions>
</el-col>
<el-col :span="6">
<div class="detail-item">
<label class="detail-label">部门</label>
<div class="detail-value">{{ instructor.dept || '暂无' }}</div>
</div>
</el-col>
<el-col :span="6">
<div class="detail-item">
<label class="detail-label">电话</label>
<div class="detail-value">{{ instructor.phone || '暂无' }}</div>
</div>
</el-col>
<el-col :span="6">
<div class="detail-item">
<label class="detail-label">邮箱</label>
<div class="detail-value">{{ instructor.email || '暂无' }}</div>
</div>
</el-col>
</el-row>
</div> </div>
</div> </div>
<div v-else class="no-data">暂无指导老师信息</div> <div v-else class="no-data">暂无指导老师信息</div>
@@ -190,100 +73,46 @@
<!-- 报名设置标签页 --> <!-- 报名设置标签页 -->
<el-tab-pane label="报名设置" name="registration"> <el-tab-pane label="报名设置" name="registration">
<el-row :gutter="20"> <!-- 报名方式和审核设置区域 -->
<el-col :span="12"> <el-divider content-position="left">报名方式和审核设置</el-divider>
<div class="detail-item"> <el-descriptions :column="2" border class="registration-info-section custom-width-registration">
<label class="detail-label">报名方式</label> <el-descriptions-item label="报名方式" :label-style="{ width: '10%' }" :content-style="{ width: '40%' }">
<div class="detail-value"> <dict-tag :options="stgl_registration_type" :value="activity.registrationType" />
<dict-tag :options="stgl_registration_type" :value="activity.registrationType" /> </el-descriptions-item>
</div> <el-descriptions-item label="是否需要审核" :label-style="{ width: '10%' }" :content-style="{ width: '40%' }">
</div> <!-- 临时解决方案:直接显示中文文本 -->
</el-col> <el-tag v-if="activity.needApproval === 1" type="warning" size="small">需要审核</el-tag>
<el-col :span="12"> <el-tag v-else-if="activity.needApproval === 0" type="success" size="small">无需审核</el-tag>
<div class="detail-item"> <span v-else class="text-gray-400">{{ activity.needApproval }}</span>
<label class="detail-label">是否需要审核</label> </el-descriptions-item>
<div class="detail-value"> <el-descriptions-item label="报名范围" :label-style="{ width: '10%' }" :content-style="{ width: '40%' }">
<!-- 临时解决方案:直接显示中文文本 --> <dict-tag :options="stgl_activity_range" :value="activity.activityRange" />
<el-tag v-if="activity.needApproval === 1" type="warning" size="small">需要审核</el-tag> </el-descriptions-item>
<el-tag v-else-if="activity.needApproval === 0" type="success" size="small">无需审核</el-tag> <el-descriptions-item label="报名状态" :label-style="{ width: '10%' }" :content-style="{ width: '40%' }">
<span v-else class="text-gray-400">{{ activity.needApproval }}</span> <dict-tag :options="stgl_registration_status" :value="activity.registrationStatus" />
</div> </el-descriptions-item>
</div> </el-descriptions>
</el-col>
</el-row>
<el-row :gutter="20"> <!-- 报名时间区域 -->
<el-col :span="12"> <el-divider content-position="left">报名时间</el-divider>
<div class="detail-item"> <el-descriptions :column="2" border class="registration-time-section custom-width-registration">
<label class="detail-label">报名范围</label> <el-descriptions-item label="报名开始时间">{{ activity.registrationStart || '暂无' }}</el-descriptions-item>
<div class="detail-value"> <el-descriptions-item label="报名结束时间">{{ activity.registrationEnd || '暂无' }}</el-descriptions-item>
<dict-tag :options="stgl_activity_range" :value="activity.activityRange" /> </el-descriptions>
</div>
</div>
</el-col>
</el-row>
<el-row :gutter="20"> <!-- 人数限制区域 -->
<el-col :span="12"> <el-divider content-position="left">人数限制</el-divider>
<div class="detail-item"> <el-descriptions :column="2" border class="registration-limit-section custom-width-registration">
<label class="detail-label">报名开始时间</label> <el-descriptions-item label="总人数上限" v-if="activity.maxParticipants">{{ activity.maxParticipants }}</el-descriptions-item>
<div class="detail-value">{{ activity.registrationStart || '暂无' }}</div> <el-descriptions-item label="团队数量上限" v-if="activity.maxTeams">{{ activity.maxTeams }}</el-descriptions-item>
</div> <el-descriptions-item label="每队最小人数" v-if="activity.teamSizeMin">{{ activity.teamSizeMin }}</el-descriptions-item>
</el-col> <el-descriptions-item label="每队最大人数" v-if="activity.teamSizeMax">{{ activity.teamSizeMax }}</el-descriptions-item>
<el-col :span="12"> </el-descriptions>
<div class="detail-item">
<label class="detail-label">报名结束时间</label>
<div class="detail-value">{{ activity.registrationEnd || '暂无' }}</div>
</div>
</el-col>
</el-row>
<el-row :gutter="20" v-if="activity.maxParticipants"> <!-- 如果没有任何限制信息,显示提示 -->
<el-col :span="12"> <div v-if="!activity.maxParticipants && !activity.maxTeams && !activity.teamSizeMin && !activity.teamSizeMax" class="no-limit-data">
<div class="detail-item"> 暂无人数限制设置
<label class="detail-label">总人数上限</label> </div>
<div class="detail-value">{{ activity.maxParticipants }}</div>
</div>
</el-col>
</el-row>
<el-row :gutter="20" v-if="activity.maxTeams || activity.teamSizeMin || activity.teamSizeMax">
<el-col :span="8" v-if="activity.maxTeams">
<div class="detail-item">
<label class="detail-label">团队数量上限</label>
<div class="detail-value">{{ activity.maxTeams }}</div>
</div>
</el-col>
<el-col :span="8" v-if="activity.teamSizeMin">
<div class="detail-item">
<label class="detail-label">每队最小人数</label>
<div class="detail-value">{{ activity.teamSizeMin }}</div>
</div>
</el-col>
<el-col :span="8" v-if="activity.teamSizeMax">
<div class="detail-item">
<label class="detail-label">每队最大人数</label>
<div class="detail-value">{{ activity.teamSizeMax }}</div>
</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<div class="detail-item">
<label class="detail-label">报名状态</label>
<div class="detail-value">
<dict-tag :options="stgl_registration_status" :value="activity.registrationStatus" />
</div>
</div>
</el-col>
<el-col :span="12">
<div class="detail-item">
<label class="detail-label">报名人数</label>
<div class="detail-value">{{ activity.registrationCount || 0 }}</div>
</div>
</el-col>
</el-row>
</el-tab-pane> </el-tab-pane>
<!-- 报名查看标签页 --> <!-- 报名查看标签页 -->
@@ -506,36 +335,149 @@ onMounted(() => {
padding: 16px; padding: 16px;
} }
/* 详情项样式 */ /* el-descriptions组件相关样式 */
.detail-item { .basic-info-section,
.organizer-info-section,
.registration-info-section,
.registration-time-section,
.registration-limit-section {
margin-bottom: 20px; margin-bottom: 20px;
} }
.detail-label { /* 自定义宽度的报名信息表格 */
display: inline-block; .custom-width-registration :deep(.el-descriptions__table) {
width: 120px; table-layout: fixed !important;
color: #606266; width: 100% !important;
font-weight: 500; }
font-size: 14px;
margin-bottom: 8px; .custom-width-registration :deep(.el-descriptions__cell) {
text-align: right;
padding-right: 12px;
vertical-align: top; vertical-align: top;
} }
.detail-value { /* 强制设置标签和内容的宽度 */
display: inline-block; .custom-width-registration :deep(.el-descriptions__label) {
vertical-align: top; width: 20% !important;
width: calc(100% - 120px); min-width: 20% !important;
color: #303133;
font-size: 14px;
line-height: 1.5;
} }
.custom-width-registration :deep(.el-descriptions__content) {
width: 30% !important;
min-width: 30% !important;
}
/* 自定义宽度的主办方信息表格 */
.custom-width-organizer :deep(.el-descriptions__table) {
table-layout: fixed !important;
width: 100% !important;
}
.custom-width-organizer :deep(.el-descriptions__cell) {
vertical-align: top;
}
/* 强制设置主办方信息标签和内容的宽度 */
.custom-width-organizer :deep(.el-descriptions__label) {
box-sizing: border-box !important;
word-wrap: break-word !important;
}
.custom-width-organizer :deep(.el-descriptions__content) {
box-sizing: border-box !important;
word-wrap: break-word !important;
}
/* 主办方信息区域 - 具体宽度控制 */
.custom-width-organizer :deep(.el-descriptions__table tr td:nth-child(1)) {
width: 13% !important;
}
.custom-width-organizer :deep(.el-descriptions__table tr td:nth-child(2)) {
width: 35% !important;
}
.custom-width-organizer :deep(.el-descriptions__table tr td:nth-child(3)) {
width: 10% !important;
}
.custom-width-organizer :deep(.el-descriptions__table tr td:nth-child(4)) {
width: 15% !important;
}
.custom-width-organizer :deep(.el-descriptions__table tr td:nth-child(5)) {
width: 10% !important;
}
.custom-width-organizer :deep(.el-descriptions__table tr td:nth-child(6)) {
width: 17% !important;
}
/* 承办方信息区域 - 具体宽度控制 */
.custom-width-co-organizer :deep(.el-descriptions__table tr td:nth-child(1)) {
width: 12% !important;
}
.custom-width-co-organizer :deep(.el-descriptions__table tr td:nth-child(2)) {
width: 36% !important;
}
.custom-width-co-organizer :deep(.el-descriptions__table tr td:nth-child(3)) {
width: 10% !important;
}
.custom-width-co-organizer :deep(.el-descriptions__table tr td:nth-child(4)) {
width: 16% !important;
}
.custom-width-co-organizer :deep(.el-descriptions__table tr td:nth-child(5)) {
width: 10% !important;
}
.custom-width-co-organizer :deep(.el-descriptions__table tr td:nth-child(6)) {
width: 16% !important;
}
/* 自定义宽度的指导老师信息表格 */
.custom-width-instructor :deep(.el-descriptions__table) {
table-layout: fixed !important;
width: 100% !important;
}
.custom-width-instructor :deep(.el-descriptions__cell) {
vertical-align: top;
}
/* 强制设置指导老师信息标签和内容的宽度 */
.custom-width-instructor :deep(.el-descriptions__label) {
box-sizing: border-box !important;
word-wrap: break-word !important;
}
.custom-width-instructor :deep(.el-descriptions__content) {
box-sizing: border-box !important;
word-wrap: break-word !important;
}
/* 指导老师信息区域 - 具体宽度控制 (8+15+8+17+8+15+8+17) */
.custom-width-instructor :deep(.el-descriptions__table tr td:nth-child(1)) {
width: 8% !important;
}
.custom-width-instructor :deep(.el-descriptions__table tr td:nth-child(2)) {
width: 15% !important;
}
.custom-width-instructor :deep(.el-descriptions__table tr td:nth-child(3)) {
width: 8% !important;
}
.custom-width-instructor :deep(.el-descriptions__table tr td:nth-child(4)) {
width: 17% !important;
}
.custom-width-instructor :deep(.el-descriptions__table tr td:nth-child(5)) {
width: 8% !important;
}
.custom-width-instructor :deep(.el-descriptions__table tr td:nth-child(6)) {
width: 15% !important;
}
.custom-width-instructor :deep(.el-descriptions__table tr td:nth-child(7)) {
width: 8% !important;
}
.custom-width-instructor :deep(.el-descriptions__table tr td:nth-child(8)) {
width: 17% !important;
}
/* 海报显示区域样式 */
.view-poster { .view-poster {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: flex-start; justify-content: center;
padding: 20px 0; padding: 20px 0;
} }
@@ -548,6 +490,7 @@ onMounted(() => {
border: 1px dashed #dcdfe6; border: 1px dashed #dcdfe6;
border-radius: 4px; border-radius: 4px;
background-color: #fafafa; background-color: #fafafa;
margin: 20px auto;
} }
.no-poster-text { .no-poster-text {
@@ -556,6 +499,7 @@ onMounted(() => {
text-align: center; text-align: center;
} }
/* 描述文本区域样式 */
.view-description { .view-description {
padding: 12px; padding: 12px;
border: 1px solid #e4e7ed; border: 1px solid #e4e7ed;
@@ -567,26 +511,12 @@ onMounted(() => {
white-space: pre-wrap; white-space: pre-wrap;
word-break: break-word; word-break: break-word;
background-color: #fafafa; background-color: #fafafa;
margin-bottom: 20px;
} }
/* 章节分隔样式 */ /* 承办方和指导老师项目样式 */
.section-divider { .co-organizer-item,
margin: 24px 0 16px 0; .instructor-item {
padding-top: 16px;
border-top: 1px solid #e4e7ed;
}
.section-title {
margin: 0 0 16px 0;
color: #303133;
font-size: 16px;
font-weight: 600;
border-bottom: 2px solid #409eff;
padding-bottom: 8px;
}
/* 承办方项目样式 */
.co-organizer-item {
margin-bottom: 16px; margin-bottom: 16px;
padding: 16px; padding: 16px;
background: #f8f9fa; background: #f8f9fa;
@@ -594,24 +524,14 @@ onMounted(() => {
border: 1px solid #e9ecef; border: 1px solid #e9ecef;
} }
.co-organizer-item:last-child { .co-organizer-item:last-child,
margin-bottom: 0;
}
/* 指导老师项目样式 */
.instructor-item {
margin-bottom: 16px;
padding: 16px;
background: #fafafa;
border-radius: 6px;
border: 1px solid #ebeef5;
}
.instructor-item:last-child { .instructor-item:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
.no-data { /* 无数据提示样式 */
.no-data,
.no-limit-data {
color: #909399; color: #909399;
font-size: 13px; font-size: 13px;
font-style: italic; font-style: italic;
@@ -620,10 +540,9 @@ onMounted(() => {
background: #f8f9fa; background: #f8f9fa;
border-radius: 4px; border-radius: 4px;
border: 1px solid #e9ecef; border: 1px solid #e9ecef;
margin-bottom: 20px;
} }
/* 附件显示区域样式 */ /* 附件显示区域样式 */
.attachment-list { .attachment-list {
display: flex; display: flex;
@@ -647,4 +566,78 @@ onMounted(() => {
.attachment-icon { .attachment-icon {
font-size: 14px; font-size: 14px;
} }
/* el-divider样式优化 */
:deep(.el-divider--horizontal) {
margin: 24px 0 16px 0;
}
:deep(.el-divider__text) {
background-color: #fff;
color: #303133;
font-size: 16px;
font-weight: 600;
padding: 0 20px;
}
/* el-descriptions样式优化 */
:deep(.el-descriptions) {
.el-descriptions__header {
margin-bottom: 20px;
}
.el-descriptions__title {
font-size: 16px;
font-weight: 600;
color: #303133;
}
.el-descriptions__body {
.el-descriptions__table {
.el-descriptions__cell {
padding: 12px 16px;
}
.el-descriptions__label {
font-weight: 500;
color: #606266;
background-color: #fafafa;
}
.el-descriptions__content {
color: #303133;
}
}
}
}
/* 标签样式优化 */
:deep(.el-tag) {
border-radius: 4px;
font-size: 12px;
height: 24px;
line-height: 22px;
}
/* 响应式布局优化 */
@media (max-width: 768px) {
.activity-detail-view {
padding: 12px;
}
:deep(.el-descriptions) {
.el-descriptions__body {
.el-descriptions__table {
.el-descriptions__cell {
padding: 8px 12px;
}
}
}
}
.co-organizer-item,
.instructor-item {
padding: 12px;
}
}
</style> </style>
@@ -479,10 +479,11 @@ const getList = async () => {
console.log('JoinedMembersTab: getList 开始查询,参数:', queryData); console.log('JoinedMembersTab: getList 开始查询,参数:', queryData);
// 如果状态字段为空或未选择,则查询已加入(status=2)和已退出(status=3)的成员 // 已加入页面:查询已加入(status=2)和已退出(status=4)的成员
// 字典配置:0-待审核,1-审核中,2-已加入,3-已驳回,4-已退出
if (!queryData.status) { if (!queryData.status) {
// 使用params传递多状态查询 // 使用params传递多状态查询
queryData.params = { ...queryData.params, statusList: ['2', '3'] } as any; queryData.params = { ...queryData.params, statusList: ['2', '4'] } as any;
delete queryData.status; // 删除单个status字段 delete queryData.status; // 删除单个status字段
} }
@@ -283,10 +283,11 @@ const getList = async () => {
console.log('PendingMembersTab: getList 开始查询,参数:', queryData); console.log('PendingMembersTab: getList 开始查询,参数:', queryData);
// 如果状态字段为空或未选择,则查询待审核(status=0)和已驳回(status=4)的成员 // 待审核页面:查询待审核(status=0)和已驳回(status=3)的成员
// 字典配置:0-待审核,1-审核中,2-已加入,3-已驳回,4-已退出
if (!queryData.status) { if (!queryData.status) {
// 使用params传递多状态查询 // 使用params传递多状态查询
queryData.params = { ...queryData.params, statusList: ['0', '4'] } as any; queryData.params = { ...queryData.params, statusList: ['0', '3'] } as any;
delete queryData.status; // 删除单个status字段 delete queryData.status; // 删除单个status字段
} }
+4 -4
View File
@@ -63,7 +63,7 @@
</el-table-column> </el-table-column>
<el-table-column label="我的角色" align="center" prop="myRole" width="100"> <el-table-column label="我的角色" align="center" prop="myRole" width="100">
<template #default="scope"> <template #default="scope">
<dict-tag :options="stgl_member_role" :value="scope.row.myRole" /> <span class="role-text">{{ scope.row.myRole || '暂无' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="社长姓名" align="center" prop="presidentName" width="100" show-overflow-tooltip /> <el-table-column label="社长姓名" align="center" prop="presidentName" width="100" show-overflow-tooltip />
@@ -124,7 +124,7 @@
<dict-tag :options="sys_normal_disable" :value="detailForm.status" /> <dict-tag :options="sys_normal_disable" :value="detailForm.status" />
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="我的角色"> <el-descriptions-item label="我的角色">
<dict-tag :options="stgl_member_role" :value="detailForm.myRole" /> <span class="role-text">{{ detailForm.myRole || '暂无' }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="加入时间">{{ parseTime(detailForm.joinTime, '{y}-{m}-{d} {h}:{i}') }}</el-descriptions-item> <el-descriptions-item label="加入时间">{{ parseTime(detailForm.joinTime, '{y}-{m}-{d} {h}:{i}') }}</el-descriptions-item>
<el-descriptions-item label="成员状态"> <el-descriptions-item label="成员状态">
@@ -166,8 +166,8 @@ import type { MyClubVO, MyClubQuery } from '@/api/stgl/my/types';
import { UserFilled } from '@element-plus/icons-vue'; import { UserFilled } from '@element-plus/icons-vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { stgl_club_type, sys_normal_disable, stgl_member_role, stgl_member_status } = toRefs<any>( const { stgl_club_type, sys_normal_disable, stgl_member_status } = toRefs<any>(
proxy?.useDict('stgl_club_type', 'sys_normal_disable', 'stgl_member_role', 'stgl_member_status') proxy?.useDict('stgl_club_type', 'sys_normal_disable', 'stgl_member_status')
); );
const queryRef = ref(); const queryRef = ref();
+26 -34
View File
@@ -16,15 +16,17 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="审核状态" prop="approvalStatus"> <el-form-item label="名称" prop="name">
<el-select v-model="queryParams.approvalStatus" placeholder="请选择审核状态" clearable style="width: 100%"> <el-input
<el-option label="全部" value="" /> v-model="queryParams.name"
<el-option label="待审核" value="待审核" /> placeholder="请输入名称"
<el-option label="已通过" value="已通过" /> clearable
<el-option label="已拒绝" value="已拒绝" /> style="width: 100%"
</el-select> @keyup.enter="handleQuery"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
@@ -69,13 +71,7 @@
<span>{{ parseTime(scope.row.registrationTime, '{y}-{m}-{d} {h}:{i}') }}</span> <span>{{ parseTime(scope.row.registrationTime, '{y}-{m}-{d} {h}:{i}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="审核状态" align="center" prop="approvalStatus" width="100">
<template #default="scope">
<el-tag :type="getApprovalStatusTag(scope.row.approvalStatus)" size="small">
{{ scope.row.approvalStatus }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="当前状态" align="center" prop="currentStatus" width="100"> <el-table-column label="当前状态" align="center" prop="currentStatus" width="100">
<template #default="scope"> <template #default="scope">
<el-tag :type="getCurrentStatusTag(scope.row.currentStatus)" size="small"> <el-tag :type="getCurrentStatusTag(scope.row.currentStatus)" size="small">
@@ -83,7 +79,7 @@
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="时间信息" align="center" width="180"> <el-table-column label="创办时间" align="center" width="180">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.timeInfo"> <span v-if="scope.row.timeInfo">
{{ parseTime(scope.row.timeInfo, '{y}-{m}-{d} {h}:{i}') }} {{ parseTime(scope.row.timeInfo, '{y}-{m}-{d} {h}:{i}') }}
@@ -129,11 +125,7 @@
<el-descriptions-item label="我的角色">{{ detailForm.role || '暂无' }}</el-descriptions-item> <el-descriptions-item label="我的角色">{{ detailForm.role || '暂无' }}</el-descriptions-item>
<el-descriptions-item label="组织者">{{ detailForm.organizer || '暂无' }}</el-descriptions-item> <el-descriptions-item label="组织者">{{ detailForm.organizer || '暂无' }}</el-descriptions-item>
<el-descriptions-item label="报名时间">{{ parseTime(detailForm.registrationTime, '{y}-{m}-{d} {h}:{i}') }}</el-descriptions-item> <el-descriptions-item label="报名时间">{{ parseTime(detailForm.registrationTime, '{y}-{m}-{d} {h}:{i}') }}</el-descriptions-item>
<el-descriptions-item label="审核状态">
<el-tag :type="getApprovalStatusTag(detailForm.approvalStatus)" size="small">
{{ detailForm.approvalStatus }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="当前状态"> <el-descriptions-item label="当前状态">
<el-tag :type="getCurrentStatusTag(detailForm.currentStatus)" size="small"> <el-tag :type="getCurrentStatusTag(detailForm.currentStatus)" size="small">
{{ detailForm.currentStatus }} {{ detailForm.currentStatus }}
@@ -143,7 +135,7 @@
{{ parseTime(detailForm.approvalTime, '{y}-{m}-{d} {h}:{i}') }} {{ parseTime(detailForm.approvalTime, '{y}-{m}-{d} {h}:{i}') }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="审核人" v-if="detailForm.approvalBy">{{ detailForm.approvalBy }}</el-descriptions-item> <el-descriptions-item label="审核人" v-if="detailForm.approvalBy">{{ detailForm.approvalBy }}</el-descriptions-item>
<el-descriptions-item label="时间信息" v-if="detailForm.timeInfo"> <el-descriptions-item label="创办时间" v-if="detailForm.timeInfo">
{{ parseTime(detailForm.timeInfo, '{y}-{m}-{d} {h}:{i}') }} {{ parseTime(detailForm.timeInfo, '{y}-{m}-{d} {h}:{i}') }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="地点" v-if="detailForm.location">{{ detailForm.location }}</el-descriptions-item> <el-descriptions-item label="地点" v-if="detailForm.location">{{ detailForm.location }}</el-descriptions-item>
@@ -178,8 +170,8 @@ const queryFormRef = ref<ElFormInstance>();
const queryParams = ref<MyRegistrationQuery>({ const queryParams = ref<MyRegistrationQuery>({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
registrationType: '', name: '',
approvalStatus: '' registrationType: ''
}); });
/** 查询我的报名记录列表 */ /** 查询我的报名记录列表 */
@@ -236,22 +228,22 @@ const getRegistrationTypeTag = (type: string) => {
return tagMap[type as keyof typeof tagMap] || ('info' as const); return tagMap[type as keyof typeof tagMap] || ('info' as const);
}; };
/** 获取审核状态标签样式 */
const getApprovalStatusTag = (status: string) => {
const tagMap = {
'已通过': 'success' as const,
'已拒绝': 'danger' as const,
'待审核': 'warning' as const
};
return tagMap[status as keyof typeof tagMap] || ('info' as const);
};
/** 获取当前状态标签样式 */ /** 获取当前状态标签样式 */
const getCurrentStatusTag = (status: string) => { const getCurrentStatusTag = (status: string) => {
const tagMap = { const tagMap = {
// 成员状态
'待审核': 'warning' as const,
'审核中': 'info' as const,
'已加入': 'success' as const,
'已驳回': 'danger' as const,
'已退出': 'danger' as const,
// 活动审核状态
'已通过': 'success' as const,
// 兼容旧状态
'正常': 'success' as const, '正常': 'success' as const,
'已报名': 'primary' as const, '已报名': 'primary' as const
'待审核': 'warning' as const
}; };
return tagMap[status as keyof typeof tagMap] || ('info' as const); return tagMap[status as keyof typeof tagMap] || ('info' as const);
}; };
+3 -3
View File
@@ -107,7 +107,7 @@
<dict-tag :options="stgl_volunteer_role" :value="detailForm.myRole" /> <dict-tag :options="stgl_volunteer_role" :value="detailForm.myRole" />
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="成员状态"> <el-descriptions-item label="成员状态">
<dict-tag :options="stgl_volunteer_status" :value="detailForm.memberStatus" /> <dict-tag :options="stgl_member_status" :value="detailForm.memberStatus" />
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="加入时间">{{ parseTime(detailForm.joinTime, '{y}-{m}-{d} {h}:{i}') }}</el-descriptions-item> <el-descriptions-item label="加入时间">{{ parseTime(detailForm.joinTime, '{y}-{m}-{d} {h}:{i}') }}</el-descriptions-item>
<el-descriptions-item label="联系电话">{{ detailForm.contactPhone || '暂无' }}</el-descriptions-item> <el-descriptions-item label="联系电话">{{ detailForm.contactPhone || '暂无' }}</el-descriptions-item>
@@ -143,8 +143,8 @@ import type { MyVolunteerTeamVO, MyVolunteerQuery } from '@/api/stgl/my/types';
import { User } from '@element-plus/icons-vue'; import { User } from '@element-plus/icons-vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_normal_disable, stgl_volunteer_role, stgl_volunteer_status } = toRefs<any>( const { sys_normal_disable, stgl_volunteer_role, stgl_member_status } = toRefs<any>(
proxy?.useDict('sys_normal_disable', 'stgl_volunteer_role', 'stgl_volunteer_status') proxy?.useDict('sys_normal_disable', 'stgl_volunteer_role', 'stgl_member_status')
); );
const teamList = ref<MyVolunteerTeamVO[]>([]); const teamList = ref<MyVolunteerTeamVO[]>([]);
@@ -48,6 +48,7 @@
</span> </span>
</template> </template>
</el-tab-pane> </el-tab-pane>
<!--
<el-tab-pane label="我的申请" name="my"> <el-tab-pane label="我的申请" name="my">
<template #label> <template #label>
<span class="tab-label"> <span class="tab-label">
@@ -56,6 +57,7 @@
</span> </span>
</template> </template>
</el-tab-pane> </el-tab-pane>
-->
</el-tabs> </el-tabs>
<!-- 工具栏 --> <!-- 工具栏 -->
@@ -520,6 +522,8 @@ function resetQuery() {
function handleTabChange(tabName: string) { function handleTabChange(tabName: string) {
activeTab.value = tabName; activeTab.value = tabName;
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
// 注释掉"我的申请"页签相关逻辑
/*
if (tabName === 'my') { if (tabName === 'my') {
// 切换到"我的申请"页签时,直接打开申请列表对话框 // 切换到"我的申请"页签时,直接打开申请列表对话框
handleMyApplications(); handleMyApplications();
@@ -531,6 +535,9 @@ function handleTabChange(tabName: string) {
// 切换到"志愿者大厅"页签时,刷新队伍列表 // 切换到"志愿者大厅"页签时,刷新队伍列表
getList(); getList();
} }
*/
// 简化逻辑,只刷新队伍列表
getList();
} }
/** 查看详情 */ /** 查看详情 */