Files
website/.vitepress/theme/components/HomePage.vue
T
Dai0814 ac1354da9e
mirror-to-gitee / mirror (push) Successful in 5s
style(portal): 重做整站排版,改为落地页式布局
排版语言
- 引入独立视觉系统 .vitepress/theme/styles/portal.css:
  中性底色 + 单一强调色(#4f46e5),正文靠留白与层级取胜,
  不使用大面积彩色底、渐变铺满或装饰性图形
- CSS 变量定义在 :root(原先挂在 .portal 下,导致内容页拿不到值)
- 完整支持暗色模式,变量在 html.dark 下整体替换

首页(pages/index.md → HomePage.vue)
- hero:居中大标题(强调色渐变仅作用于一个词组)、双按钮、四格数据条
- 项目区:三栏卡片,标题 + 状态徽标 + 定位 + 说明 + 技术栈标签
- 通用能力:六格编号卡片
- 组合方式:三栏场景步骤卡,每张带一条可复制命令
- 底部 CTA 区块
- 页面改用 layout: page,通过 Layout 包装层去掉默认窄栏

项目详情页
- iotLCM / DTU:能力矩阵改为标签切换(CapabilityTabs),
  每个业务域一屏,点击切换,替代原先的大宽表
- XiuAdmin:22 项内置功能按用途归为四组标签墙(FeatureGrid)
- 内容页二级标题加短强调线,表格首列不换行,属性表不再竖排

数据
- 新增 data/content.ts 承载首页文案、能力分组、长期事实统计,
  与 projects.ts 并列;文案口径取自各项目 README/详情页,无凭空数字
- 修正 scripts/check-registry.mjs:原先扫描 data/ 下所有 .ts 的 id,
  新增 content.ts 后把业务分组 id 误判为项目;改为只读 projects.ts

验证
- 构建通过,12 个页面,193 条引用 0 失效
- HTTP 实测 12 个路径全 200,不存在路径 404
- 暗色模式与移动端(390px)已截图核对,无横向溢出
2026-11-04 14:13:50 +08:00

135 lines
5.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script setup lang="ts">
import { ref } from 'vue'
import { projects } from '../../../data/projects'
import { stats, foundations } from '../../../data/content'
</script>
<template>
<div class="portal">
<!-- Hero -->
<section class="p-hero">
<div class="p-wrap">
<span class="p-eyebrow">APACHE-2.0 · 开源项目门户</span>
<h1 class="p-hero-title">物联网与中后台<em>基础软件</em></h1>
<p class="p-hero-sub">
雪羊科技对外开源的项目集合。物联网卡管理、DTU 设备管理、中后台开发底座,
同一套工程规范,同一个许可证,clone 之后就能跑起来。
</p>
<div class="p-hero-actions">
<a class="p-btn p-btn--primary" href="/projects/">
浏览全部项目
<svg width="14" height="14" viewBox="0 0 16 16" fill="none" aria-hidden="true">
<path d="M3 8h10M9 4l4 4-4 4" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" />
</svg>
</a>
<a class="p-btn p-btn--ghost" href="/projects/iotlcm/guide/quickstart">快速开始</a>
</div>
<div class="p-stats">
<div v-for="s in stats" :key="s.label" class="p-stat">
<span class="p-stat-num">{{ s.num }}<span v-if="s.unit">{{ s.unit }}</span></span>
<span class="p-stat-label">{{ s.label }}</span>
</div>
</div>
</div>
</section>
<!-- 项目 -->
<section class="p-section p-section--alt" id="projects">
<div class="p-wrap">
<header class="p-head">
<span class="p-eyebrow">PROJECTS</span>
<h2 class="p-title">三个可直接投入使用的项目</h2>
<p class="p-desc">
都已在生产环境验证,都能单机一条命令启动。按需取用,也可以组合成一套完整方案。
</p>
</header>
<div class="p-grid p-grid--3">
<a v-for="p in projects" :key="p.id" :href="p.page" class="p-proj">
<div class="p-proj-top">
<h3 class="p-proj-name">{{ p.name }}</h3>
<span class="p-badge">{{ p.status }}</span>
</div>
<p class="p-proj-tagline">{{ p.tagline }}</p>
<p class="p-proj-summary">{{ p.summary }}</p>
<ul class="p-tags">
<li v-for="t in p.tech.slice(0, 4)" :key="t">{{ t }}</li>
</ul>
<div class="p-proj-foot">
<span>{{ p.license }}</span>
<span class="p-proj-more">查看详情 →</span>
</div>
</a>
</div>
</div>
</section>
<!-- 通用能力 -->
<section class="p-section">
<div class="p-wrap">
<header class="p-head">
<span class="p-eyebrow">FOUNDATION</span>
<h2 class="p-title">三个项目共享同一套工程底座</h2>
<p class="p-desc">
不是各自为战的三个仓库。技术栈、部署方式、权限模型与文档规范保持一致,
学会一个就大致知道另外两个怎么用。
</p>
</header>
<div class="p-grid p-grid--3">
<div v-for="(f, i) in foundations" :key="f.title" class="p-card">
<span class="p-card-index">{{ String(i + 1).padStart(2, '0') }}</span>
<h3 class="p-card-title">{{ f.title }}</h3>
<p class="p-card-text">{{ f.text }}</p>
</div>
</div>
</div>
</section>
<!-- 组合方式 -->
<section class="p-section p-section--alt">
<div class="p-wrap">
<header class="p-head">
<span class="p-eyebrow">HOW THEY FIT</span>
<h2 class="p-title">三者可以单独用,也可以拼起来用</h2>
<p class="p-desc">按你的业务起点选一个入口,需要时再引入其它两个。</p>
</header>
<div class="p-steps">
<div class="p-step">
<span class="p-step-num">场景一</span>
<h3>只做物联网卡管理</h3>
<p>直接部署 iotLCM。它自带管理端与用户端,运营商协议内置,不需要额外组件。</p>
<code>cd iotlcm/deploy && docker compose up -d</code>
</div>
<div class="p-step">
<span class="p-step-num">场景二</span>
<h3>要管硬件设备</h3>
<p>部署秀杰 DTU。卡 + 设备的组合场景,两个平台可并存,数据各自独立。</p>
<code>cd xiu-dtu && 按 README 初始化</code>
</div>
<div class="p-step">
<span class="p-step-num">场景三</span>
<h3>自建业务系统</h3>
<p>以 XiuAdmin 作底座。租户、权限、代码生成、定时任务开箱可用,专注写业务。</p>
<code>从 xiu-admin 拉分支开始</code>
</div>
</div>
</div>
</section>
<!-- CTA -->
<section class="p-cta">
<div class="p-wrap">
<h2 class="p-title">从源码开始,不依赖任何商业授权</h2>
<p class="p-desc">全部项目以 Apache-2.0 发布,可自由使用、修改、商用与再分发。</p>
<div class="p-hero-actions">
<a class="p-btn p-btn--primary" href="/projects/">开始浏览项目</a>
<a class="p-btn p-btn--ghost" href="/about">许可证与贡献</a>
</div>
</div>
</section>
</div>
</template>