12451 318501d6e7 feat: 全站统一横版锁标(官网页头 + 管理端登录页改用 logo.svg)
## 背景

上一提交把官网页头换成了**方形**品牌图标(favicon.svg)+ 文字 span,
用户指出仓库里本就有**横版带字样**的锁标 —— 确实有:
`logo/纯色横向.svg`(12.4KB)与 `logo/纯色横向@2x.png`(74.7KB)。

**重要发现**:`logo/纯色横向@2x.png` 与 `software/web/public/logo.png`
**是同一个文件**(SHA256 均为 `8E40298E…`、76523 B、3025×829)——
即管理端登录页早就在用这套设计,只是 PNG 拷贝,且我此前没认出来。

## 改动

新增 `logo.svg`(由 `logo/纯色横向.svg` 机械变换,**渲染零差异**):

1. `<style>` 的 class 上色 → 内联 `fill`(14 处);
2. 中文 id(`图层_2`/`图层_1-2`)→ ASCII;`data-name` 元数据删除;
3. 删 `<style>` 与空掉的 `<defs>`;加 `<title>`。

> 该 SVG 的 `<text>` 元素数为 **0** —— "艾动智能"字样**已转为路径**,
> 无字体依赖,任何环境渲染都一致。

落点:

| 位置 | 改动 |
|---|---|
| `deploy/landing/logo.svg` | 新增;官网页头 `<img src="logo.svg">` |
| `deploy/landing/index.html` | 删掉 `<span class="top-name">`(字样已在锁标里,否则重复)及失效的 `.top-name` CSS |
| `software/web/public/logo.svg` | 新增;`Login.tsx` 由 `logo.png` 改指 `logo.svg` |
| `software/web/public/logo.png` | **删除**(全仓已无引用,74.7KB 死文件) |

## 渲染等价验证

resvg 逐像素比对(600×164):**393600 字节零差异**。

## 实测(发布后打真实 URL)

```
200  21.1KB  app.anzhizhichong.com/favicon.svg       (tab 图标,方形变体)
200  12.3KB  app.anzhizhichong.com/logo.svg          (官网页头)
200  12.3KB  app.anzhizhichong.com/pms/logo.svg      (管理端登录页·生产)
200  12.3KB  test.anzhizhichong.com/pms/logo.svg     (管理端登录页·测试)
200  21.1KB  test.anzhizhichong.com/pms/favicon.svg
```
三处 logo.svg 均确认含 `<title>艾动智能</title>` 与 `fill="#0366e6"` 路径。

## 一个差点误判的"异常"

`/pms/logo.png` 返回 **HTTP 200**,一度以为旧文件没删掉。
实测其 `Content-Type` 是 **`text/html`**、0.47KB(内容是 index.html)——
nginx `location /pms/` 配了 `try_files $uri $uri/ /pms/index.html`(SPA 回退),
**任何**不存在路径都返回 200。对照测试:访问一个肯定不存在的
`/pms/definitely-not-exist-xyz.png` 同样 200 + index.html。
服务器目录实测已无 `logo.png`。**是 404 的预期写错了,不是文件没删。**

## 验收

- `npm run typecheck`:exit 0
- `npm run build`:exit 0,产物仅 `logo.svg`(12.3KB,无 logo.png)
- 已发布:生产(web + 官网)、测试(web)
- 生产 0 ERROR、域名 401/200;nginx `nginx -t` 通过后 reload
2026-09-21 01:24:58 +08:00

209 lines
5.5 KiB
HTML
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.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- 全站统一 favicon:与 web 管理端同源(logo/favicon.svg) -->
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<title>艾动智能 — 智能充电柜矩阵系统</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
html, body {
height: 100%;
overflow: hidden;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans SC", sans-serif;
color: #1A1C20;
}
a { color: inherit; text-decoration: none; }
/* ===== 整体布局:上中下三块 ===== */
.layout {
display: flex;
flex-direction: column;
height: 100vh;
}
/* ===== TOP: 顶部导航 ===== */
.top {
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 48px;
z-index: 10;
}
.top-brand { display: flex; align-items: center; gap: 8px; }
.logo {
/* 横版锁标 1511.75x413.59(≈3.65:1):48px 高 ⇒ 约 175px 宽,
锁标内部的"艾动智能"字样约 24px,与页头原有文字观感一致 */
height: 48px;
width: auto;
display: block;
}
.top-links { display: flex; gap: 8px; }
.top-link {
font-size: 13px; font-weight: 500;
color: #4A5060;
padding: 7px 16px;
border-radius: 8px;
transition: all 0.2s;
}
.top-link:hover { background: rgba(37,99,235,0.07); color: #2563EB; }
.top-link--cta { background: #1A1C20; color: #fff; }
.top-link--cta:hover { background: #2D3038; color: #fff; }
/* ===== MID: 中部背景图,填满 ===== */
.mid {
flex: 1;
min-height: 0;
background: url("hero-bg.png") no-repeat right center;
background-size: 100% 100%;
display: flex;
align-items: center;
padding: 0 80px;
}
/* ===== COPY: 文字区域 ===== */
.copy {
max-width: 580px;
display: flex;
flex-direction: column;
gap: 22px;
}
.tag {
display: inline-flex; align-items: center; gap: 7px;
padding: 5px 14px;
border: 1px solid rgba(37,99,235,0.25);
border-radius: 100px;
font-size: 13px; font-weight: 600;
color: #2563EB;
width: fit-content;
}
.tag .dot {
width: 6px; height: 6px;
background: #2563EB;
border-radius: 50%;
}
h1 {
font-size: clamp(40px, 4.5vw, 60px);
font-weight: 900;
line-height: 1.15;
letter-spacing: -0.02em;
color: #1A1C20;
}
h1 .accent { color: #2563EB; }
.subhead {
font-size: clamp(15px, 1.3vw, 18px);
font-weight: 300;
color: #4A5060;
line-height: 1.75;
max-width: 480px;
}
.pills { display: flex; flex-wrap: wrap; gap: 8px; }
.pill {
padding: 5px 12px;
border: 1px solid rgba(0,0,0,0.08);
border-radius: 100px;
font-size: 13px; font-weight: 500;
color: #4A5060;
}
.ctas { display: flex; align-items: center; gap: 12px; margin-top: 4px; }
.btn {
display: inline-flex; align-items: center; gap: 8px;
padding: 13px 28px;
font-size: 15px; font-weight: 600;
border-radius: 10px;
transition: all 0.2s;
}
.btn-primary {
background: #1A1C20; color: #fff;
box-shadow: 0 4px 24px rgba(26,28,32,0.10);
}
.btn-primary:hover { background: #2D3038; transform: translateY(-2px); }
.btn-ghost {
color: #4A5060;
border: 1.5px solid rgba(0,0,0,0.12);
}
.btn-ghost:hover { border-color: #8B92A5; color: #1A1C20; }
.stats {
display: flex; gap: 32px;
padding-top: 14px;
border-top: 1px solid rgba(0,0,0,0.08);
margin-top: 4px;
}
.stat-num { font-size: 28px; font-weight: 700; color: #1A1C20; line-height: 1.2; }
.stat-label { font-size: 12px; font-weight: 500; color: #8B92A5; margin-top: 2px; }
/* ===== BOT: 底部 ICP ===== */
.bot {
flex-shrink: 0;
text-align: center;
padding: 14px;
font-size: 12px;
color: #6B7280;
z-index: 10;
}
.bot a { color: #2563EB; }
.bot a:hover { text-decoration: underline; }
</style>
</head>
<body>
<div class="layout">
<!-- 上:顶部导航 -->
<div class="top">
<div class="top-brand">
<!-- 横版锁标(图标 + "艾动智能"字样,文字已转为路径、无字体依赖)。
与 tab 图标同源:logo/纯色横向.svg → favicon 用其方形变体 -->
<img class="logo" src="logo.svg" alt="艾动智能">
</div>
<div class="top-links">
<a href="/doc/" class="top-link">开发文档</a>
<a href="/pms/" class="top-link top-link--cta">管理后台</a>
</div>
</div>
<!-- 中:背景图填满 -->
<div class="mid">
<div class="copy">
<div class="tag"><span class="dot"></span>智能充电矩阵系统</div>
<h1>为换电场景打造的<br><span class="accent">下一代智能充电</span></h1>
<p class="subhead">36仓独立直流快充,4G远程实时管控,多重安全防护体系。从硬件到云端,全栈自研的智能充电解决方案。</p>
<div class="pills">
<span class="pill">36仓独立</span>
<span class="pill">多重防护</span>
<span class="pill">4G在线</span>
<span class="pill">BMS适配</span>
</div>
<div class="stats">
<div><div class="stat-num">36</div><div class="stat-label">独立仓体</div></div>
<div><div class="stat-num">&lt;0.5s</div><div class="stat-label">指令响应</div></div>
<div><div class="stat-num">8000h</div><div class="stat-label">MTBF</div></div>
<div><div class="stat-num">99%</div><div class="stat-label">可用率</div></div>
</div>
</div>
</div>
<!-- 下:底部 ICP -->
<div class="bot">
© 2026 艾动智能 · <a href="https://beian.miit.gov.cn/" target="_blank">苏ICP备2025198376号-1</a>
</div>
</div>
</body>
</html>