02-page-home.html 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  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; color: #0f172a; margin-bottom: 4px; }
  11. .page-sub { font-size: 13px; color: #64748b; margin-bottom: 32px; }
  12. .layout { display: flex; gap: 40px; align-items: flex-start; flex-wrap: wrap; }
  13. /* Phone frame */
  14. .phone { width: 375px; background: #f8fafc; border-radius: 36px; overflow: hidden; box-shadow: 0 24px 64px rgba(0,0,0,0.18), 0 0 0 8px #1e293b, 0 0 0 10px #334155; flex-shrink: 0; }
  15. .phone-status { background: white; padding: 12px 20px 6px; display: flex; justify-content: space-between; align-items: center; }
  16. .status-time { font-size: 15px; font-weight: 700; color: #0f172a; }
  17. .status-icons { font-size: 12px; color: #0f172a; display: flex; gap: 6px; align-items: center; }
  18. .phone-nav { background: white; padding: 8px 16px 10px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid #f1f5f9; }
  19. .nav-title { font-size: 17px; font-weight: 600; color: #0f172a; }
  20. .nav-icons { display: flex; gap: 16px; }
  21. .nav-icon-btn { width: 32px; height: 32px; border-radius: 50%; background: #f1f5f9; display: flex; align-items: center; justify-content: center; font-size: 15px; cursor: pointer; }
  22. .phone-body { height: 620px; overflow-y: auto; background: #f8fafc; }
  23. .phone-body::-webkit-scrollbar { display: none; }
  24. /* Banner */
  25. .banner { height: 160px; background: linear-gradient(135deg, #3b82f6 0%, #6366f1 100%); position: relative; overflow: hidden; padding: 24px 20px 20px; display: flex; flex-direction: column; justify-content: flex-end; }
  26. .banner-bg-circle { position: absolute; width: 200px; height: 200px; border-radius: 50%; background: rgba(255,255,255,0.08); top: -60px; right: -40px; }
  27. .banner-bg-circle2 { position: absolute; width: 120px; height: 120px; border-radius: 50%; background: rgba(255,255,255,0.06); top: 20px; right: 60px; }
  28. .banner-tag { display: inline-flex; background: rgba(255,255,255,0.2); color: white; font-size: 11px; padding: 3px 8px; border-radius: 4px; margin-bottom: 8px; width: fit-content; }
  29. .banner-title { font-size: 20px; font-weight: 700; color: white; line-height: 1.3; }
  30. .banner-sub { font-size: 12px; color: rgba(255,255,255,0.8); margin-top: 4px; }
  31. .banner-dots { display: flex; gap: 5px; position: absolute; bottom: 14px; right: 16px; }
  32. .dot { width: 5px; height: 5px; border-radius: 50%; background: rgba(255,255,255,0.4); }
  33. .dot.active { width: 16px; border-radius: 3px; background: white; }
  34. /* Quick entries */
  35. .entries-section { background: white; padding: 16px; margin-bottom: 8px; }
  36. .entries-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px; }
  37. .entry-item { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 12px 4px; cursor: pointer; border-radius: 12px; }
  38. .entry-item:active { background: #f8fafc; }
  39. .entry-icon { width: 48px; height: 48px; border-radius: 14px; display: flex; align-items: center; justify-content: center; font-size: 22px; }
  40. .entry-label { font-size: 12px; color: #374151; font-weight: 500; text-align: center; line-height: 1.3; }
  41. /* Section header */
  42. .sec-header { display: flex; justify-content: space-between; align-items: center; padding: 16px 16px 10px; }
  43. .sec-title { font-size: 16px; font-weight: 700; color: #0f172a; }
  44. .sec-more { font-size: 13px; color: #3b82f6; }
  45. /* Activity cards horizontal scroll */
  46. .h-scroll { display: flex; gap: 12px; padding: 0 16px 16px; overflow-x: auto; }
  47. .h-scroll::-webkit-scrollbar { display: none; }
  48. .activity-card { flex-shrink: 0; width: 180px; background: white; border-radius: 14px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.07); }
  49. .activity-img { height: 80px; position: relative; }
  50. .activity-img-tag { position: absolute; top: 8px; left: 8px; background: rgba(255,255,255,0.92); font-size: 10px; font-weight: 600; padding: 2px 7px; border-radius: 4px; }
  51. .activity-img-tag.green { color: #16a34a; }
  52. .activity-img-tag.orange { color: #ea580c; }
  53. .activity-info { padding: 10px 10px 12px; }
  54. .activity-name { font-size: 13px; font-weight: 600; color: #0f172a; line-height: 1.4; margin-bottom: 5px; }
  55. .activity-meta { font-size: 11px; color: #64748b; }
  56. .activity-meta + .activity-meta { margin-top: 2px; }
  57. /* Space cards */
  58. .spaces-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding: 0 16px 16px; }
  59. .space-card { background: white; border-radius: 14px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
  60. .space-img { height: 72px; }
  61. .space-info { padding: 10px; }
  62. .space-name { font-size: 13px; font-weight: 600; color: #0f172a; }
  63. .space-meta { font-size: 11px; color: #64748b; margin-top: 3px; }
  64. .space-price { font-size: 12px; color: #3b82f6; font-weight: 600; margin-top: 4px; }
  65. /* Achievement section */
  66. .achievement-item { display: flex; gap: 12px; padding: 12px 16px; background: white; border-bottom: 1px solid #f8fafc; align-items: center; }
  67. .achievement-icon { width: 44px; height: 44px; border-radius: 12px; background: linear-gradient(135deg, #eff6ff, #eef2ff); display: flex; align-items: center; justify-content: center; font-size: 22px; flex-shrink: 0; }
  68. .achievement-info { flex: 1; }
  69. .achievement-name { font-size: 13px; font-weight: 600; color: #0f172a; }
  70. .achievement-org { font-size: 11px; color: #64748b; margin-top: 2px; }
  71. .achievement-arrow { color: #cbd5e1; font-size: 18px; }
  72. /* Partner banner */
  73. .partner-banner { margin: 8px 16px 16px; background: linear-gradient(135deg, #eff6ff, #eef2ff); border-radius: 16px; padding: 16px; display: flex; justify-content: space-between; align-items: center; border: 1px solid #dbeafe; }
  74. .partner-text { }
  75. .partner-title { font-size: 14px; font-weight: 700; color: #1e40af; }
  76. .partner-sub { font-size: 12px; color: #6366f1; margin-top: 3px; }
  77. .partner-btn { background: linear-gradient(135deg, #3b82f6, #6366f1); color: white; font-size: 12px; font-weight: 600; padding: 8px 14px; border-radius: 20px; border: none; white-space: nowrap; flex-shrink: 0; }
  78. /* Bottom Nav */
  79. .bottom-nav { background: white; border-top: 1px solid #f1f5f9; display: flex; padding: 8px 0 20px; box-shadow: 0 -4px 16px rgba(0,0,0,0.05); }
  80. .nav-item { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px; cursor: pointer; }
  81. .nav-dot { width: 20px; height: 20px; }
  82. .nav-label-text { font-size: 10px; color: #94a3b8; }
  83. .nav-item.active .nav-label-text { color: #3b82f6; font-weight: 600; }
  84. /* Annotations panel */
  85. .annotations { flex: 1; min-width: 280px; }
  86. .anno-title { font-size: 18px; font-weight: 700; color: #0f172a; margin-bottom: 20px; }
  87. .anno-block { background: white; border-radius: 14px; padding: 16px; margin-bottom: 12px; box-shadow: 0 1px 4px rgba(0,0,0,0.06); }
  88. .anno-block-title { font-size: 13px; font-weight: 700; color: #3b82f6; margin-bottom: 8px; display: flex; align-items: center; gap: 6px; }
  89. .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; flex-shrink: 0; }
  90. .anno-text { font-size: 13px; color: #374151; line-height: 1.6; }
  91. .anno-tag { display: inline-block; background: #eff6ff; color: #3b82f6; font-size: 11px; padding: 2px 8px; border-radius: 4px; margin-right: 4px; margin-top: 4px; }
  92. .anno-tag.p0 { background: #fef2f2; color: #dc2626; }
  93. .anno-tag.p1 { background: #fff7ed; color: #ea580c; }
  94. .anno-tag.p2 { background: #f0fdf4; color: #16a34a; }
  95. </style>
  96. </head>
  97. <body>
  98. <h1>天河基地小程序 · 首页设计</h1>
  99. <p class="page-sub">Page 1 of 8 · 首页 (Home)</p>
  100. <div class="layout">
  101. <!-- PHONE MOCKUP -->
  102. <div class="phone">
  103. <!-- Status Bar -->
  104. <div class="phone-status" style="background:white;">
  105. <span class="status-time">9:41</span>
  106. <div class="status-icons">
  107. <span>●●●</span><span>WiFi</span><span>🔋</span>
  108. </div>
  109. </div>
  110. <!-- Nav Bar -->
  111. <div class="phone-nav">
  112. <div style="width:32px;"></div>
  113. <span class="nav-title">天河基地</span>
  114. <div class="nav-icons">
  115. <div class="nav-icon-btn">🔍</div>
  116. </div>
  117. </div>
  118. <!-- Scrollable Body -->
  119. <div class="phone-body">
  120. <!-- ① Banner -->
  121. <div class="banner">
  122. <div class="banner-bg-circle"></div>
  123. <div class="banner-bg-circle2"></div>
  124. <span class="banner-tag">🎉 最新公告</span>
  125. <div class="banner-title">2026年天河基地<br>招商入驻开放申请</div>
  126. <div class="banner-sub">优质办公空间 · 全程政策支持</div>
  127. <div class="banner-dots">
  128. <div class="dot active"></div>
  129. <div class="dot"></div>
  130. <div class="dot"></div>
  131. </div>
  132. </div>
  133. <!-- ② Quick Entries -->
  134. <div class="entries-section">
  135. <div class="entries-grid">
  136. <div class="entry-item">
  137. <div class="entry-icon" style="background: linear-gradient(135deg,#eff6ff,#dbeafe);">🏢</div>
  138. <span class="entry-label">入驻申请</span>
  139. </div>
  140. <div class="entry-item">
  141. <div class="entry-icon" style="background: linear-gradient(135deg,#fff7ed,#ffedd5);">📅</div>
  142. <span class="entry-label">活动报名</span>
  143. </div>
  144. <div class="entry-item">
  145. <div class="entry-icon" style="background: linear-gradient(135deg,#f0fdf4,#dcfce7);">🏛</div>
  146. <span class="entry-label">会场预约</span>
  147. </div>
  148. <div class="entry-item">
  149. <div class="entry-icon" style="background: linear-gradient(135deg,#eef2ff,#e0e7ff);">💼</div>
  150. <span class="entry-label">需求发布</span>
  151. </div>
  152. <div class="entry-item">
  153. <div class="entry-icon" style="background: linear-gradient(135deg,#fdf4ff,#fae8ff);">🔬</div>
  154. <span class="entry-label">科技成果</span>
  155. </div>
  156. <div class="entry-item">
  157. <div class="entry-icon" style="background: linear-gradient(135deg,#fff1f2,#ffe4e6);">👔</div>
  158. <span class="entry-label">技术经理人</span>
  159. </div>
  160. <div class="entry-item">
  161. <div class="entry-icon" style="background: linear-gradient(135deg,#f0fdfa,#ccfbf1);">📍</div>
  162. <span class="entry-label">关于基地</span>
  163. </div>
  164. <div class="entry-item">
  165. <div class="entry-icon" style="background: linear-gradient(135deg,#fffbeb,#fef3c7);">💬</div>
  166. <span class="entry-label">问题反馈</span>
  167. </div>
  168. </div>
  169. </div>
  170. <!-- ③ Recent Activities -->
  171. <div style="background:#f8fafc;">
  172. <div class="sec-header">
  173. <span class="sec-title">近期活动</span>
  174. <span class="sec-more">全部 ›</span>
  175. </div>
  176. <div class="h-scroll">
  177. <div class="activity-card">
  178. <div class="activity-img" style="background: linear-gradient(135deg,#3b82f6,#6366f1);">
  179. <span class="activity-img-tag green">报名中</span>
  180. </div>
  181. <div class="activity-info">
  182. <div class="activity-name">第三届科技创新创业大赛</div>
  183. <div class="activity-meta">📅 4月15日 14:00</div>
  184. <div class="activity-meta">📍 A座报告厅</div>
  185. </div>
  186. </div>
  187. <div class="activity-card">
  188. <div class="activity-img" style="background: linear-gradient(135deg,#0ea5e9,#3b82f6);">
  189. <span class="activity-img-tag orange">即将开始</span>
  190. </div>
  191. <div class="activity-info">
  192. <div class="activity-name">AI 赋能企业运营专题讲座</div>
  193. <div class="activity-meta">📅 4月18日 10:00</div>
  194. <div class="activity-meta">📍 B座多功能厅</div>
  195. </div>
  196. </div>
  197. <div class="activity-card">
  198. <div class="activity-img" style="background: linear-gradient(135deg,#8b5cf6,#6366f1);">
  199. <span class="activity-img-tag green">报名中</span>
  200. </div>
  201. <div class="activity-info">
  202. <div class="activity-name">政策解读沙龙·高新技术</div>
  203. <div class="activity-meta">📅 4月22日 15:00</div>
  204. <div class="activity-meta">📍 C座会议室</div>
  205. </div>
  206. </div>
  207. </div>
  208. </div>
  209. <!-- ④ Space Showcase -->
  210. <div style="background:#f8fafc; margin-top:4px;">
  211. <div class="sec-header">
  212. <span class="sec-title">园区空间</span>
  213. <span class="sec-more">更多空间 ›</span>
  214. </div>
  215. <div class="spaces-grid">
  216. <div class="space-card">
  217. <div class="space-img" style="background: linear-gradient(135deg,#0ea5e9,#3b82f6);"></div>
  218. <div class="space-info">
  219. <div class="space-name">A栋精装办公室</div>
  220. <div class="space-meta">60㎡ · 3F · 可租</div>
  221. <div class="space-price">¥3,500 / 月</div>
  222. </div>
  223. </div>
  224. <div class="space-card">
  225. <div class="space-img" style="background: linear-gradient(135deg,#8b5cf6,#6366f1);"></div>
  226. <div class="space-info">
  227. <div class="space-name">B栋商业旺铺</div>
  228. <div class="space-meta">120㎡ · 1F · 可租</div>
  229. <div class="space-price">¥8,800 / 月</div>
  230. </div>
  231. </div>
  232. </div>
  233. </div>
  234. <!-- ⑤ Tech Achievements -->
  235. <div style="background:#f8fafc; margin-top:4px;">
  236. <div class="sec-header">
  237. <span class="sec-title">科技成果对接</span>
  238. <span class="sec-more">查看全部 ›</span>
  239. </div>
  240. <div style="background:white; margin: 0 0 4px;">
  241. <div class="achievement-item">
  242. <div class="achievement-icon">🔬</div>
  243. <div class="achievement-info">
  244. <div class="achievement-name">新型纳米材料制备技术</div>
  245. <div class="achievement-org">华南理工大学 · 材料学院</div>
  246. </div>
  247. <span class="achievement-arrow">›</span>
  248. </div>
  249. <div class="achievement-item">
  250. <div class="achievement-icon">💡</div>
  251. <div class="achievement-info">
  252. <div class="achievement-name">智能电网优化调度算法</div>
  253. <div class="achievement-org">中山大学 · 信息学院</div>
  254. </div>
  255. <span class="achievement-arrow">›</span>
  256. </div>
  257. </div>
  258. </div>
  259. <!-- ⑥ Partner CTA -->
  260. <div class="partner-banner">
  261. <div class="partner-text">
  262. <div class="partner-title">🤝 申请成为社区合伙人</div>
  263. <div class="partner-sub">享受园区资源 · 参与社区共建</div>
  264. </div>
  265. <button class="partner-btn">立即申请</button>
  266. </div>
  267. <div style="height: 8px; background: #f8fafc;"></div>
  268. </div><!-- end phone-body -->
  269. <!-- Bottom Nav -->
  270. <div class="bottom-nav">
  271. <div class="nav-item active">
  272. <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#3b82f6" stroke-width="2"><path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
  273. <span class="nav-label-text" style="color:#3b82f6; font-weight:600;">首页</span>
  274. </div>
  275. <div class="nav-item">
  276. <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/></svg>
  277. <span class="nav-label-text">企业服务</span>
  278. </div>
  279. <div class="nav-item">
  280. <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" 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>
  281. <span class="nav-label-text">活动</span>
  282. </div>
  283. <div class="nav-item">
  284. <svg width="22" height="22" 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>
  285. <span class="nav-label-text">会场</span>
  286. </div>
  287. <div class="nav-item">
  288. <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="2"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
  289. <span class="nav-label-text">我的</span>
  290. </div>
  291. </div>
  292. </div><!-- end phone -->
  293. <!-- ANNOTATIONS -->
  294. <div class="annotations">
  295. <div class="anno-title">首页设计说明</div>
  296. <div class="anno-block">
  297. <div class="anno-block-title"><span class="anno-num">①</span> Banner 轮播区</div>
  298. <div class="anno-text">渐变背景 + 几何装饰圆,支持后台配置跳转类型(页面/URL/无)。底部小圆点指示当前第几张。自动轮播间隔 4 秒,支持手动滑动。</div>
  299. <div style="margin-top:6px;"><span class="anno-tag p0">P0</span></div>
  300. </div>
  301. <div class="anno-block">
  302. <div class="anno-block-title"><span class="anno-num">②</span> 快捷入口 8 格</div>
  303. <div class="anno-text">2 行 × 4 列宫格。每个入口有独立彩色渐变背景图标,视觉上形成色彩区分,无需文字颜色标注功能类别。点击分别跳转各功能模块。</div>
  304. <div style="margin-top:6px;"><span class="anno-tag p0">P0</span></div>
  305. </div>
  306. <div class="anno-block">
  307. <div class="anno-block-title"><span class="anno-num">③</span> 近期活动横滑</div>
  308. <div class="anno-text">最多展示近 2 周活动,横向滚动卡片。封面图区域支持纯色渐变占位(后台未上传图片时)。状态标签(报名中/即将开始/已结束)自动根据时间计算。</div>
  309. <div style="margin-top:6px;"><span class="anno-tag p0">P0</span></div>
  310. </div>
  311. <div class="anno-block">
  312. <div class="anno-block-title"><span class="anno-num">④</span> 园区空间展示</div>
  313. <div class="anno-text">2 列卡片展示代表性空间,点击进入场地详情。仅展示 is_available=true 的场地,最多 4 条,余量展示"更多空间"入口。</div>
  314. <div style="margin-top:6px;"><span class="anno-tag p0">P0</span></div>
  315. </div>
  316. <div class="anno-block">
  317. <div class="anno-block-title"><span class="anno-num">⑤</span> 科技成果对接</div>
  318. <div class="anno-text">列表展示最新 2 条 status=published 的成果,点击右箭头进入详情(含联系人电话)。「查看全部」跳转企业服务 → 科技成果子页。</div>
  319. <div style="margin-top:6px;"><span class="anno-tag p0">P0</span></div>
  320. </div>
  321. <div class="anno-block">
  322. <div class="anno-block-title"><span class="anno-num">⑥</span> 社区合伙人 Banner</div>
  323. <div class="anno-text">浅蓝渐变背景,区别于内容区域。用户已是合伙人时此区块隐藏。申请按钮跳转合伙人申请表单(P1 功能)。</div>
  324. <div style="margin-top:6px;"><span class="anno-tag p1">P1</span></div>
  325. </div>
  326. <div class="anno-block" style="border: 1.5px solid #e2e8f0;">
  327. <div class="anno-block-title" style="color:#64748b;">页面数据接口</div>
  328. <div class="anno-text" style="font-size:12px; font-family:monospace; color:#475569; line-height:1.8;">
  329. GET /api/v1/banners<br>
  330. GET /api/v1/home/activities<br>
  331. GET /api/v1/home/spaces/summary<br>
  332. GET /api/v1/home/achievements
  333. </div>
  334. </div>
  335. </div>
  336. </div>
  337. </body>
  338. </html>