生成时间 2026-09-20 · 依据线上代码 网页服务.py(pm2: evo-api · waitress 127.0.0.1:18091 · nginx 反代 evo.codestack.com.cn)· 本文档随功能更新同步维护,反馈处理上线后回写此处 · 可编辑源文件见本目录 .excalidraw / 系统呈现.md · 返回平台首页

1系统总体架构

本系统当前处于零预设状态:不预置任何业务数据和业务功能。数据库 14 张表全部已建、0 行;现有能力只有「页面骨架 + 反馈通道」。之后每一条反馈就是一个需求,处理上线后在第 7 节更新记录留痕,系统随之生长。

flowchart TB
    subgraph SRC[前端入口]
        HOME["/ 门户首页"]
        PLAN["/plan 回货计划看板
Excel 本地解析 数据不上传"] PMC["/pmc 欠料总表 空态"] ERP["/erp ERP同步 空态"] SUP["/supplier 供应商填报 空态"] ADM["/feedback-admin 反馈汇总"] DOC["/doc 系统呈现 本页"] end subgraph SVC[服务层 Flask 网页服务.py] NG["nginx 反代
X-Real-IP 覆盖防伪造"] WAIT["waitress 127.0.0.1:18091
16线程 仅本机监听 pm2:evo-api"] AUTH["钥匙鉴权 ?k= / X-Access-Key
本机 127.0.0.1 免钥匙"] CRON["定时线程 每日07:30
ERP同步 未部署金蝶模块显式报错"] end subgraph DB[存储 全部已建 当前0行] MAIN[("SQLite 回货计划.db
14张表 零预设")] FILES["/fbfiles 反馈附件"] end subgraph CH[反馈处理通道 本地] POLL[本地轮询 新反馈/追评] TRAE["Trae 助手自动接收
15秒内打进输入框"] DO[评估->修改->部署] REPLY["POST api/feedback/reply 回写"] end HOME & PLAN & PMC & ERP & SUP & ADM & DOC --> WAIT NG --> WAIT AUTH --> WAIT WAIT --> MAIN CRON -.写快照.-> MAIN MAIN --> POLL POLL --> TRAE --> DO --> REPLY --> MAIN MAIN --> FILES

2数据链路(零预设 · 反馈驱动)

五条链路的当前真实状态:A 已上线B 空态C 待对接D 待启用E 已闭环。数据是否接入、功能是否启用,一律由反馈决定,不预先上线。

flowchart TB
    subgraph A["A. /plan 回货计划看板 已上线·数据不上传"]
        A1[用户拖拽 Excel 调货总表] --> A2[xlsx.full.min.js 浏览器本地解析]
        A2 --> A3[("localStorage 持久化
数据仅存本机浏览器")] A3 --> A4[表格渲染/编辑/导出] end subgraph B["B. /pmc 欠料总表 空态"] B1["带钥匙访问 /pmc?k=..."] --> B2["/api/bootstrap 钥匙鉴权"] B2 --> B3[("业务表返回 0 行")] B3 --> B4[前端无数据守卫 空态提示] end subgraph C["C. /erp ERP同步 骨架就绪·待对接"] C1[POST /api/erp/sync] --> C2[金蝶K3Cloud取数模块
独立部署 每日07:30] C2 -.未部署显式报错不静默.-> C3["erp_*快照表 batch隔离"] end subgraph D["D. 供应商协同 骨架就绪·待启用"] D1["/supplier-admin 生成token链接"] --> D2["/supplier 免登录填报 只看自己的行"] D2 --> D3["/api/supplier/save 逐格+批量"] --> D4[("order_rows 回复交期")] end subgraph E["E. 反馈通道 已闭环·唯一需求来源"] E1[任意页面反馈按钮
点选元素+附图] --> E2["POST /api/feedback + /upload"] E2 --> E3[("feedback表")] E3 --> E4["本地轮询->Trae
15秒内自动推送->reply回写"] end

3数据模型(SQLite ER)

14 张表三组分栏:ERP 快照组 / 计划业务组 / 反馈审计组。全部已建、当前 0 行——零预设不预置任何数据;业务表之间用 batch+sup_code 逻辑外键(写入侧保证一致),erp_* 快照表靠 batch 对齐同一时刻口径,历史批次可回溯。

erDiagram
    ERP_SYNC_META ||--|| ERP_SHORTAGE : "batch 快照"
    ERP_SYNC_META ||--|| ERP_INSTOCK : "batch 快照"
    ERP_SYNC_META ||--|| ERP_PO : "batch 快照"
    ERP_SYNC_META ||--|| ERP_PR : "batch 快照"
    ERP_SYNC_META ||--|| ERP_PPBOM : "batch 快照"
    SUPPLIERS ||--o{ ORDER_ROWS : "batch+sup_code"
    CUSTOM_COLS ||--o{ ORDER_ROWS_CUSTOM : "定制列定义"
    PLAN_BUYER ||--o{ ORDER_ROWS : "订单->采购员映射"
    INSTOCK_SEEN ||--o{ INSTOCK_LOG : "bill_no 防重+流水"
    ORDER_ROWS ||--o{ FEEDBACK : "行引用 refs"

    SUPPLIERS["供应商"] {
        text sup_code PK "供应商编码"
        text sup_name "供应商名称"
        text buyer "采购员"
        text token UK "免登录令牌"
        text batch "导入批次"
    }
    ORDER_ROWS["回货订单行"] {
        int id PK "行编号"
        text batch "调货批次"
        text sup_code FK "供应商编码"
        text order_no "订单单号"
        text mat_code "物料编码"
        real qty_need "需求数量"
        real qty_back "已回货数量"
        text reply_date "供应商回复交期"
        text reply_note "回复备注"
    }
    ORDER_ROWS_CUSTOM["订单行存档"] {
        int id PK "行编号"
        text batch "调货批次"
        text sup_name "供应商名称 存档快照"
        text buyer "采购员 存档快照"
    }
    CUSTOM_COLS["定制列定义"] {
        text name PK "定制列名"
        int seq "列显示顺序"
    }
    PLAN_BUYER["订单采购员映射"] {
        text order_no PK "生产订单"
        text buyer "采购员"
        text synced_at "同步时间"
    }
    FEEDBACK["反馈"] {
        int id PK "反馈编号"
        text page "来源页面"
        text refs "引用元素快照"
        text content "反馈内容"
        text reply "处理回复"
        text replied_at "回复时间"
        text files "附件清单"
        text uid "匿名身份 只能看自己的"
        text status "状态 待处理或待审核或开发中或已上线"
        text done_at "上线时间 亮红点提醒"
        text followups "追评记录"
    }
    INSTOCK_SEEN["已扣数入库单"] {
        text bill_no PK "已扣数入库单号"
        text run_at "执行时间"
    }
    INSTOCK_LOG["扣数流水"] {
        int id PK "流水编号"
        text bill_no "入库单"
        text order_no "生产订单"
        text mat_code "物料编码"
        real qty "扣减数量"
        int matched "是否匹配"
        text deduct "扣减明细 可溯源"
    }
    ERP_SHORTAGE["ERP欠料快照"] {
        int id PK "行编号"
        text batch "同步批次"
        text mo_no "生产订单"
        text mo_status "订单状态"
        text sub_code "子项物料"
        real unpicked_qty "未领数量"
        real stock_total "总仓库存"
        real lack_qty "实际欠料"
        real ws_stock "车间仓库存"
        real to_buy "需补充数量"
    }
    ERP_INSTOCK["ERP库存快照"] {
        int id PK "行编号"
        text batch "同步批次"
        text wh_type "总仓或车间仓"
        text mat_code "物料编码"
        real qty "库存数量"
    }
    ERP_PO["ERP采购订单快照"] {
        int id PK "行编号"
        text batch "同步批次"
        text bill_no "采购订单"
        text mat_code "物料编码"
        real remain_qty "剩余入库"
        text delivery_date "交货日期"
    }
    ERP_PR["ERP采购申请快照"] {
        int id PK "行编号"
        text batch "同步批次"
        text bill_no "采购申请"
        real remain_qty "剩余数量"
    }
    ERP_PPBOM["ERP用料清单快照"] {
        int id PK "行编号"
        text batch "同步批次"
        text mo_no "生产订单"
        text ppbom_no "用料清单编号"
        text sub_code "子项物料"
        real unpicked_qty "未领数量"
    }
    ERP_SYNC_META["ERP同步游标"] {
        text key PK "游标键 批次与时间"
        text value "游标值"
    }
  

4反馈闭环与权限审计(泳道)

反馈是本系统唯一的「需求来源」。整条链路自动流转:页面提交 -> 15 秒内自动推送到 AI 助手 -> 评估处理 -> 部署上线 -> 结果回写;反馈人在「我的反馈」直接看到处理结果并可追评。涉及反馈的功能按权限分层:管理端操作需管理钥匙,反馈人凭浏览器匿名身份即可查看自己的反馈。(接口级技术细节见第 2 节数据链路)

flowchart TB
    subgraph U["反馈人"]
        A1["页面点选元素+填写反馈
可附图"] A2["我的反馈面板:免钥匙
状态徽标/回复/追评/上线红点"] end subgraph F["前端反馈组件"] B1["提交反馈+上传附件"] B2["每隔半分钟自动刷新
「我的反馈」处理进度"] B3["提交追评(补充说明)"] end subgraph S["服务端程序"] C1[("反馈台账
待处理/待审核/开发中/已上线")] C2["查全部反馈清单(需钥匙)"] C3["写回复+回复时间(需钥匙)"] C4["改处理状态(需钥匙)"] C5["撤销回复(需钥匙)"] end subgraph T["本地处理通道 AI助手Trae"] D1["自动发现新反馈/追评
(每15秒查一次线上清单)"] D2{"评估
是否适合修改"} D3["开发+部署上线
状态改已上线+记上线时间"] end subgraph G["总管理员 管理后台"] E1["汇总/筛选/搜索/改状态"] E2["回复/取消回复"] end A1 --> B1 --> C1 C1 --> D1 --> D2 D2 -->|适合| D3 --> C3 D2 -->|需审核| E1 --> D3 C3 & C4 & C5 --> C1 C1 --> B2 --> A2 A2 --> B3 --> C1 E2 --> C5 A1 --> S6["附件保存到服务器
专用附件目录"]
环节审计机制
反馈受理自动记录提交时间 + 来源页面 + 你引用的页面元素快照 + 附件清单
状态流转待处理 -> 待审核/开发中 -> 已上线;撤销回复时状态同步回退,不留悬空状态
处理回复回复内容与回复时间成对记录,仅管理钥匙可写,反馈人立即可见
上线提醒「已上线」时记下上线时间,反馈人端据此亮"新上线"红点(历史已完成不误提醒)
追评留痕追评逐条记录内容与时间,管理员的回应显示在上方回复块
匿名身份浏览器自动生成的匿名身份:免钥匙只能看自己的反馈,不能查全表
数据鉴权业务数据接口需带钥匙访问;外层防伪造来源身份,本机直连免钥匙

5当前功能与运行状态

下表如实列出当前全部已上线能力。空态表示页面已就绪但无业务数据——按构建原则,不预置任何数据,等真实业务/反馈接入。

入口能力状态
/门户首页:功能卡片导航、平台时钟、反馈按钮已上线
/pmcPMC 欠料总表:列筛选/搜索/导出骨架空态待数据源接入(由反馈决定)
/plan供应链回货计划看板:拖拽导入 Excel,全程本地解析、数据不上传已上线(数据仅存浏览器本地)
/supplier-admin供应商调货单管理:生成/分发 token 链接、进度查看空态待业务启用
/erpERP 数据同步页 + 定时同步线程(每日 07:30)空态金蝶取数模块未部署,显式报错不静默
/feedback-admin反馈汇总(需管理钥匙):筛选/搜索/状态流转/回复/追评/附件已上线
全部页面反馈浮层:点选元素引用、附图、我的反馈、追评已上线(含自动推送处理)
/doc本页:系统呈现(活文档)已上线

6构建原则:零预设·反馈驱动

本系统与「先设计一堆功能再上线」的传统做法相反:

原则含义
零预设不预置任何业务数据、不上线任何未经反馈确认的功能;页面只有骨架与空态(数据库 14 张表全部 0 行)
反馈即需求每条反馈=一个待评估需求,15 秒内自动进入处理通道,不漏单
上线即留痕每次反馈驱动变更上线后,在第 7 节更新记录补一行,本文档与 4 张 .excalidraw 同步修订
可追溯更新记录每行标注来源反馈编号,反馈人可在「我的反馈」核对处理结果

7更新记录

本文档随功能更新同步维护;反馈处理上线后回写此处。

时间反馈变更
2026-09-20 上午#2「我的反馈」与「处理结果」合并为两页签,回复内联显示;每条反馈新增「追评」按钮
2026-09-20 中午#3反馈自动推送链路上线:线上新反馈/追评 15 秒内自动打进助手输入框并回车
2026-09-20 下午#6链路闭环验证通过(自动接收+处理+回复)
2026-09-20 下午#7附件接收验证通过(图片/文件);确认系统零预设数据;门户页补上反馈按钮
2026-09-20 下午用户指示「系统呈现」上线:架构/功能状态/反馈链路/构建原则/更新记录,作为随反馈生长的活文档
2026-09-20 下午用户指示(参考老项目交付包)按老项目「系统呈现」完整形态补齐:新增数据链路、数据模型 ER、反馈审计泳道三节;上线 4 张 .excalidraw 可编辑图 + 系统呈现.md 源 + 链接.md;文档迁移至 /doc/ 目录(静态文件,改图无需重启服务)
2026-09-20 下午#10网站根目录上线微信业务域名校验文件(b1b4f3ae...a8ea1.txt),微信内访问平台域名不再提示风险
2026-09-20 下午#11本页移动端适配:左侧栏改为顶部粘性横滑导航(窄屏不挤占内容),导航栏内置「反馈」入口(部分手机内核浮动按钮 fixed 失效的兜底),宽表格可横向滚动
2026-09-20 下午#12/plan 看板读取改公开(/api/plan/rows、/api/plan/version 无需钥匙),移除「服务端有数据但无权限」拦截提示——展示范式站点先看再谈;导入/增删行/填值等写操作仍需钥匙
2026-09-20 下午#13本页两处修复:移动端导航改为左上角汉堡按钮弹出左侧抽屉(遮罩/选中即收起);第 2 节数据链路 mermaid 图因 / 开头节点被误解析为图形语法导致整图报错,已加引号修复
2026-09-20 下午#15反馈提醒防静默消费:切走页面再回来/快速划过「我的反馈」时,红点与 NEW 不再被立即记为已读——改为页面可见且面板停留 2.5 秒才记账,提醒必先亮出给用户看到
2026-09-20 下午#16第 4 节「反馈闭环与权限审计」全面去术语化:泳道图与审计表改写为业务白话(提交/刷新/追评/台账/钥匙),不再出现接口路径与英文字段名;接口级技术细节仍保留在第 2 节数据链路
2026-09-20 下午#18第 3 节 ER 图结构化:14 张表全部加中文别名(ERP同步游标/回货订单行/反馈等),所有字段补齐中文说明,注释统一为可读短句,表与表关系线同步中文标注
2026-09-20 下午#19修复「我的反馈」看不到:从供应商 token 链接进入时不再独占查询——token 与浏览器匿名身份合并查询,供应商反馈与访客期反馈都能看到;token 失效时自动退化按浏览器身份查,不再显示空列表
2026-09-20 下午#20/plan 移除空数据警示条:演示站服务端无数据是常态,直接呈现干净的导入界面,不再出现「服务端暂无回货计划数据」防御式提示;仅网络不通或接口故障时才提示
2026-09-20 下午#21修复第 3 节 ER 图渲染报错:上一版在表关系线上用了实体别名写法,页面所用 mermaid 10.9.1 不支持该语法导致整图无法显示;已改为关系线用表名(实体框仍显示中文别名),并经本地 10.9.1 解析器验证通过
2026-09-20 下午#22全部 mermaid 图支持点击放大:点击任意图打开全屏查看器,滚轮/双指捏合自由缩放、拖拽平移、双击复位、Esc 或点遮罩关闭——内容多的图(如 14 张表的 ER 图)可放大看清
2026-09-20 下午#22 追评追评支持粘贴/拖拽/添加图片与文件(全站反馈追评一致,附件与追评一同展示在对话流);管理员回复位置说明:回复显示在同一条反馈卡片内的绿色「已回复」块,位于追评块上方
2026-09-20 下午#23手机端图查看器文字模糊修复:缩放从 CSS transform 改为 SVG viewBox 矢量缩放(手机内核对 transform 缩放的 SVG 先光栅化再放大导致文字糊),任意倍数下文字锐利;查看器同步改浅色底 + 白底图形,双指捏合顺滑、旋转屏幕自动适配
2026-09-20 下午#24图文字模糊二次修复:flowchart 文字从 foreignObject 改为 SVG text 纯矢量渲染(部分手机内核对 foreignObject 缩放仍光栅化,viewBox 也救不回),任何缩放路径文字都锐利;图上加「点击图可放大」角标引导用查看器——页面上直接双指捏合是内核整页位图放大,无法矢量化,请点图放大
2026-09-20 下午#22 追评2管理员回复改为聊天式对话流:回复与追评在同一条卡片内按时间序交错显示(绿色回复块/灰蓝追评块),首条回复与后续往来全部保留、可多轮往复延续;管理员每次回复追加一条消息,撤销只撤最后一条
2026-09-20 下午#25反馈汇总页(/feedback-admin)补齐反馈能力:页面挂上悬浮「反馈」按钮可直接提交反馈与查看「我的反馈」对话流;汇总卡片内完整展示追评对话流——用户追评与管理员回复按时间序交错显示(含追评附件),不再只显示最新一条回复

8图源与再生成

四张图与本文档同源维护:改动本地生成脚本后一键重生成、覆盖上传(静态文件,无需重启服务)。

文件内容
01-总体架构.excalidraw入口 -> 服务 -> 存储 -> 反馈处理通道,底部审计带
02-数据链路.excalidrawA /plan 本地解析;B /pmc 空态;C /erp 待对接;D 供应商待启用;E 反馈闭环
03-数据模型ER.excalidraw14 张表三组分栏:ERP 快照组 / 计划业务组 / 反馈审计组
04-反馈审计泳道.excalidraw5 泳道(反馈人/前端/服务端/Trae/总管理员)+ 7 个审计点
系统呈现.mdMarkdown 源(Mermaid 嵌 md,可贴 wiki)
链接.md文档链接清单与维护方式

维护方式:改本地 系统呈现/_gen_excalidraw.py -> python _gen_excalidraw.py 重生成 -> python _deploy/deploy_doc.py 覆盖上传(无需重启;改动 网页服务.py 才需重启)。excalidraw 文件拖入 excalidraw.com 可二次编辑。