Files
website/.vitepress/theme/components/HomePage.vue
T
Dai0814 9955e830ce
mirror-to-gitee / mirror (push) Successful in 4s
refactor(portal): 对齐 facms.cn 架构,区块顺序归位并撤掉深色块
对比 https://www.facms.cn 后调整三处结构性差异:

1. 顺序归位
   参考站是「产品功能 → 核心能力」,先讲做什么再讲凭什么。
   上一版我把核心能力提到前面并染成深色,属于人为制造差异。
   现在改回:项目 → 产品功能 → 核心能力 → 界面预览。

2. 撤掉深色块
   参考站全程浅色,靠留白与间距分段,没有深色区块打断。
   移除 .p-section--deep 的使用,核心能力回归 p-section--alt 浅灰,
   与前后白底交替,和整站色阶统一。
   (样式定义保留,后续需要强调区块时可用。)

3. 核心能力改标签切换
   参考站核心能力是一条「通用特性」+ 9 个产品分组的标签切换。
   新增 abilityGroups:通用底座 / iotLCM / 秀杰 DTU / XiuAdmin 四组,
   每组 6 项,复用 CapabilityTabs(加 source="home" 与 cols 参数)。
   替代原先 8 张平铺卡片。

4. 产品功能密度对齐
   参考站产品功能 9 张卡各带 6 项功能点。原先我们只有 3 张卡
   (每条产品线一张),信息密度偏低。
   拆成 9 张:卡与库存 / 通道与上游 / 资费与计费 / 组织与账号 /
   生产与研发 / 代理与客户 / 设备接入 / 中后台底座 / 开发效率。

验证
- 构建 13 页,274 条引用 0 失效
- 浏览器实测区块顺序:hero → projects → features → core → preview
  → foundation → how → docs → cta,无 .p-section--deep 残留
- 产品功能 9 卡、核心能力 4 标签每标签 6 卡
- 移动端 390px 无横向溢出
2026-11-04 14:42:35 +08:00

235 lines
8.8 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 { projects } from '../../../data/projects'
import {
stats,
foundations,
productLines,
coreAbilities,
docs,
} 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="#docs">官方文档</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" id="features">
<div class="p-wrap">
<header class="p-head">
<span class="p-eyebrow">PRODUCT FEATURES</span>
<h2 class="p-title">产品功能:一套系统覆盖完整业务</h2>
<p class="p-desc">
iotLCM 管卡、秀杰 DTU 管设备、XiuAdmin 提供中后台底座。按业务域拆开,每一块都在生产环境跑过。
</p>
</header>
<div class="p-grid p-grid--3">
<div v-for="line in productLines" :key="line.id" class="p-card pf-card">
<h3 class="p-card-title pf-name">{{ line.name }}</h3>
<p class="pf-tagline">{{ line.tagline }}</p>
<ul class="pf-list">
<li v-for="f in line.features" :key="f">{{ f }}</li>
</ul>
<a :href="line.page" class="pf-more">功能详情 →</a>
</div>
</div>
</div>
</section>
<!-- 核心能力 -->
<section class="p-section p-section--alt" id="core">
<div class="p-wrap">
<header class="p-head">
<span class="p-eyebrow">CORE CAPABILITIES</span>
<h2 class="p-title">核心能力:凭什么用得稳</h2>
<p class="p-desc">
功能列表谁都能写。这些是真正决定能不能上线、好不好维护的部分。按产品切换查看。
</p>
</header>
<CapabilityTabs source="home" />
</div>
</section>
<!-- 界面预览 -->
<section class="p-section" id="preview">
<div class="p-wrap">
<header class="p-head">
<span class="p-eyebrow">SCREENSHOTS</span>
<h2 class="p-title">界面预览</h2>
<p class="p-desc">
管理端与用户端的实际界面。功能项远不止这些,完整清单见各项目详情页与文档站。
</p>
</header>
<ScreenshotPreview />
</div>
</section>
<!-- 通用能力底座 -->
<section class="p-section p-section--alt">
<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">
<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>
<!-- 官方文档 -->
<section class="p-section p-section--alt" id="docs">
<div class="p-wrap">
<header class="p-head">
<span class="p-eyebrow">DOCUMENTATION</span>
<h2 class="p-title">官方文档</h2>
<p class="p-desc">
使用手册、部署手册与接口合同随平台一起发布,与代码同仓维护。
下面是各册入口,点击直接跳转。
</p>
</header>
<div class="p-grid p-grid--3 doc-grid">
<a
v-for="d in docs"
:key="d.name"
:href="d.url"
class="p-card doc-card"
:target="d.url.startsWith('http') ? '_blank' : undefined"
:rel="d.url.startsWith('http') ? 'noopener' : undefined"
>
<div class="doc-top">
<h3 class="p-card-title">{{ d.name }}</h3>
<svg class="doc-arrow" width="14" height="14" viewBox="0 0 16 16" fill="none" aria-hidden="true">
<path d="M5 11L11 5M11 5H6M11 5v5" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" />
</svg>
</div>
<p class="p-card-text">{{ d.desc }}</p>
<span class="doc-project">{{ d.project }}</span>
</a>
</div>
<p class="doc-note">
文档站地址:<a :href="'http://open.5iot.com:5051/docs/'" target="_blank" rel="noopener">http://open.5iot.com:5051/docs/</a>
</p>
</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>