stgl3.1
This commit is contained in:
1 parent
64886ba214
commit
f030749dd5
13 files changed
+408
-380
No files matched your search
+3
-2
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+6
-2
@@ -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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询我的报名记录总数
|
* 查询我的报名记录总数
|
||||||
|
|||||||
+2
-1
@@ -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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 对活动进行评分
|
* 对活动进行评分
|
||||||
|
|||||||
+2
-2
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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字段
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 查看详情 */
|
/** 查看详情 */
|
||||||
|
|||||||
Reference in new issue
Block a user