Skip to content

Commit ca05671

Browse files
author
琪亚娜
committed
feat(widget): 侧栏「站点信息」切回真实值(P6-6 收口)—— 六个横杠变真值,断言同步翻转
发起人附侧栏截图:构建平台 / 站点域名 / Astro / Node / pnpm / 构建时间 / 系统信息 全是「—」。 ① 根因不是一个 bug,是一个没关的开关:v1.53 为"站点还没上线"加的占位模式 (sidebarConfig 两处 siteInfo.placeholder: true,值一律渲染成 —,并在卡片底部 挂一行「站点尚未部署,构建信息待上线后自动填充」)。站点 2026-10-12 就上线了, 这个开关一直没人关 —— P6-6 因此挂了一整轮,而旧断言恰恰"要求"那一列是横杠, 所以它一直是绿的。 ② 改法:两处 placeholder → false(右栏 + 移动端底部是两处独立配置,逐字一致); 「构建平台 / 系统信息」加显式配置值 —— 自动识别只会给 Local(非 CI 非 dev)与 构建机的 Windows / x86_64,而这两格问的是站点跑在哪,故配 buildPlatform: "腾讯云 · Nginx"、systemInfo: "Linux / x86_64"; SiteInfo.astro 改成优先取配置、留空才回落自动值;SiteInfoConfig 补两个可选字段。 ③ 断言翻转:verify:ui 的 R-WDG-03 由"钉占位模式(要求提示在 + 值全是 —)"改成 "钉真实值(提示消失 + 不再出现 — + 含域名 + 含配置里的构建平台)",期望平台名 从 sidebarConfig.ts 现场读 → 一条换一条,断言总数仍 343。 ④ 实测:产物 9 项全绿(构建平台 腾讯云 · Nginx / 博客版本 v6.16.8 / 站点域名 imissblog.cn / Astro v7.3.2 / Node v24.16.0 / pnpm v11.22.0 / 构建时间 2026年10月12日 11:38:59 / 系统信息 Linux / x86_64;占位提示与 — 各 0 处;桌面侧栏与移动端底部两处都是真值);已发布到线上并用 HTTPS 复核到 同一串值(index.html 本地与线上同为 369058 字节);check 0 errors / 0 warnings / 0 hints(265 文件)、type-check 退出码 0、build 175 页、线上冒烟 14/14、 verify:docs 15/15。 ⑤ P6 旧账一并结清:P6-1/P6-2/P6-3/P6-4/P6-5 属"早已完成、复选框却没翻", 这次与 P6-6 一起打勾;§2 阶段表 P6 由「⬜ 未开始 约 40%(等 B-01)」改成 「🟡 进行中 约 85%」,整体进度 92.5% → 96.75%;prd 的站点地图行与 R-WDG-03 需求行同步改成"已回填",并写明换域名/换机器期间可临时把开关改回 true。
1 parent 97aab55 commit ca05671

7 files changed

Lines changed: 83 additions & 34 deletions

File tree

‎ARCH.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
| 项目 | 内容 |
44
| --- | --- |
5-
| 文档版本 | v1.116 |
5+
| 文档版本 | v1.117 |
66
| 最后更新 | 2026-10-12 |
77
| 关联文档 | `prd.md`(需求编号 R-xxx 的来源)、`PROJECT_STATUS.md`(阶段与阻塞项) |
88
| 基线代码 | 上游模板基线 v6.16.8(站点信息里中性显示为「博客版本 v6.16.8」),Astro 7.3.2 + Svelte 5 + Swup + Tailwind 4,静态输出 |

‎PROJECT_STATUS.md‎

Lines changed: 15 additions & 13 deletions
Large diffs are not rendered by default.

‎prd.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
| 项目 | 内容 |
44
| --- | --- |
55
| 产品名称 | IMiss Blog |
6-
| 文档版本 | v1.116 |
6+
| 文档版本 | v1.117 |
77
| 最后更新 | 2026-10-12 |
88
| 关联文档 | `ARCH.md`(架构与技术设计)、`PROJECT_STATUS.md`(阶段、进度、下一步、阻塞项) |
99
| 基线代码 | 上游模板基线 v6.16.8(Astro 7 静态站点,名称与出处见 `README.upstream.zh.md`),来源 `D:\HuaweiMoveData\Users\HUAWEI\Desktop\my_-blog\Blog template` |
@@ -93,7 +93,7 @@
9393
| 友链页面 | 删除入口(页面返回 404) | R-NAV-05 |
9494
| 站点统计含 运行时长、最后活动 | 只删这两项,其余保留 | R-WDG-01 |
9595
| 日历含年度热力图 | 日历保留,热力图关闭 | R-WDG-02 |
96-
| 站点信息(构建平台/版本/系统等) | 保留组件,值先占位,部署后回填 | R-WDG-03 |
96+
| 站点信息(构建平台/版本/系统等) | 保留组件,**v1.117 已回填真实值**(占位开关关闭,见 R-WDG-03 状态列) | R-WDG-03 |
9797
| 背景为示例图片 | **已完成**:图片期换过 4 张 → **v1.70 起改成 5 支动态壁纸**(静态图全删) | R-BG-01 / R-BG-02 / R-BG-07 |
9898
| 无桌宠 | 爱弥斯桌宠(9 状态行为 + 交互 + 三档运动模式 + 右键菜单定位与飞行手感 + 「落下去/飘起来」真机落地与语气类帧率下限 + 手机端显示与两档缩放 + 「缩小」档缩成很小一只 + 聊天框「点外面即关」) | R-PET-01 ~ R-PET-14 |
9999
| 无 Agent | 桌宠可对话,由博客专用 Agent 驱动 | R-AGT-01 ~ R-AGT-04 |
@@ -182,7 +182,7 @@
182182
| --- | --- | --- | --- | --- |
183183
| R-WDG-01 | 站点统计精简 | 删除「运行时长」「最后活动」两项;**保留**:文章数、分类数、标签数、总字数 | 站点统计组件只显示 4 行 | ★ |
184184
| R-WDG-02 | 日历保留、热力图关闭 | 日历组件保留,关闭年度热力图 | 侧边栏日历只有月历,没有热力格子 | ★ |
185-
| R-WDG-03 | 站点信息占位 | 组件保留;依赖构建/部署环境的值(构建平台、系统/架构、构建时间、CI 等)统一显示 `—`,并显示一行「部署后自动填充」提示;本地配置值(文章许可)正常显示 | 未部署时组件不显示假数据;`PROJECT_STATUS.md` 里有回填待办 | ★(回填 ◆) |
185+
| R-WDG-03 | 站点信息占位 → **真值回填** | **【未部署期】** 组件保留;依赖构建/部署环境的值(构建平台、系统/架构、构建时间、CI 等)统一显示 `—`,并显示一行「部署后自动填充」提示;本地配置值(文章许可)正常显示。**【v1.117 起,站点已上线】占位模式两处开关全部关闭**,改为显示真值:站点域名 = `imissblog.cn`、Astro / Node / pnpm 版本与构建时间取构建期事实;**构建平台与系统信息改为配置显式给值**(`sidebarConfig.siteInfo.buildPlatform` / `systemInfo`,本站 = `腾讯云 · Nginx` / `Linux / x86_64`)——因为自动识别只会得到 `Local` 与构建机的 `Windows / x86_64`,而这一格问的是站点跑在哪 | 未部署时组件不显示假数据;**已部署:占位提示与「—」都不许再出现,且域名与构建平台必须真回填(`verify:ui` R-WDG-03 钉住,期望值从配置现场读)**;换域名/换机器期间可临时把开关改回 `true` | ★(回填 ◆ → **v1.117 已回填 ✅**) |
186186
| R-WDG-04 | 侧边栏组件清单确认 【假设】 | 保留:用户资料、公告、分类、标签(左);最新动态、站点统计、站点信息、日历、目录(右)。广告位保持关闭。⚠️ **v1.47 / P4-8:音乐播放器曾从清单移出(历史)** —— 本地歌单唯一一首是上游示例曲(见 R-ID-10 ⑤),歌单清空后两个入口开关(`showInNavbar` / `showInSidebar`)都置 `false`,侧栏那一格不再渲染(`sidebarConfig` 里的 `type: "music"` 登记**一直保留**,就是为"发起人加回自己的歌再打开"留的路)。✅ **v1.63 已恢复(当前态)**:发起人 2026-10-07 交来自己的《别难过》并选"两个都开" → `showInNavbar` / `showInSidebar` 均 `true`、`local.playlist` 恰好 1 条(mp3 与封面**原样入库、未转码**),**音乐播放器重新进入左栏清单**(`position: "top"`,排在用户资料、公告之后),导航栏同时也多一个音乐入口按钮 | 侧边栏实际渲染出的组件与上述清单完全一致(桌面双侧栏 + 移动端底部各看一遍);**音乐那一格渲染出的是"有 1 首歌的播放器"(点开有内容),不是空组件框** | ◆ |
187187
| R-WDG-05 | **资料卡签名与社交链接(发起人亲自给定)** 【已实现】(v1.98) | 发起人 2026-10-10 圈着侧栏资料卡那张截图说:「**B-02 签名换成 おかえり,社交链接就是我链接下拉条的前四个**」。落地两处:① `profileConfig.bio` = **「おかえり」**(一字未改);② `profileConfig.links` = 导航「链接」下拉的**前 4 条**(顺序就是他给的顺序:Gitee → GitHub → CSDN → 洛谷;后两条 Boost 搜索引擎 / HTTP 服务器**不进资料卡**),**只显示图标不显示名字**(4 个 40×40 按钮正好一行,名字留在 `aria-label` 里)。⚠️ 两条副作用如实登记:**① 这 4 条同时进 JSON-LD 的 `Person.sameAs`**(`filterAbsoluteLinks()`);**② `bio` 同时是 `Person.description`**(about 页与每篇文章的 `application/ld+json`,见 `src/utils/schema-utils.ts`)→ 结构化数据里作者的 description 现在就是「おかえり」,发起人的选择,保留。⚠️ ~~`profileConfig.name`(`IMiss`)**仍是占位**,**B-02 只剩这一小块**~~ **✅ v1.107 关闭**:发起人给定作者名「**HandlerOne**」→ `profileConfig.name` = `HandlerOne`(站点名 `IMiss Blog` 不改),`about-site.md` 开篇那句同步,**B-02 整条关闭** | `verify:ui` 的 **R-WDG-05** 一条,**两条腿缺一不可**:① **DOM**(取 `facts["home-1440"].profileCard` —— 断言只认桌面那一趟;⚠️ 实测更正:**390 下也采得到**,移动端这张卡同样是展开的:376px 宽、按钮 35×35,不是 0×0)签名逐字 =「おかえり」、`a[rel=me]` **恰好 4 个**(数量也是判据:模板对 `length == 1` 走另一支带名字的宽按钮)、href / aria-label 逐字正确、每个按钮都落在卡片内不溢出、只含图标不含文字;② **配置层交叉核对**:`profileConfig.links` **逐字等于** `navBarConfig.ts`「链接」前 4 条(单一事实来源在导航那份,资料卡是副本 —— 导航一改这条就红,提醒同步) | ★ ✅ |
188188

‎scripts/verify-ui.mjs‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4643,7 +4643,28 @@ async function main() {
46434643
record("R-WDG-01", `站点统计只剩 ${EXPECT_STAT_ROWS} 行`, home.statRows === EXPECT_STAT_ROWS, `实际 ${home.statRows} 行`);
46444644
record("R-WDG-01", "站点统计不含已删文案", EXPECT_ABSENT_STAT_TEXT.every((t) => !(home.statText ?? "").includes(t)), "运行时长/最后活动/天前 均未出现");
46454645
record("R-WDG-02", "日历热力图已关闭", home.heatmapExists === false, `#heatmap-container ${home.heatmapExists ? "仍存在" : "不存在"}`);
4646-
record("R-WDG-03", "站点信息占位模式", (home.infoText ?? "").includes("站点尚未部署") && (home.infoText ?? "").includes("—"), (home.infoText ?? "").slice(0, 80));
4646+
// ⚠️ v1.117(P6-6)翻转:原来这条钉的是**占位模式**("站点尚未部署" + 值全是 "—")。
4647+
// 站点 2026-10-12 已上线(v1.113 换真域名 + HTTPS)→ 就地翻成**真实值断言**:
4648+
// ① 占位提示必须消失;② 值里不许再出现 "—";③ 站点域名必须真回填进这一格;
4649+
// ④ 构建平台那一格必须等于配置里的显式值(期望值**从配置现场读**,不写死 —— 换平台只改配置,
4650+
// 这条会自己跟上,就像 R-ID-03 读 site_url 那样)。
4651+
// 为什么值得钉:占位开关漏关过一次(P6-6 挂了整整一个月没人看见),
4652+
// 而漏关的表现就是"侧栏一堆横杠",正是这条断言现在会立刻报红的东西。
4653+
{
4654+
const sidebarCfg = await fs.readFile(path.resolve("src/config/sidebarConfig.ts"), "utf8");
4655+
const expectPlatform = /buildPlatform:\s*"([^"]+)"/.exec(sidebarCfg)?.[1] ?? "";
4656+
const info = home.infoText ?? "";
4657+
const noPlaceholderHint = !info.includes("站点尚未部署");
4658+
const noDash = !info.includes("—");
4659+
const hasDomain = info.includes("imissblog.cn");
4660+
const hasPlatform = !!expectPlatform && info.includes(expectPlatform);
4661+
record(
4662+
"R-WDG-03",
4663+
"站点信息已切回真实值(占位提示与「—」全消失,域名与构建平台都真回填)",
4664+
noPlaceholderHint && noDash && hasDomain && hasPlatform,
4665+
`提示消失=${noPlaceholderHint}|无「—」=${noDash}|含域名=${hasDomain}|含构建平台「${expectPlatform}」=${hasPlatform}|infoText=${info.slice(0, 120)}`,
4666+
);
4667+
}
46474668
// R-ID-08:许可关闭后侧栏也不该再出现 CC / "None" 这种假值
46484669
record(
46494670
"R-ID-08",

‎src/components/widget/SiteInfo.astro‎

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,18 @@ const buildTime = formatDateI18nWithTime(new Date());
5959
// 构建平台检测(使用 ci-info 自动识别 CI 环境)
6060
const unknownBuildPlatform =
6161
widgetConfig?.specificConfig?.siteInfo?.unknownBuildPlatform || "Unknown CI";
62-
const buildPlatform = detectBuildPlatform({
63-
env: process.env,
64-
isCI: ci.isCI,
65-
ciName: ci.name,
66-
isDev: import.meta.env.DEV,
67-
unknownBuildPlatform,
68-
});
62+
// v1.117(P6-6):本站是自建部署(本地构建 → SSH 上传到腾讯云 Nginx),不在任何 CI 里,
63+
// 自动识别只会得到 "Local" —— 所以优先取配置里的显式值(见 sidebarConfig 的注释)。
64+
const buildPlatformOverride = widgetConfig?.specificConfig?.siteInfo?.buildPlatform;
65+
const buildPlatform =
66+
buildPlatformOverride?.trim() ||
67+
detectBuildPlatform({
68+
env: process.env,
69+
isCI: ci.isCI,
70+
ciName: ci.name,
71+
isDev: import.meta.env.DEV,
72+
unknownBuildPlatform,
73+
});
6974
7075
// 系统信息(平台 + 架构)
7176
const platformMap: Record<string, string> = {
@@ -82,7 +87,11 @@ const archMap: Record<string, string> = {
8287
};
8388
const osName = platformMap[process.platform] || process.platform;
8489
const archName = archMap[process.arch] || process.arch;
85-
const systemInfo = `${osName} / ${archName}`;
90+
// v1.117(P6-6):这一格问的是"站点跑在哪",不是"我在哪台机器上构建" ——
91+
// 自动值是**构建机**(本机是 Windows / x86_64),而站点实际跑在腾讯云的 Ubuntu 上,
92+
// 所以同样优先取配置里的显式值;配置留空时才是构建机口径。
93+
const systemInfoOverride = widgetConfig?.specificConfig?.siteInfo?.systemInfo;
94+
const systemInfo = systemInfoOverride?.trim() || `${osName} / ${archName}`;
8695
8796
// 站点域名(去掉协议前缀)
8897
const siteDomain = siteConfig.site_url

‎src/config/sidebarConfig.ts‎

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,15 @@ export const sidebarLayoutConfig: SidebarLayoutConfig = {
139139
siteInfo: {
140140
// 未能识别的构建平台回退显示文本,可自定义
141141
unknownBuildPlatform: "Unknown CI",
142-
// IMiss Blog(R-WDG-03):站点还没部署,先进入占位模式——
143-
// 构建平台/系统架构/构建时间等一律显示 "—",并提示"部署后自动填充"。
144-
// 部署后改成 false 即可显示真实值(见 PROJECT_STATUS P6-6)
145-
placeholder: true,
142+
// v1.117(P6-6):站点已上线(v1.113 换真域名 + HTTPS),占位模式关闭 → 回填真实值。
143+
// 为什么不用自动识别:自动识别得到的是"本机 Local"或"构建机 Windows",
144+
// 而这一格问的是**站点跑在哪** —— 本站是自建部署(本地构建 → SSH 上传到腾讯云 Nginx),
145+
// 所以显式给真名。换机器/换平台时改这两行即可。
146+
buildPlatform: "腾讯云 · Nginx",
147+
systemInfo: "Linux / x86_64",
148+
// ⚠️ 换域名或换服务器期间可以临时改回 true:那时这两格会显示 "—",
149+
// 避免把上一台机器的信息当成现状展示。
150+
placeholder: false,
146151
},
147152
},
148153
},
@@ -316,9 +321,11 @@ export const sidebarLayoutConfig: SidebarLayoutConfig = {
316321
siteInfo: {
317322
// 未能识别的构建平台回退显示文本,可自定义
318323
unknownBuildPlatform: "Unknown CI",
319-
// IMiss Blog(R-WDG-03):占位模式。这一处属于**移动端底部组件**
320-
// (mobileBottomComponents),与右侧栏那份是两处独立配置,都要改才一致。
321-
placeholder: true,
324+
// v1.117(P6-6):占位模式关闭,与上面右侧栏那份保持**逐字一致**
325+
// (这是 mobileBottomComponents 的第二处独立配置,两处都改才一致)。
326+
buildPlatform: "腾讯云 · Nginx",
327+
systemInfo: "Linux / x86_64",
328+
placeholder: false,
322329
},
323330
},
324331
},

‎src/types/sidebarConfig.ts‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,21 @@ export type DynamicWidgetConfig = {
4949
// 站点信息组件专用配置
5050
export type SiteInfoConfig = {
5151
unknownBuildPlatform?: string; // 未识别的构建平台显示文本,默认 "Unknown CI"
52+
/**
53+
* IMiss Blog 新增(v1.117 / P6-6):部署平台与运行环境的**显式值**。
54+
* 本站是自建部署(本地构建 → SSH 上传到腾讯云 Nginx),既不在 Vercel 也不在任何 CI,
55+
* 自动识别只会得到 "Local",对访客没有意义 —— 所以这两格由配置直接给真名。
56+
* 留空则回落到自动识别(`detectBuildPlatform()` / `process.platform`)。
57+
*/
58+
buildPlatform?: string;
59+
systemInfo?: string;
5260
/**
5361
* IMiss Blog 新增(R-WDG-03):占位模式。
5462
* 站点还没部署,构建平台 / 系统架构 / 构建时间这些值都是本机的临时信息,
5563
* 开着它时这些字段统一显示 "—",并在卡片底部提示"部署后自动填充";
56-
* 本地配置项(文章许可)照常显示。部署后把 siteConfig 的这两处开关改成 false 即可回填真实值。
64+
* 本地配置项(文章许可)照常显示。部署后把 sidebarConfig 的这两处开关改成 false 即可回填真实值。
65+
* ⚠️ v1.117(P6-6):2026-10-12 站点已上线,两处都已改成 false —— 留着这个开关是为了
66+
* 将来换域名/换机器时还能一键退回占位(那时若显示本机信息会让人误以为站点还没上线)。
5767
*/
5868
placeholder?: boolean;
5969
};

0 commit comments

Comments
 (0)