Переглянути джерело

fix(接入文档): 收付款接口整组在侧边栏消失 —— 切片没扛住 CRLF

线上「API对接 → 接入文档」里,「收付款接口」那一组是个空 ul —— 接入总则、
付款码支付、二维码支付、H5 支付、订单查询、撤销关单、发起退款、退款查询、
状态与通知、联调与常见问题、门店与订单,11 条一条都没有。

不是缺哪一条,是一个都没渲染出来。

根因:parseBlocks 按 "\n" 切行,而工作区的 md 是 CRLF(本仓 core.autocrlf=true
且无 .gitattributes),每行尾巴留一个 \r;标题正则 /^(#{1,6})\s+(.*)$/ 里
`.` 不匹配 \r、`$` 又没开 m 标志 ⇒ 一行标题都认不出来,BLOCKS 为空,
每一条 take() 都返回 [],于是 collectionSections 成了空对象。

实测读数(2026-09-24,对着线上量的):
- md 1013 个 CR / 1013 个 LF;线上 chunk 里 \r\n 转义序列也正好 1013 个,
  即部署的包里带的就是这份 CRLF
- 线上页面该分组下 ul 的子元素数 = 0
- 用真源码跑切片:原样 0 条;把同一份 md 归一成 LF 后 36 块、11 条全回来
- 修后 11/11,har_endpoints 正文 8878 字符
- 无害对照:LF 形态的 md 同样 11/11(fresh checkout 出来的就是 LF)
- 变异:把 har_endpoints 的两条 parts 改成不存在的标题 ⇒ 10/11,缺的正是它

改法:切行换成 /\r?\n/,两种行尾形态都能用。不去改 md 的行尾 —— 改了也会被
下次 checkout 抹回 CRLF,只有代码里扛住才稳。
alphaH 3 тижнів тому
батько
коміт
da2fd6b12d

+ 7 - 1
frontend/src/views/module_payment/apikey/collectionDoc.ts

@@ -21,7 +21,13 @@ interface Block {
 function parseBlocks(doc: string): Block[] {
   const blocks: Block[] = [];
   let current: Block | null = null;
-  for (const line of doc.split("\n")) {
+  // ★ 必须按 /\r?\n/ 切,不能按 "\n" 切:本仓 core.autocrlf=true 且无 .gitattributes,
+  //   工作区的 md 是 CRLF,按 "\n" 切会给每行尾巴留一个 \r;而下面那个正则里 `.` 不匹配
+  //   \r、`$` 又没开 m 标志 ⇒ **整个文件一行标题都认不出来**,BLOCKS 为空、
+  //   每一条 take() 都返回 []、「收付款接口」整组在侧边栏渲染成一个空 ul。
+  //   2026-09-24 线上实测:md 1013 个 CR、parseBlocks 得 0 块、侧边栏 0 条;
+  //   同一份文件归一成 LF 后 36 块、11 条全回来。改回 "\n" 会让整组文档静默消失。
+  for (const line of doc.split(/\r?\n/)) {
     const m = /^(#{1,6})\s+(.*)$/.exec(line);
     if (m) {
       if (current) blocks.push(current);