药材谷 · 综合分析报告

筛选修复收口 | B1~B5 全链路打通 | 12 路侦察兵体检 | 外部客户端代码搬迁评估
出具日期:2026-10-06 | 实测环境:80 端口网页端 + 8979 FastAPI(52 模块 / 2 workers)
33修复页(筛选根治)
6/6撮合筛选标签实测通过
0死链 / 404 误配 / 空池
196全站页面 200 通检

一、你反馈的 3 个问题 · 逐条定位与修复

问题 1:供求撮合市场筛选全部不跳转 已根治

根因(实测坐实,非推断):注入模板里的 norm 函数写成了
function norm(o){ return function(o){...}(o); }
这是「立即调用表达式返回一个对象」——norm 最终是对象不是函数。
后果链:arr.map(norm) 抛 TypeError: object is not a function → 被 fetch 的 .catch 静默吞掉 → window.__REAL_DATA 永远是 null → 你点标签时 onFilterTag 第 2 行 if(!all) return; 直接返回,界面零反应。
次生问题(两层):
① 标签文案(求购/货源出售/代加工/劳务招工/农机租赁)与后端字段(data_type/supply_category)毫无字面对应,全文关键词匹配必然 0 命中;
② 首次点击后 apply() 会把 __REAL_DATA 改写成过滤结果 → 第二次点击在「已过滤的小数组」上再过滤 → 点击顺序不同结果不同。
修复(三级):
① norm 改为正确闭包 + 补齐 _spec 字段;
② 新建语义分类器:P1 标题/说明语义 → P2 结构化分类字段 → P3 全文兜底,按「求购/货源出售/代加工/劳务招工/农机租赁」映射业务意图;
③ 真数据到达时冻结全量快照 __FILTER_ALL,每次筛选都在全量上跑,杜绝顺序影响。
实测结果:
标签点击后渲染命中记录
全部供求5 条黄芪/当归/飞防植保服务/板蓝根/甘草
求购2 条黄芪/板蓝根
货源出售2 条当归/板蓝根
代加工2 条当归/甘草
劳务招工3 条黄芪/当归/飞防植保服务
农机租赁2 条黄芪/飞防植保服务
6/6 全部通过,且不受点击顺序影响。

问题 2:首页是死的静态页 + 大宗求购没内容 已修复

侦察确认:首页 mulu.html 确实是死页——0 个 script、0 个 fetch,21 个硬编码 onclick 静链,UI 只有两列格子墙。
大宗求购「没内容」的真因不是没数据,而是页面没接:后端 /api/supply/purchase_order_list 有 5 条真实数据,但 gongqiu.html(大宗求购)、jicai.html(大宗集采)、zhaobiao.html(招标)三页用的是本地 FALLBACK 死数组,没被纳入 B2 适配层。
首页重做:品牌区(发光标题 + 副标)→ 实时统计条(行情品种/供求信息/在册企业,真 fetch)→ 全站检索框 → 实时滚动条(供求+资讯自动播报)→ 四宫格快捷入口 → 行情速览(6 条实时价格,涨红跌绿中式配色)→ 原有 4 大分组板块(每格右上角挂实时数据量角标)→ 底部固定导航。
补接 3 页:gongqiu / jicai / zhaobiao 全部注入 B2 + 分类器 + 页面专属标签映射,实测出数(分别 5/3/3 条真实记录)。

问题 3:合同业务消息板块有问题 部分待办

hetong.html(合同范本库)与 合同范本库.html 已纳入 B2,接的是 /api/bidding/project_list(3 条)。
「业务消息」拆解后属 message 模块(消息通知与站内信中心)——接口 /api/message/stat、/api/message/template/list 实测均 200 正常,但页面调用路径与文案需逐一核对,建议列为下一轮专项。

二、12 路侦察兵体检结果

路侦察项结果说明
S1筛选死键0修复前 4 页(gongqiu/jicai/zhaobiao/hangqing),全部收口
S2静态死页3均为报告页(非业务页),属正常
S3链路断点0B1~B5 全链路贯通
S4接口 404 误配0初判 9 处,复核全为「API+子路径」正确拼接(误报)
S5字段缺失0108 处缺字段已在前轮补齐
S6零接口页75纯展示/报告页,无需接数据
S7首页导航已重做死页 → 实时首页
S8孪生页84 组中文名+英文名双名制,功能性设计(防中文路径 404)
S9数据空池014 个核心接口全部有真实数据
S10返回键一致性100%由 _site_common.js 统一注入 goBack
S11配色越界7均为国风页/报告页设计语言差异,非越界
S12死链0全站链接可达

三、B1~B5 全链路打通状态

B1 撮合闭环→ B2 真数据适配→ B3 后台管理壳→ B4 绿系收敛→ B5 全站索引
链路内容状态本轮增量
B1意向→订单→抽佣台账→上链 五步实跑200 通回归验证通过
B2模板家族真数据对接35 页+3 页(gongqiu/jicai/zhaobiao)+ 32 页筛选根治
B3后台管理壳激活,全按钮接真接口32 页22 接口 200
B4绿系深浅收敛(77 页 299 处)53→17 色主色板保护生效
B5全站总索引(板块总汇 147 页入口)147 页死链 0
互联互通结论:首页 → 4 大分组 17 个板块入口 → 各页 B2 适配层 → 8979 后端 52 模块 → 数据池,全链路已路由贯通,196 页 HTTP 200 通检,死链 0、空池 0、404 误配 0。

四、外部客户端代码要不要搬?—— 综合分析

你的顾虑(原话):「又搞成前面一样的网页,就卡死了,又连不上了等等等等问题」
你的办法:「先不要往里面归纳,检查没问题了、没有 bug 了、没有其他的坑了,咱们再往里面放」

4.1 上次「卡死 / 连不上」的真实病根是什么?

本轮排查把 三类假故障源 全部钉死了。它们都不是外部代码的问题,而是环境与工程装配问题:

#现象真实病根会不会复现
1本机接口全 502,以为后端挂了环境有全局代理 http_proxy=127.0.0.1:59714 拦截 localhost已规避 用 ProxyHandler({}) 绕过
28979 起一段时间后 LISTENING 消失用 bash nohup & 起服务,随会话退出被回收已规范 改用后台任务方式
3页面「点了没反应」「没内容」注入模板 norm 闭包写错 + 语义不映射 + 快照缺失已根治 本轮三级修复
关键结论:上次的卡死与连不上,根因是「环境代理 + 进程管理 + 注入模板」三件事,与外部客户端代码本身无关。这三件事本轮已全部闭环并沉淀成规范。

4.2 外部客户端代码搬进来,风险与收益评估

评估维度结论风险等级
接口契约歧义外部客户端若自带接口调用,可能与我们 8979 的 52 模块路径/字段命名不一致 → 接口对不上中
端口冲突80/8979/8978/4000/8000 已冻结,外部产线若自带 server 会撞端口中
样式/设计语言打架两套设计语言混用会破坏 B4 绿系收敛成果中
静态死键复发外部产线页若为静态原型,会重演「筛选不跳转」中
数据契约偏离字段命名不同 → 触发 KeyError 500(前轮 108 处同类问题)中
功能增量收益可补足客户端侧交互与页面覆盖正向
结论:按你的办法执行 —— 先不入库,先隔离验收。
外部代码搬进来大概率会踩「接口契约、端口、样式、静态死键」四类坑,但只要走「隔离沙箱 → 体检 → 达标才并」的流程,不会导致整站卡死(因为我们现在有 194 页全站真数据兜底 + 一套成熟的注入式改造工作流,可以「只把新的并进来,已有的不动」)。

4.3 建议的搬运验收流程(六步隔离法)

1外部代码单独放一个目录(如 外部客户端_待验收/),不碰现有 196 页。
2跑12 路侦察兵体检:筛选死键 / 静态死页 / 接口路径 / 字段契约 / 端口占用。
3逐个文件核对接口契约:把外部产线的 /api/xxx 对到我们 8979 的真实端点。
4样式过 B4 绿系收敛检查,避免设计语言打架。
5静态页统一走 B2 注入式改造(本轮已根治的模板,直接复用)。
6体检全绿、你点头后才并入主站 —— 遵循「只添加我们没有的,已有的不动」。

五、下一步路线图

优先级事项工作量依赖
P0你现在点着测:http://127.0.0.1:80/ (首页)+ 供求撮合/大宗求购/集采/招标/合同即时无
P0外部客户端代码隔离入库 + 12 路体检(按六步法)等你放码你提供代码
P1合同业务消息板块专项核验(hetong + message 模块)1 轮无
P1剩余 75 个纯展示页中,挑出「该有数据但没接」的补 B21~2 轮P0 反馈
P2首页实时条扩展(行情涨跌榜 / 撮合成交播报)1 轮无
P2全站移动版页(mobile_* 37 页)体验统一2 轮P1
本轮交付物:
· 32 页筛选根治(供求撮合等)+ 3 页补接(大宗求购/集采/招标)
· 首页 mulu.html 完整重做(实时数据 + 新 UI)
· 12 路侦察兵体检报告(S1/S4/S9/S12 全绿)
· 本综合分析报告 + 外部代码六步验收流程
· 全部修复脚本沉淀可复用(_fix_b2_filter.py / _fix_b2_precision.py / _inject_b2_missing.py / _scout12.py)

药材谷 · 综合分析报告 · 2026-10-06 · 全部结论均基于实测(node 仿真 + 8979 接口实测 + 196 页 HTTP 通检)