04-activities-venues.html 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>天河基地 · 活动 & 会场</title>
  7. <style>
  8. * { box-sizing: border-box; margin: 0; padding: 0; }
  9. body { font-family: -apple-system, 'PingFang SC', 'Helvetica Neue', sans-serif; background: #e8edf5; color: #0f172a; padding: 32px 24px; }
  10. h1 { font-size: 22px; font-weight: 700; margin-bottom: 4px; }
  11. .page-sub { font-size: 13px; color: #64748b; margin-bottom: 28px; }
  12. .screens-row { display: flex; gap: 24px; flex-wrap: wrap; align-items: flex-start; }
  13. .screen-col { display: flex; flex-direction: column; gap: 10px; align-items: center; }
  14. .screen-label { font-size: 12px; font-weight: 600; color: #64748b; background: white; padding: 4px 12px; border-radius: 20px; }
  15. .phone { width: 320px; background: #f8fafc; border-radius: 30px; overflow: hidden; box-shadow: 0 18px 50px rgba(0,0,0,0.15), 0 0 0 7px #1e293b; flex-shrink: 0; }
  16. .status { background: white; padding: 10px 16px 4px; display: flex; justify-content: space-between; font-size: 13px; font-weight: 600; }
  17. .nav-bar { background: white; padding: 6px 14px 8px; display: flex; align-items: center; gap: 8px; border-bottom: 1px solid #f1f5f9; }
  18. .back { width: 28px; height: 28px; border-radius: 50%; background: #f1f5f9; display: flex; align-items: center; justify-content: center; font-size: 13px; }
  19. .nav-t { font-size: 16px; font-weight: 600; flex: 1; text-align: center; }
  20. .body { max-height: 560px; overflow-y: auto; background: #f8fafc; }
  21. .body::-webkit-scrollbar { display: none; }
  22. .tag { display: inline-flex; border-radius: 5px; padding: 3px 8px; font-size: 11px; font-weight: 500; }
  23. .t-green { background:#f0fdf4; color:#16a34a; }
  24. .t-orange { background:#fff7ed; color:#ea580c; }
  25. .t-gray { background:#f1f5f9; color:#64748b; }
  26. .t-blue { background:#eff6ff; color:#3b82f6; }
  27. .t-red { background:#fef2f2; color:#ef4444; }
  28. /* Activity list */
  29. .seg { display: flex; gap: 0; background: white; padding: 8px 12px; margin-bottom: 1px; }
  30. .seg-btn { flex: 1; text-align: center; padding: 7px 0; font-size: 13px; font-weight: 500; color: #94a3b8; border-radius: 8px; }
  31. .seg-btn.active { background: linear-gradient(135deg,#3b82f6,#6366f1); color: white; font-weight: 600; }
  32. .act-card { background: white; margin: 0 12px 10px; border-radius: 14px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
  33. .act-img { height: 100px; position: relative; display: flex; align-items: flex-end; padding: 10px; }
  34. .act-img-tag { position: absolute; top: 10px; right: 10px; background: rgba(255,255,255,0.92); border-radius: 5px; padding: 3px 8px; font-size: 11px; font-weight: 600; }
  35. .act-info { padding: 12px; }
  36. .act-name { font-size: 14px; font-weight: 600; color: #0f172a; margin-bottom: 6px; line-height: 1.4; }
  37. .act-meta-row { display: flex; gap: 12px; flex-wrap: wrap; }
  38. .act-meta { font-size: 12px; color: #64748b; }
  39. .act-footer { display: flex; justify-content: space-between; align-items: center; margin-top: 10px; }
  40. .act-count { font-size: 12px; color: #94a3b8; }
  41. .btn-reg { background: linear-gradient(135deg,#3b82f6,#6366f1); color: white; font-size: 12px; font-weight: 600; padding: 7px 14px; border-radius: 8px; border: none; }
  42. .btn-reg-ghost { background: #f1f5f9; color: #64748b; font-size: 12px; font-weight: 600; padding: 7px 14px; border-radius: 8px; border: none; }
  43. /* Activity detail */
  44. .act-detail-hero { height: 160px; position: relative; display: flex; flex-direction: column; justify-content: flex-end; padding: 16px; }
  45. .act-detail-title { font-size: 18px; font-weight: 700; color: white; line-height: 1.3; }
  46. .act-detail-body { padding: 0 12px 12px; }
  47. .info-card { background: white; border-radius: 14px; padding: 14px; margin-top: 10px; box-shadow: 0 1px 6px rgba(0,0,0,0.06); }
  48. .info-row { display: flex; gap: 10px; align-items: flex-start; padding: 8px 0; border-bottom: 1px solid #f8fafc; }
  49. .info-row:last-child { border-bottom: none; }
  50. .info-icon { font-size: 16px; flex-shrink: 0; width: 20px; }
  51. .info-text { font-size: 13px; color: #374151; line-height: 1.5; }
  52. .info-label { font-size: 11px; color: #94a3b8; margin-bottom: 1px; }
  53. .map-placeholder { height: 80px; background: linear-gradient(135deg,#e0f2fe,#dbeafe); border-radius: 12px; display: flex; align-items: center; justify-content: center; margin-top: 10px; font-size: 13px; color: #3b82f6; font-weight: 600; }
  54. .register-bar { background: white; border-top: 1px solid #f1f5f9; padding: 10px 12px 22px; display: flex; gap: 10px; }
  55. .count-chip { background: #f8fafc; border-radius: 10px; padding: 8px 12px; font-size: 12px; color: #64748b; display: flex; flex-direction: column; align-items: center; }
  56. .count-num { font-size: 16px; font-weight: 700; color: #0f172a; }
  57. .reg-btn-full { flex: 1; background: linear-gradient(135deg,#3b82f6,#6366f1); color: white; font-size: 15px; font-weight: 700; border-radius: 12px; border: none; box-shadow: 0 4px 12px rgba(99,102,241,0.3); }
  58. /* Venue list */
  59. .venue-filter { display: flex; gap: 8px; padding: 8px 12px; overflow-x: auto; }
  60. .venue-filter::-webkit-scrollbar { display: none; }
  61. .f-btn { flex-shrink: 0; padding: 5px 12px; border-radius: 20px; font-size: 12px; font-weight: 500; border: 1.5px solid #e2e8f0; color: #64748b; background: white; }
  62. .f-btn.active { background: #3b82f6; color: white; border-color: #3b82f6; }
  63. .venue-card { background: white; margin: 0 12px 10px; border-radius: 14px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.06); display: flex; }
  64. .venue-img { width: 90px; flex-shrink: 0; }
  65. .venue-info { padding: 12px; flex: 1; }
  66. .venue-name { font-size: 13px; font-weight: 600; color: #0f172a; margin-bottom: 4px; }
  67. .venue-meta { font-size: 11px; color: #64748b; line-height: 1.6; }
  68. .venue-price { font-size: 13px; font-weight: 700; color: #3b82f6; margin-top: 4px; }
  69. .venue-footer { display: flex; justify-content: space-between; align-items: center; margin-top: 6px; }
  70. .btn-book { background: #eff6ff; color: #3b82f6; font-size: 11px; font-weight: 600; padding: 5px 10px; border-radius: 7px; border: none; }
  71. /* Venue booking */
  72. .time-slots { display: grid; grid-template-columns: repeat(3,1fr); gap: 6px; padding: 12px; }
  73. .slot { background: white; border: 1.5px solid #e2e8f0; border-radius: 8px; padding: 8px 4px; text-align: center; font-size: 12px; color: #374151; }
  74. .slot.booked { background: #f1f5f9; color: #94a3b8; border-color: #f1f5f9; text-decoration: line-through; }
  75. .slot.selected { background: #eff6ff; border-color: #3b82f6; color: #3b82f6; font-weight: 600; }
  76. .slot-time { font-size: 11px; margin-top: 3px; color: #94a3b8; }
  77. .slot.selected .slot-time { color: #93c5fd; }
  78. /* Bottom nav */
  79. .bot-nav { background: white; border-top: 1px solid #f1f5f9; display: flex; padding: 7px 0 18px; }
  80. .n-item { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 2px; }
  81. .n-lbl { font-size: 10px; color: #94a3b8; }
  82. .n-lbl.active { color: #3b82f6; font-weight: 600; }
  83. /* Annos */
  84. .annos { margin-top: 28px; display: grid; grid-template-columns: repeat(auto-fill, minmax(280px,1fr)); gap: 12px; }
  85. .anno { background: white; border-radius: 14px; padding: 14px 16px; box-shadow: 0 1px 4px rgba(0,0,0,0.06); }
  86. .anno-t { font-size: 13px; font-weight: 700; color: #3b82f6; margin-bottom: 6px; display: flex; align-items: center; gap: 6px; }
  87. .anno-num { width: 20px; height: 20px; background: #3b82f6; color: white; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; }
  88. .anno-p { font-size: 13px; color: #374151; line-height: 1.6; }
  89. .p-tag { display: inline-block; font-size: 11px; padding: 2px 7px; border-radius: 4px; margin-top: 5px; }
  90. .p0 { background:#fef2f2; color:#dc2626; }
  91. .p1 { background:#fff7ed; color:#ea580c; }
  92. .p2 { background:#f0fdf4; color:#16a34a; }
  93. .submit-bar { background: white; padding: 10px 12px 22px; border-top: 1px solid #f1f5f9; }
  94. .submit-btn { width: 100%; background: linear-gradient(135deg,#3b82f6,#6366f1); color: white; font-size: 15px; font-weight: 700; padding: 13px; border-radius: 12px; border: none; box-shadow: 0 4px 12px rgba(99,102,241,0.3); }
  95. </style>
  96. </head>
  97. <body>
  98. <h1>活动列表 · 活动详情 · 会场列表 · 会场预约</h1>
  99. <p class="page-sub">Page 5–8 · 活动 Tab & 会场 Tab</p>
  100. <div class="screens-row">
  101. <!-- Screen 1: Activity List -->
  102. <div class="screen-col">
  103. <span class="screen-label">活动列表(Tab 3)</span>
  104. <div class="phone">
  105. <div class="status"><span>9:41</span><span>●●● 🔋</span></div>
  106. <div class="nav-bar"><div style="width:28px;"></div><span class="nav-t">活动</span><div style="font-size:18px; color:#3b82f6;">⊞</div></div>
  107. <div class="body">
  108. <div class="seg">
  109. <div class="seg-btn active">进行中</div>
  110. <div class="seg-btn">即将开始</div>
  111. <div class="seg-btn">已结束</div>
  112. </div>
  113. <div style="height:8px;"></div>
  114. <div class="act-card">
  115. <div class="act-img" style="background:linear-gradient(135deg,#3b82f6,#6366f1);">
  116. <span class="act-img-tag t-green">报名中</span>
  117. </div>
  118. <div class="act-info">
  119. <div class="act-name">第三届科技创新创业大赛</div>
  120. <div class="act-meta-row">
  121. <div class="act-meta">📅 4月15日 14:00</div>
  122. <div class="act-meta">📍 A座报告厅</div>
  123. </div>
  124. <div class="act-footer">
  125. <span class="act-count">已报名 128 / 200 人</span>
  126. <button class="btn-reg">立即报名</button>
  127. </div>
  128. </div>
  129. </div>
  130. <div class="act-card">
  131. <div class="act-img" style="background:linear-gradient(135deg,#0ea5e9,#3b82f6);">
  132. <span class="act-img-tag t-orange">即将开始</span>
  133. </div>
  134. <div class="act-info">
  135. <div class="act-name">AI 赋能企业运营专题讲座</div>
  136. <div class="act-meta-row">
  137. <div class="act-meta">📅 4月18日 10:00</div>
  138. <div class="act-meta">📍 B座多功能厅</div>
  139. </div>
  140. <div class="act-footer">
  141. <span class="act-count">已报名 56 / 100 人</span>
  142. <button class="btn-reg">立即报名</button>
  143. </div>
  144. </div>
  145. </div>
  146. <div class="act-card">
  147. <div class="act-img" style="background:linear-gradient(135deg,#8b5cf6,#6366f1);">
  148. <span class="act-img-tag t-gray">已结束</span>
  149. </div>
  150. <div class="act-info">
  151. <div class="act-name">政策解读沙龙·高新技术认定</div>
  152. <div class="act-meta-row">
  153. <div class="act-meta">📅 3月28日 15:00</div>
  154. <div class="act-meta">📍 C座会议室</div>
  155. </div>
  156. <div class="act-footer">
  157. <span class="act-count">已报名 89 / 不限</span>
  158. <button class="btn-reg-ghost">已结束</button>
  159. </div>
  160. </div>
  161. </div>
  162. </div>
  163. <div class="bot-nav">
  164. <div class="n-item"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2"><path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="n-lbl">首页</span></div>
  165. <div class="n-item"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2"><rect x="2" y="7" width="20" height="14" rx="2"/></svg><span class="n-lbl">企业服务</span></div>
  166. <div class="n-item"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#3b82f6" stroke-width="2"><rect x="3" y="4" width="18" height="18" rx="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg><span class="n-lbl active">活动</span></div>
  167. <div class="n-item"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="n-lbl">会场</span></div>
  168. <div class="n-item"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2"><circle cx="12" cy="7" r="4"/><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/></svg><span class="n-lbl">我的</span></div>
  169. </div>
  170. </div>
  171. </div>
  172. <!-- Screen 2: Activity Detail -->
  173. <div class="screen-col">
  174. <span class="screen-label">活动详情 + 报名</span>
  175. <div class="phone">
  176. <div class="status"><span>9:41</span><span>●●● 🔋</span></div>
  177. <div class="nav-bar"><div class="back">‹</div><span class="nav-t">活动详情</span><div style="font-size:18px; color:#94a3b8;">⋯</div></div>
  178. <div class="body" style="max-height:510px;">
  179. <div class="act-detail-hero" style="background:linear-gradient(135deg,#3b82f6,#6366f1);">
  180. <span class="tag t-green" style="background:rgba(255,255,255,0.9); margin-bottom:8px; width:fit-content;">报名中</span>
  181. <div class="act-detail-title">第三届科技创新<br>创业大赛</div>
  182. </div>
  183. <div class="act-detail-body">
  184. <div class="info-card">
  185. <div class="info-row">
  186. <div class="info-icon">📅</div>
  187. <div><div class="info-label">活动时间</div><div class="info-text">2026年4月15日 14:00 – 18:00</div></div>
  188. </div>
  189. <div class="info-row">
  190. <div class="info-icon">📍</div>
  191. <div><div class="info-label">活动地点</div><div class="info-text">天河基地A座报告厅(广州市天河区)</div></div>
  192. </div>
  193. <div class="info-row">
  194. <div class="info-icon">👥</div>
  195. <div><div class="info-label">报名情况</div><div class="info-text">已报名 128 人 / 限额 200 人</div></div>
  196. </div>
  197. </div>
  198. <div class="map-placeholder">🗺 点击查看地图导航</div>
  199. <div class="info-card" style="margin-top:10px;">
  200. <div style="font-size:13px; color:#374151; line-height:1.7;">本次大赛面向全国在校大学生及应届毕业生,聚焦人工智能、新能源、生物医药三大赛道。设一等奖3名、二等奖6名,奖金总计50万元。<br><br>参赛队伍须提交商业计划书,现场路演评审...</div>
  201. </div>
  202. </div>
  203. </div>
  204. <div class="register-bar">
  205. <div class="count-chip"><span class="count-num">128</span><span style="font-size:10px; color:#94a3b8;">已报名</span></div>
  206. <button class="reg-btn-full">立即报名</button>
  207. </div>
  208. </div>
  209. </div>
  210. <!-- Screen 3: Venue List -->
  211. <div class="screen-col">
  212. <span class="screen-label">会场列表(Tab 4)</span>
  213. <div class="phone">
  214. <div class="status"><span>9:41</span><span>●●● 🔋</span></div>
  215. <div class="nav-bar"><div style="width:28px;"></div><span class="nav-t">会场预约</span><div style="width:28px;"></div></div>
  216. <div class="body">
  217. <div class="venue-filter">
  218. <div class="f-btn active">全部</div>
  219. <div class="f-btn">会议室</div>
  220. <div class="f-btn">报告厅</div>
  221. <div class="f-btn">大型会场</div>
  222. </div>
  223. <div style="height:6px;"></div>
  224. <div class="venue-card">
  225. <div class="venue-img" style="background:linear-gradient(135deg,#3b82f6,#6366f1);"></div>
  226. <div class="venue-info">
  227. <div class="venue-name">A-301 多功能会议室</div>
  228. <div class="venue-meta">👥 20人 · 60㎡ · 3楼<br>📺 投影 白板 空调</div>
  229. <div style="display:flex; justify-content:space-between; align-items:center; margin-top:6px;">
  230. <div class="venue-price">¥200 / 时</div>
  231. <div style="display:flex; gap:6px; align-items:center;">
  232. <span class="tag t-green" style="font-size:10px;">可预约</span>
  233. <button class="btn-book">预约</button>
  234. </div>
  235. </div>
  236. </div>
  237. </div>
  238. <div class="venue-card">
  239. <div class="venue-img" style="background:linear-gradient(135deg,#0ea5e9,#3b82f6);"></div>
  240. <div class="venue-info">
  241. <div class="venue-name">B座报告厅</div>
  242. <div class="venue-meta">👥 200人 · 400㎡ · 1楼<br>🎤 音响 大屏 舞台</div>
  243. <div style="display:flex; justify-content:space-between; align-items:center; margin-top:6px;">
  244. <div class="venue-price">¥2,000 / 时</div>
  245. <div style="display:flex; gap:6px; align-items:center;">
  246. <span class="tag t-blue" style="font-size:10px;">需审批</span>
  247. <button class="btn-book">申请</button>
  248. </div>
  249. </div>
  250. </div>
  251. </div>
  252. <div class="venue-card">
  253. <div class="venue-img" style="background:linear-gradient(135deg,#8b5cf6,#6366f1);"></div>
  254. <div class="venue-info">
  255. <div class="venue-name">C-102 小型会议室</div>
  256. <div class="venue-meta">👥 8人 · 30㎡ · 1楼<br>💻 电视 白板</div>
  257. <div style="display:flex; justify-content:space-between; align-items:center; margin-top:6px;">
  258. <div class="venue-price">¥100 / 时</div>
  259. <div style="display:flex; gap:6px; align-items:center;">
  260. <span class="tag t-green" style="font-size:10px;">可预约</span>
  261. <button class="btn-book">预约</button>
  262. </div>
  263. </div>
  264. </div>
  265. </div>
  266. <div style="height:8px;"></div>
  267. </div>
  268. <div class="bot-nav">
  269. <div class="n-item"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2"><path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="n-lbl">首页</span></div>
  270. <div class="n-item"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2"><rect x="2" y="7" width="20" height="14" rx="2"/></svg><span class="n-lbl">企业服务</span></div>
  271. <div class="n-item"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2"><rect x="3" y="4" width="18" height="18" rx="2"/></svg><span class="n-lbl">活动</span></div>
  272. <div class="n-item"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#3b82f6" stroke-width="2"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="n-lbl active">会场</span></div>
  273. <div class="n-item"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2"><circle cx="12" cy="7" r="4"/><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/></svg><span class="n-lbl">我的</span></div>
  274. </div>
  275. </div>
  276. </div>
  277. <!-- Screen 4: Venue Booking -->
  278. <div class="screen-col">
  279. <span class="screen-label">会场预约(共享会议室)</span>
  280. <div class="phone">
  281. <div class="status"><span>9:41</span><span>●●● 🔋</span></div>
  282. <div class="nav-bar"><div class="back">‹</div><span class="nav-t">选择时间段</span><div style="width:28px;"></div></div>
  283. <div class="body" style="max-height:510px;">
  284. <!-- Venue header -->
  285. <div style="background:white; padding:14px 14px 10px; margin-bottom:8px; display:flex; gap:12px; align-items:center;">
  286. <div style="width:60px; height:60px; border-radius:12px; background:linear-gradient(135deg,#3b82f6,#6366f1); flex-shrink:0;"></div>
  287. <div>
  288. <div style="font-size:15px; font-weight:700; color:#0f172a;">A-301 多功能会议室</div>
  289. <div style="font-size:12px; color:#64748b; margin-top:3px;">20人 · 60㎡ · 投影 白板 空调</div>
  290. <div style="font-size:14px; font-weight:700; color:#3b82f6; margin-top:4px;">¥200 / 小时</div>
  291. </div>
  292. </div>
  293. <!-- Date selector -->
  294. <div style="background:white; padding:10px 14px; margin-bottom:8px;">
  295. <div style="font-size:13px; font-weight:600; color:#374151; margin-bottom:8px;">选择日期</div>
  296. <div style="display:flex; gap:8px; overflow-x:auto;">
  297. <div style="flex-shrink:0; display:flex;flex-direction:column;align-items:center; width:44px; background:#f8fafc; border-radius:10px; padding:8px 0; font-size:11px; color:#94a3b8;"><span>周一</span><span style="font-size:15px; font-weight:600; color:#374151; margin-top:2px;">14</span></div>
  298. <div style="flex-shrink:0; display:flex;flex-direction:column;align-items:center; width:44px; background:linear-gradient(135deg,#3b82f6,#6366f1); border-radius:10px; padding:8px 0; font-size:11px; color:rgba(255,255,255,0.8);"><span>周二</span><span style="font-size:15px; font-weight:700; color:white; margin-top:2px;">15</span></div>
  299. <div style="flex-shrink:0; display:flex;flex-direction:column;align-items:center; width:44px; background:#f8fafc; border-radius:10px; padding:8px 0; font-size:11px; color:#94a3b8;"><span>周三</span><span style="font-size:15px; font-weight:600; color:#374151; margin-top:2px;">16</span></div>
  300. <div style="flex-shrink:0; display:flex;flex-direction:column;align-items:center; width:44px; background:#f8fafc; border-radius:10px; padding:8px 0; font-size:11px; color:#94a3b8;"><span>周四</span><span style="font-size:15px; font-weight:600; color:#374151; margin-top:2px;">17</span></div>
  301. <div style="flex-shrink:0; display:flex;flex-direction:column;align-items:center; width:44px; background:#f8fafc; border-radius:10px; padding:8px 0; font-size:11px; color:#94a3b8;"><span>周五</span><span style="font-size:15px; font-weight:600; color:#374151; margin-top:2px;">18</span></div>
  302. </div>
  303. </div>
  304. <!-- Time slots -->
  305. <div style="background:white; padding:10px 14px;">
  306. <div style="font-size:13px; font-weight:600; color:#374151; margin-bottom:8px;">选择时间段 <span style="font-size:11px; color:#94a3b8; font-weight:400;">(可选多个连续时段)</span></div>
  307. <div style="display:flex; gap:8px; margin-bottom:8px; font-size:11px; color:#94a3b8;">
  308. <span style="display:flex; align-items:center; gap:3px;"><span style="width:10px;height:10px;border-radius:3px;background:#f1f5f9;display:inline-block;"></span>已被预约</span>
  309. <span style="display:flex; align-items:center; gap:3px;"><span style="width:10px;height:10px;border-radius:3px;background:#eff6ff;border:1.5px solid #3b82f6;display:inline-block;"></span>已选中</span>
  310. <span style="display:flex; align-items:center; gap:3px;"><span style="width:10px;height:10px;border-radius:3px;background:white;border:1.5px solid #e2e8f0;display:inline-block;"></span>可预约</span>
  311. </div>
  312. <div class="time-slots">
  313. <div class="slot booked">08:00<div class="slot-time">已预约</div></div>
  314. <div class="slot booked">09:00<div class="slot-time">已预约</div></div>
  315. <div class="slot">10:00<div class="slot-time">可预约</div></div>
  316. <div class="slot selected">11:00<div class="slot-time">已选 ✓</div></div>
  317. <div class="slot selected">12:00<div class="slot-time">已选 ✓</div></div>
  318. <div class="slot">13:00<div class="slot-time">可预约</div></div>
  319. <div class="slot">14:00<div class="slot-time">可预约</div></div>
  320. <div class="slot booked">15:00<div class="slot-time">已预约</div></div>
  321. <div class="slot">16:00<div class="slot-time">可预约</div></div>
  322. </div>
  323. <div style="background:#eff6ff; border-radius:10px; padding:10px 12px; margin-top:10px; display:flex; justify-content:space-between; align-items:center;">
  324. <div style="font-size:13px; color:#374151;">已选 11:00 – 13:00(2小时)</div>
  325. <div style="font-size:15px; font-weight:700; color:#3b82f6;">¥400</div>
  326. </div>
  327. </div>
  328. </div>
  329. <div class="submit-bar">
  330. <button class="submit-btn">确认预约</button>
  331. </div>
  332. </div>
  333. </div>
  334. </div>
  335. <!-- ANNOTATIONS -->
  336. <div class="annos">
  337. <div class="anno">
  338. <div class="anno-t"><span class="anno-num">A</span> 活动列表</div>
  339. <div class="anno-p">顶部三段式切换(进行中/即将开始/已结束),报名截止时间到自动切换状态。封面图未上传时用渐变色占位。已登录用户报名时弹出信息确认表单(姓名/手机/单位),无需重复登录。</div>
  340. <span class="p-tag p0">P0</span>
  341. </div>
  342. <div class="anno">
  343. <div class="anno-t"><span class="anno-num">B</span> 活动详情</div>
  344. <div class="anno-p">地图区域调用微信内置地图 API,点击可直接导航。底部固定注册栏,报名人数满员时按钮置灰并显示「已满员」。已报名用户显示「取消报名」。报名成功后触发微信订阅消息通知。</div>
  345. <span class="p-tag p0">P0</span>
  346. </div>
  347. <div class="anno">
  348. <div class="anno-t"><span class="anno-num">C</span> 会场列表</div>
  349. <div class="anno-p">共享会议室(is_shared=true)直接进入时间选择;大型会场(is_shared=false)进入申请表单,需上传活动方案附件,审批后管理员发送门禁密码。可按类型和容量筛选。</div>
  350. <span class="p-tag p0">P0</span>
  351. </div>
  352. <div class="anno">
  353. <div class="anno-t"><span class="anno-num">D</span> 时间段预约</div>
  354. <div class="anno-p">日期选择横滑,仅展示未来14天。时间格显示实时可用状态,已被预约的格子置灰。可选多个连续时段,底部汇总显示总时长和费用。确认后触发微信订阅消息推送确认通知。</div>
  355. <span class="p-tag p0">P0</span>
  356. </div>
  357. </div>
  358. </body>
  359. </html>