You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

742 lines
24 KiB

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=375, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="../colors_and_type.css">
<title>青核 Youthome - 活动参与者</title>
<style>
:root {
--youth-primary: #26C2BB;
--youth-primary-light: #54CAC5;
--primary-bg: #E6F7F6;
--bg-page: #F7F8FA;
--bg-card: #FFFFFF;
--text-title: #1F1F1F;
--text-body: #595959;
--text-muted: #8C8C8C;
--youth-border-light: #E8E8E8;
--youth-warning: #FAAD14;
/* =====================================================
* Traework 设计系统 - 组件规范
* 圆角 / 间距 / 阴影 / 高度
* ===================================================== */
--radius-xs: 4px;
--radius-sm: 8px; /* 按钮、输入框 */
--radius-md: 12px; /* 卡片 */
--radius-lg: 16px; /* 标签、弹窗 */
--radius-xl: 20px;
--radius-full: 9999px;
/* 组件高度 */
--height-btn: 44px;
--height-input: 44px;
--height-nav-bottom: 64px;
/* 间距(4px 基础栅格) */
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px;
--space-5: 20px;
--space-6: 24px;
--space-page-x: 16px;
--space-card: 16px;
/* 柔和弥散阴影 */
--shadow-card: 0 2px 12px rgba(0, 0, 0, 0.04);
--shadow-card-hover: 0 6px 20px rgba(0, 0, 0, 0.06);
--shadow-btn: 0 2px 8px rgba(38, 194, 187, 0.25);
--shadow-btn-hover: 0 4px 16px rgba(38, 194, 187, 0.35);
--shadow-modal: 0 16px 48px rgba(0, 0, 0, 0.12);
--shadow-float: 0 4px 24px rgba(0, 0, 0, 0.08);
/* 内阴影浮雕(输入框) */
--shadow-inset: inset 0 1px 3px rgba(0, 0, 0, 0.04);
--shadow-inset-focus: inset 0 1px 3px rgba(38, 194, 187, 0.08);
/* 毛玻璃 */
--glass-bg: rgba(255, 255, 255, 0.72);
--glass-blur: blur(20px);
--glass-border: rgba(255, 255, 255, 0.3);
}
* { margin: 0; padding: 0; box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'SF Pro Display', sans-serif;
background: var(--youth-bg-page);
color: var(--youth-text-secondary);
overflow-x: hidden;}
.page-container {
width: 375px;
height: 812px;
margin: 0 auto;
background: var(--youth-bg-page);
position: relative;
display: flex;
flex-direction: column;
overflow: hidden;
}
.status-bar {
height: 44px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 16px;
font-size: 15px;
font-weight: 600;
color: var(--youth-text-primary);
flex-shrink: 0;
}
.top-nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 8px;
height: 44px;
flex-shrink: 0;
}
.nav-btn {
width: 36px;
height: 36px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
color: var(--youth-text-primary);
cursor: pointer;
border: none;
background: transparent;
}
.nav-title { font-size: 17px; font-weight: 700; color: var(--youth-text-primary); }
.nav-btn.text-btn { width: auto; font-size: 13px; padding: 0 8px; font-weight: 500; color: var(--youth-primary); }
/* 活动信息头部 */
.activity-banner {
margin: 8px 16px 12px;
background: var(--youth-bg-card);
border-radius: 14px;
padding: 14px;
display: flex;
gap: 12px;
align-items: center;
flex-shrink: 0;
}
.banner-cover {
width: 60px;
height: 60px;
border-radius: 12px;
background: linear-gradient(135deg, #FF9A8B, #FF6A88);
display: flex;
align-items: center;
justify-content: center;
font-size: 28px;
flex-shrink: 0;
}
.banner-info { flex: 1; min-width: 0; }
.banner-title {
font-size: 15px;
font-weight: 700;
color: var(--youth-text-primary);
margin-bottom: 4px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.banner-meta {
font-size: 11px;
color: var(--youth-text-tertiary);
margin-bottom: 2px;
}
.banner-count {
font-size: 12px;
color: var(--youth-primary);
font-weight: 600;
}
/* 报名人数统计 */
.stats-row {
display: flex;
background: var(--youth-bg-card);
margin: 0 16px 12px;
border-radius: 12px;
padding: 14px 0;
flex-shrink: 0;
}
.stat-item {
flex: 1;
text-align: center;
position: relative;
}
.stat-item + .stat-item::before {
content: '';
position: absolute;
left: 0;
top: 20%;
height: 60%;
width: 1px;
background: var(--youth-border-light);
}
.stat-value {
font-size: 20px;
font-weight: 800;
color: var(--youth-text-primary);
}
.stat-value.primary { color: var(--youth-primary); }
.stat-label {
font-size: 11px;
color: var(--youth-text-tertiary);
margin-top: 2px;
}
/* Tab栏 */
.tab-bar {
display: flex;
padding: 0 16px;
gap: 20px;
margin-bottom: 4px;
flex-shrink: 0;
}
.tab-item {
padding: 10px 0;
font-size: 14px;
font-weight: 500;
color: var(--youth-text-tertiary);
cursor: pointer;
position: relative;
}
.tab-item.active {
color: var(--youth-text-primary);
font-weight: 700;
}
.tab-item.active::after {
content: '';
position: absolute;
bottom: -1px;
left: 50%;
transform: translateX(-50%);
width: 20px;
height: 3px;
background: var(--youth-primary);
border-radius: 16px;
}
.tab-item .count {
margin-left: 4px;
font-size: 12px;
font-weight: 500;
color: var(--youth-text-tertiary);
}
/* 滚动区域 */
.scroll-area {
flex: 1;
overflow-y: auto;
padding-bottom: 20px;
}
.scroll-area::-webkit-scrollbar { display: none; }
/* 参与者列表 */
.participant-list {
background: var(--youth-bg-card);
margin: 0 16px;
border-radius: 14px;
overflow: hidden;
}
.participant-item {
display: flex;
align-items: center;
gap: 12px;
padding: 12px 16px;
position: relative;
cursor: pointer;
}
.participant-item:active { background: var(--youth-bg-page); }
.participant-item + .participant-item::before {
content: '';
position: absolute;
top: 0;
left: 64px;
right: 16px;
height: 1px;
background: var(--youth-border-light);
}
.rank-badge {
width: 22px;
height: 22px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
font-weight: 700;
flex-shrink: 0;
}
.rank-badge.r1 { background: linear-gradient(135deg, #FFD700, #FFA500); color: #fff; }
.rank-badge.r2 { background: linear-gradient(135deg, #C0C0C0, #A8A8A8); color: #fff; }
.rank-badge.r3 { background: linear-gradient(135deg, #CD7F32, #B8860B); color: #fff; }
.rank-badge.normal { background: var(--youth-bg-page); color: var(--youth-text-tertiary); font-weight: 500; }
.participant-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
flex-shrink: 0;
position: relative;
}
.participant-avatar.c1 { background: linear-gradient(135deg, #26C2BB, #54CAC5); }
.participant-avatar.c2 { background: linear-gradient(135deg, #FF9A8B, #FF6A88); }
.participant-avatar.c3 { background: linear-gradient(135deg, #A8B5FF, #6366F1); }
.participant-avatar.c4 { background: linear-gradient(135deg, #FFD666, #FAAD14); }
.participant-avatar.c5 { background: linear-gradient(135deg, #34D399, #10B981); }
.participant-avatar.c6 { background: linear-gradient(135deg, #F472B6, #EC4899); }
.participant-avatar.c7 { background: linear-gradient(135deg, #8B5CF6, #6366F1); }
.participant-avatar.c8 { background: linear-gradient(135deg, #60A5FA, #3B82F6); }
.organizer-tag {
position: absolute;
bottom: -2px;
right: -2px;
padding: 1px 4px;
background: var(--youth-primary);
color: #fff;
font-size: 8px;
font-weight: 700;
border-radius: 6px;
border: 2px solid var(--youth-bg-card);
white-space: nowrap;
}
.participant-info { flex: 1; min-width: 0; }
.participant-name {
font-size: 14px;
font-weight: 600;
color: var(--youth-text-primary);
display: flex;
align-items: center;
gap: 6px;
margin-bottom: 3px;
}
.vip-badge {
padding: 1px 5px;
background: linear-gradient(135deg, #F5A623, #FFD700);
color: #1A1A2E;
font-size: 9px;
font-weight: 700;
border-radius: 6px;
}
.participant-desc {
font-size: 11px;
color: var(--youth-text-tertiary);
}
.participant-right {
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 4px;
flex-shrink: 0;
}
.sign-time {
font-size: 11px;
color: var(--youth-text-tertiary);
}
.follow-btn {
padding: 4px 12px;
background: var(--youth-primary);
color: #fff;
border: none;
border-radius: 12px;
font-size: 11px;
font-weight: 600;
cursor: pointer;
font-family: inherit;
}
.follow-btn.followed {
background: var(--youth-bg-page);
color: var(--youth-text-tertiary);
border: 1px solid var(--youth-border-light);
}
/* 分组标题 */
.group-title {
padding: 14px 20px 8px;
font-size: 12px;
color: var(--youth-text-tertiary);
font-weight: 500;
}
/* 邀请好友卡片 */
.invite-card {
margin: 12px 16px 0;
background: linear-gradient(135deg, #26C2BB 0%, #54CAC5 100%);
border-radius: 14px;
padding: 16px;
color: #fff;
display: flex;
align-items: center;
justify-content: space-between;
cursor: pointer;
position: relative;
overflow: hidden;
}
.invite-card::before {
content: '';
position: absolute;
top: -30px;
right: -20px;
width: 100px;
height: 100px;
border-radius: 50%;
background: rgba(255,255,255,0.1);
}
.invite-text { position: relative; z-index: 1; }
.invite-title {
font-size: 15px;
font-weight: 700;
margin-bottom: 4px;
}
.invite-desc {
font-size: 11px;
opacity: 0.85;
}
.invite-btn {
padding: 8px 16px;
background: #fff;
color: var(--youth-primary);
border: none;
border-radius: 16px;
font-size: 13px;
font-weight: 700;
cursor: pointer;
font-family: inherit;
position: relative;
z-index: 1;
}
/* SVG 图标统一尺寸 */
.icon-svg {
display: inline-flex;
align-items: center;
justify-content: center;
width: 1em;
height: 1em;
vertical-align: middle;
line-height: 1;
}
.icon-svg svg {
width: 100%;
height: 100%;
stroke: currentColor;
}
/* 侧栏图标 */
.sidebar-icon .icon-svg { width: 22px; height: 22px; font-size: 22px; }
/* 社团logo图标 */
.club-logo .icon-svg { width: 28px; height: 28px; font-size: 28px; color: #fff; }
/* 头图大图标 */
.hero-icon .icon-svg { width: 56px; height: 56px; font-size: 56px; opacity: 0.3; }
/* meta 小图标 */
.club-meta .icon-svg { width: 12px; height: 12px; font-size: 12px; }
/* 分类选择网格图标 */
.cat-option .icon-svg { width: 26px; height: 26px; font-size: 26px; }
/* logo预览图标 */
.logo-preview .icon-svg { width: 40px; height: 40px; font-size: 40px; color: #fff; }
/* 提示图标 */
.notice-icon .icon-svg { width: 18px; height: 18px; font-size: 18px; }
</style>
</head>
<body>
<div class="page-container" data-dom-id="page-container">
<div class="status-bar">
<span>9:41</span>
<div style="display:flex;align-items:center;gap:6px;">
<svg width="17" height="11" viewBox="0 0 17 11" fill="currentColor"><rect x="0" y="7" width="3" height="4" rx="0.5"></rect><rect x="4.5" y="5" width="3" height="6" rx="0.5"></rect><rect x="9" y="2.5" width="3" height="8.5" rx="0.5"></rect><rect x="13.5" y="0" width="3" height="11" rx="0.5"></rect></svg>
<svg width="25" height="12" viewBox="0 0 25 12"><rect x="0.5" y="0.5" width="21" height="11" rx="2.5" stroke="currentColor" opacity="0.5"></rect><rect x="2" y="2" width="18" height="8" rx="1.5" fill="currentColor"></rect><rect x="22.5" y="4" width="1.5" height="4" rx="0.5" fill="currentColor" opacity="0.5"></rect></svg>
</div>
</div>
<div class="top-nav">
<button class="nav-btn" onclick="goBack()">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"></polyline></svg>
</button>
<div class="nav-title">活动参与者</div>
<button class="nav-btn text-btn" onclick="searchUser()">搜索</button>
</div>
<!-- 活动信息 -->
<div class="activity-banner" onclick="goActivity()">
<div class="banner-cover"><span class="icon-svg icon-dice-5"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect><path d="M16 8h.01"></path><path d="M8 8h.01"></path><path d="M8 16h.01"></path><path d="M16 16h.01"></path><path d="M12 12h.01"></path></svg></span></div>
<div class="banner-info">
<div class="banner-title">周末桌游局 · 新人友好场</div>
<div class="banner-meta">8月24日 周六 14:00</div>
<div class="banner-count">已报名 56 人 · 限 60 人</div>
</div>
</div>
<!-- 统计 -->
<div class="stats-row">
<div class="stat-item">
<div class="stat-value primary">56</div>
<div class="stat-label">已报名</div>
</div>
<div class="stat-item">
<div class="stat-value">4</div>
<div class="stat-label">组织者</div>
</div>
<div class="stat-item">
<div class="stat-value">28</div>
<div class="stat-label">男生</div>
</div>
<div class="stat-item">
<div class="stat-value">28</div>
<div class="stat-label">女生</div>
</div>
</div>
<!-- Tab -->
<div class="tab-bar">
<div class="tab-item active" onclick="switchTab(this, 'all')">全部<span class="count">56</span></div>
<div class="tab-item" onclick="switchTab(this, 'organizer')">组织者<span class="count">4</span></div>
<div class="tab-item" onclick="switchTab(this, 'friend')">好友<span class="count">6</span></div>
</div>
<div class="scroll-area">
<!-- 组织者 -->
<div class="group-title">组织者</div>
<div class="participant-list">
<div class="participant-item" onclick="viewUser()">
<div class="participant-avatar c1">
<span class="icon-svg icon-user"></span>‍<span class="icon-svg icon-briefcase"></span>
<span class="organizer-tag">发起人</span>
</div>
<div class="participant-info">
<div class="participant-name">
阿杰学长
<span class="vip-badge">VIP5</span>
</div>
<div class="participant-desc">计算机学院 · 大三 · 北大桌游社社长</div>
</div>
<div class="participant-right">
<span class="sign-time">发起人</span>
<button class="follow-btn followed">已关注</button>
</div>
</div>
<div class="participant-item" onclick="viewUser()">
<div class="participant-avatar c2">
<span class="icon-svg icon-user"></span>‍<span class="icon-svg icon-graduation-cap"></span>
<span class="organizer-tag">组织者</span>
</div>
<div class="participant-info">
<div class="participant-name">小雨同学</div>
<div class="participant-desc">文学院 · 大二</div>
</div>
<div class="participant-right">
<span class="sign-time">组织者</span>
<button class="follow-btn">+ 关注</button>
</div>
</div>
<div class="participant-item" onclick="viewUser()">
<div class="participant-avatar c3">
<span class="icon-svg icon-user"></span>‍<span class="icon-svg icon-mic"></span>
<span class="organizer-tag">组织者</span>
</div>
<div class="participant-info">
<div class="participant-name">老王</div>
<div class="participant-desc">物理系 · 研一</div>
</div>
<div class="participant-right">
<span class="sign-time">组织者</span>
<button class="follow-btn followed">已关注</button>
</div>
</div>
</div>
<!-- 已报名 -->
<div class="group-title">已报名(按报名时间排序)</div>
<div class="participant-list">
<div class="participant-item" onclick="viewUser()">
<div class="participant-avatar c4"><span class="icon-svg icon-palette"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="13.5" cy="6.5" r=".5"></circle><circle cx="17.5" cy="10.5" r=".5"></circle><circle cx="8.5" cy="7.5" r=".5"></circle><circle cx="6.5" cy="12.5" r=".5"></circle><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z"></path></svg></span></div>
<div class="participant-info">
<div class="participant-name">
小夏
<span class="vip-badge">VIP3</span>
</div>
<div class="participant-desc">设计学院 · 大二 · 你的好友</div>
</div>
<div class="participant-right">
<span class="sign-time">3天前报名</span>
<button class="follow-btn followed">已关注</button>
</div>
</div>
<div class="participant-item" onclick="viewUser()">
<div class="participant-avatar c5"><span class="icon-svg icon-gamepad-2"></span></div>
<div class="participant-info">
<div class="participant-name">游戏达人小林</div>
<div class="participant-desc">软件工程 · 大三</div>
</div>
<div class="participant-right">
<span class="sign-time">3天前报名</span>
<button class="follow-btn">+ 关注</button>
</div>
</div>
<div class="participant-item" onclick="viewUser()">
<div class="participant-avatar c6"><span class="icon-svg icon-book-open"></span></div>
<div class="participant-info">
<div class="participant-name">
学霸阿楠
<span class="vip-badge">VIP4</span>
</div>
<div class="participant-desc">医学院 · 大四</div>
</div>
<div class="participant-right">
<span class="sign-time">2天前报名</span>
<button class="follow-btn">+ 关注</button>
</div>
</div>
<div class="participant-item" onclick="viewUser()">
<div class="participant-avatar c7"><span class="icon-svg icon-music"></span></div>
<div class="participant-info">
<div class="participant-name">音乐少女</div>
<div class="participant-desc">艺术学院 · 大一 · 你的好友</div>
</div>
<div class="participant-right">
<span class="sign-time">2天前报名</span>
<button class="follow-btn followed">已关注</button>
</div>
</div>
<div class="participant-item" onclick="viewUser()">
<div class="participant-avatar c8"><span class="icon-svg icon-trophy"></span></div>
<div class="participant-info">
<div class="participant-name">篮球少年</div>
<div class="participant-desc">体育学院 · 大二</div>
</div>
<div class="participant-right">
<span class="sign-time">1天前报名</span>
<button class="follow-btn">+ 关注</button>
</div>
</div>
<div class="participant-item" onclick="viewUser()">
<div class="participant-avatar c1">
</div>
<div class="participant-info">
<div class="participant-name">咖啡控小张</div>
<div class="participant-desc">经管学院 · 研二</div>
</div>
<div class="participant-right">
<span class="sign-time">1天前报名</span>
<button class="follow-btn">+ 关注</button>
</div>
</div>
<div class="participant-item" onclick="viewUser()">
<div class="participant-avatar c2"><span class="icon-svg icon-clapperboard"></span></div>
<div class="participant-info">
<div class="participant-name">
电影迷阿伟
<span class="vip-badge">VIP2</span>
</div>
<div class="participant-desc">新闻传播 · 大三</div>
</div>
<div class="participant-right">
<span class="sign-time">10小时前</span>
<button class="follow-btn">+ 关注</button>
</div>
</div>
</div>
<!-- 邀请好友 -->
<div class="invite-card" onclick="inviteFriend()">
<div class="invite-text">
<div class="invite-title">邀请好友一起参加</div>
<div class="invite-desc">邀请好友可获得 20 青豆奖励</div>
</div>
<button class="invite-btn">去邀请</button>
</div>
<div style="text-align:center;padding:20px;color:var(--youth-text-tertiary);font-size:12px;">
— 已显示全部 56 位参与者 —
</div>
</div>
</div>
<script> icon.innerHTML = '<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>';
}
}
function goBack() { window.history.back(); }
function searchUser() { alert('搜索参与者'); }
function goActivity() { alert('活动详情'); }
function viewUser() { alert('用户详情'); }
function inviteFriend() { alert('邀请好友'); }
function switchTab(el, type) {
document.querySelectorAll('.tab-item').forEach(t => t.classList.remove('active'));
el.classList.add('active');
}</script>
</body>
</html>