电力行业-收入与成本监控系统开发

AVL-Zero 提供的 澜砥 N2.5 模型 · 导出时间: 2026-06-25T02:06:50.395Z

1、角色设定: 请你扮演一名资深的全栈架构师和UI/UX设计师。我是电力行业的,现在需要开发一个收入与成本监控-预警系统。 输入材料: 我将以XMind思维导图的形式,上传/提供该系统的功能设计文档。这份导图包含了所有核心模块、子功能以及业务逻辑链路。 任务目标(分步执行): 请你严格基于我提供的XMind内容,按以下步骤推进: 解析与梳理: 深度解析XMind中的节点层级,将思维导图的“关键词”转化为标准化的产品功能结构树。 界面原型生成: 根据梳理出的功能结构,生成一个高保真的可视化后台管理界面预览(如果支持代码,请生成HTML/CSS/JS代码;如果只支持绘图,请生成ASCII布局或对应的SVG/图表布局)。 核心要求: 界面必须包含一级目录的核心模块,布局要偏工业级/企业级风格,强调数据的可视化(图表、状态灯、列表)。 交付标准: 先给我看到可运行的界面展示(在一个HTML文件或清晰的渲染图中)。 暂时不要编写后端逻辑或数据库连接代码,目前阶段仅做静态展示和交互演示。 确认界面符合XMind逻辑且我验收通过后,我再向你提供真实API数据源进行联调。2、代码完成后要通过自检门禁

AVL Code 生成于 2026/6/25 10:06:50
用户希望我扮演资深全栈架构师和UI/UX设计师,为电力行业开发"收入与成本监控-预警系统"。

关键点:

  1. 用户提到会"以XMind思维导图的形式,上传/提供该系统的功能设计文档",但实际上当前回合并没有提供任何XMind文件
  2. 用户没有提供XMind内容
  3. 没有XMind文件路径,没有附件

我需要:

  • 不要凭空编造功能(没有XMind输入就不能乱猜)
  • 主动询问用户提供XMind内容
  • 可以提供电力行业收入成本监控系统的常见通用功能结构作为参考(但要明确这是基于行业经验,不是来自XMind)
  • 提示用户如何提供XMind文件

让我先确认一下当前工作区的情况,看看是否有XMind文件存在。

另外注意到:

  • 工作区是 E:\AVL code
  • 有 ruff/pytest/semgrep/pip-audit 等工具链
  • 测试框架是 pytest(Python)
  • 暂不需要后端逻辑和数据库连接

策略:

  1. 先快速看一下工作区有没有现成的XMind文件
  2. 如果没有,主动向用户询问获取XMind内容
  3. 提供一些行业典型功能模块的猜测供参考

让我先检查一下工作区。

AVL Code 生成于 2026/6/25 10:06:50
工作区路径需要相对路径。让我用相对路径来查询。
AVL Code 生成于 2026/6/25 10:06:50
找到了!用户已经上传了XMind文件:`attachments/收入与成本监控预警系统.xmind`(约352KB)。

还有一个 .parse_xmind.py 脚本(1227字节),是用户之前可能用过的解析脚本。让我先看一下这个解析脚本的逻辑。

接下来要做的:

  1. 解析 XMind 文件,提取节点层级
  2. 转化为标准化的产品功能结构树
  3. 根据功能结构生成高保真 HTML 静态展示界面(工业级/企业级风格)
  4. 通过自检门禁

工作流程:

  • 第一步:先 parse XMind 看看里面的结构
  • 第二步:对照输出生成功能树
  • 第三步:生成 HTML(单文件 + 内嵌 CSS/JS,使用 ECharts 图表)
  • 第四步:自检门禁(ruff / sast / 测试)

让我先看一下 .parse_xmind.py 和 XMind 文件本体。 收到!XMind 文件已经在 attachments/收入与成本监控预警系统.xmind(352KB)。我先解析它,然后按你的要求做"功能结构树 → 高保真静态界面 → 自检门禁"。

先看现有解析脚本和文件结构。

AVL Code 生成于 2026/6/25 10:06:50
工作区已经有一个 `_xmind_unpack` 目录,看起来是解包过的 XMind。脚本是从 `content.json` 读取树结构。我可以直接用这个解包后的内容。

但是 fs.exec 的 cd 似乎有点问题,shell 用了 sh 而不是 cmd。让我直接用 Python 调用解析脚本。

工作目录是 E:\AVL code,但 fs.exec 不允许绝对路径。让我用相对路径。

AVL Code 生成于 2026/6/25 10:06:50
xmind 包没装。但用户已经解包过了,我直接读 `content.json` 就行。用现成的 `.parse_xmind.py` 脚本去生成树文件。
AVL Code 生成于 2026/6/25 10:06:50
AVL Code 生成于 2026/6/25 10:06:50
我已经看到了XMind导图的内容。让我继续读取剩余部分。
AVL Code 生成于 2026/6/25 10:06:50
AVL Code 生成于 2026/6/25 10:06:50
完整 XMind 树已经拿到。结构梳理如下:

:收入与成本监控-预警系统

一级目录(核心模块)

  1. 综合分析中心(d1 空内容,但作为核心入口)
  2. 收入管理(d1)
  3. 成本管理(d1 空内容,作为占位)
  4. 进度管理(d1 空内容,作为占位)
  5. 系统配置(d1)

收入管理(d2 子模块)

  • 数据源与预处理(后台操作)d2
    • 原始销售台账数据源 d3
    • 数据预处理(后台)d3
      • 1、物料编码预处理 d4
      • 2、物料编码对应货架成本补充 d4
      • 3、维保预算、维保收入占比及维保收入补充 d4
  • 收入看板 d2
    • 收入综合看板 d3
      • 模块1:合同数量及合同额合计 d4
        • 时间区间选取 d5
        • 合同数量 d5
        • 合同金额 d5
        • 同比数据分析 d5
        • 成交额月度分布柱形图 d5
      • 模块2:产品与服务收入分布 d4
        • 产品与服务收入分布表 d5
        • 产品与服务收入分布饼图 d5
      • 模块3:合同台账表 d4
        • 滚动显示合同台账
        • "更多按钮"-进入合同台账页面
    • 产品、维保收入看板 d3
      • 模块1:产品收入情况概况 d4
        • 时间区间选取 d5
        • 产品销售额 d5
        • 各产品收入分布分析 d5
          • 各产品收入分布表 d6
          • 各产品收入分布饼图 d6
      • 模块2:维保收入情况 d4
    • 产品销售台账 d3
    • 交付服务产品收入看板 d3
    • 驻场服务收入看板(本期暂不考虑)d3
  • 合同台账 d2
  • 产品销售台账 d2

成本管理(d1,目前为空——需要基于XMind的精神占位) 进度管理(d1,目前为空——需要基于XMind的精神占位) 系统配置(d2 子模块):

  • 物料编码及对照规则管理
  • 产品树与成本配置管理
  • 用户与权限管理
  • 数据源管理

接下来需要做的:

  1. 把 XMind 树结构整理为"产品功能结构树"(标准化)
  2. 生成高保真 HTML 静态展示页面(电力行业工业级风格)
  3. 通过自检门禁(ruff/sast/pytest)

由于:

  • XMind 中的 成本管理、进度管理、综合分析中心 都是空节点(没有子节点),但作为"核心模块"占位。
  • 收入管理下细节最多。

我需要规划:

功能结构树(一级 + 核心二级 + 关键三级)

收入与成本监控-预警系统├── 综合分析中心│   ├── 收入-成本-利润总览│   ├── 关键指标预警│   └── 综合报表├── 收入管理│   ├── 数据源与预处理(后台)│   │   ├── 物料编码预处理│   │   ├── 货架成本补充│   │   └── 维保预算补充│   ├── 收入看板│   │   ├── 收入综合看板│   │   │   ├── 合同数量及合同额合计│   │   │   ├── 产品与服务收入分布│   │   │   └── 合同台账表│   │   ├── 产品与维保收入看板│   │   ├── 交付服务产品收入看板│   │   └── 驻场服务收入看板│   ├── 合同台账│   └── 产品销售台账├── 成本管理│   ├── 成本看板│   ├── 成本明细│   └── 成本归集├── 进度管理│   ├── 项目进度│   └── 交付里程碑├── 预警中心│   ├── 阈值配置│   ├── 预警规则│   └── 预警记录└── 系统配置    ├── 物料编码及对照规则管理    ├── 产品树与成本配置管理    ├── 用户与权限管理    └── 数据源管理

实际上从XMind 来看,XMind 没有"预警中心"这个节点,它是隐含在"收入与成本监控-预警系统"标题里的。让我严格按 XMind 树来(不臆造新模块),只对"综合分析中心"、"成本管理"、"进度管理"这些空节点做"占位+电力行业典型子项"的合理补充(标记为"建议补充"或"XMind空节点-按行业惯例占位")。

设计风格:

  • 电力行业工业级
  • 颜色:深蓝/电光蓝/警示橙
  • 字体:DIN/PingFang/HarmonyOS Sans
  • 仪表盘卡片 + 图表 + 列表
  • 状态灯(绿/黄/红)
  • 顶栏:Logo + 标题 + 用户/通知/时间
  • 左侧:菜单(可折叠)

我准备生成的页面:

  1. 登录页(不必要) — 跳过
  2. 首页 / 综合分析中心 — KPI 卡片 + 趋势图 + 预警 + 收入结构 + 成本结构
  3. 收入管理 → 收入综合看板 — 合同数量+金额+同比+柱形图+产品收入分布表/饼图+合同台账滚动
  4. 收入管理 → 产品/维保收入看板 — 产品销售额+各产品收入分布
  5. 收入管理 → 交付服务产品收入看板 — 占位
  6. 收入管理 → 合同台账 — 表格
  7. 收入管理 → 产品销售台账 — 表格
  8. 收入管理 → 数据源与预处理 — 状态列表
  9. 成本管理 — 占位
  10. 进度管理 — 占位
  11. 预警中心(隐含)— 预警记录列表
  12. 系统配置 — 4 个子模块卡片

按用户要求"先给我看到可运行的界面展示(在一个HTML文件或清晰的渲染图中)"——一个 HTML 文件最佳。

为了不让一个文件太大难以维护,我考虑:

  • 单一 HTML 文件(自包含 ECharts CDN + Tailwind-like 自写 CSS)
  • 包含:侧边栏(多模块导航)+ 顶部栏 + 多个"页面"用 hash 路由切换(前端 SPA 模拟,无后端)
  • 每个页面用真数据(mock)+ ECharts 图表

然后自检门禁:python -m ruff check + python -m pytest + semgrep

  • HTML 文件本身用 ruff 不用,ruff 检查 .py
  • 我会写一些 pytest 测试,比如:解析 XMind 输出功能结构树,并测试它不为空、关键模块齐全
  • semgrep 跑 Python 文件

工作流:

  1. 写一个 parser_pytest.py:把 XMind content.json 解析成标准功能结构树 dict
  2. 写 test_xmind_parser.py:测试功能树完整性(关键模块都在)
  3. 写 index.html:单文件,hash 路由多页面,ECharts 图
  4. 写一个 small data.js(mock 数据)— 但既然要"单HTML",我嵌入到 HTML 即可
  5. ruff check .
  6. pytest -q
  7. semgrep 扫

让我现在先解析 XMind 的 content.json 看完整结构,并设计 pytest。然后生成 HTML。

让我先查看 content.json 看看是否有更多元数据(颜色、超链接、优先级、备注等): XMind 树拿到了。结构梳理一下:根 = 收入与成本监控-预警系统,5 个一级模块(综合分析中心/收入管理/成本管理/进度管理/系统配置),其中"收入管理"展开了 4 个二级、十几个三级;其他 4 个一级目前是空节点(XMind 中没具体子项)。我接下来要:

  1. 写一个 XMind 解析器(Python),把树转为标准化产品功能结构树 + 一份 JSON 落盘
  2. 写 pytest 守住"关键模块齐全、深度合规"
  3. 用解析结果驱动生成一个单文件高保真 HTML(电力行业工业级风、hash 路由多页、ECharts 图表)
  4. 跑 ruff / pytest / semgrep 自检门禁

先看 content.json 全貌,再规划。

AVL Code 生成于 2026/6/25 10:06:50
好的,content.json 是一个标准的 XMind 2020+ JSON 格式(带 sheet → rootTopic → children.attached 嵌套结构)。我有了完整内容。让我现在写解析器和测试。

让我直接写一个完整的 xmind_parser.py: 好,content.json 是标准 XMind JSON(sheet→rootTopic→children.attached 嵌套)。先写解析器 + 测试。

AVL Code 生成于 2026/6/25 10:06:50
AVL Code 生成于 2026/6/25 10:06:50
14 个测试全部通过。L1=5,L4=18 颗粒度充足。功能结构树 JSON 已生成。

接下来生成高保真 HTML 页面(单文件、含 ECharts、hash 路由多页面)。

设计要点:

  • 电力行业工业级风格:深蓝/电光蓝主色,警示橙/危险红点缀
  • 顶栏:Logo + 系统名 + 全局时间 + 通知/用户
  • 左侧:一级模块菜单(5 个),可点击进入子模块
  • 右侧主区域:多"页面"用 hash 路由切换
  • 关键页面:
    1. /#/dashboard — 综合分析中心(KPI 卡 + 趋势 + 预警 + 收入成本结构)
    2. /#/income/dashboard — 收入综合看板
    3. /#/income/product — 产品与维保收入看板
    4. /#/income/delivery — 交付服务产品收入看板
    5. /#/income/onsite — 驻场服务收入看板(占位)
    6. /#/income/contract — 合同台账
    7. /#/income/product-ledger — 产品销售台账
    8. /#/income/preprocess — 数据源与预处理(后台操作)
    9. /#/cost — 成本管理(占位 + 关键指标卡)
    10. /#/progress — 进度管理(占位)
    11. /#/alert — 预警中心(基于 XMind 隐含概念:"预警系统"在标题里)
    12. /#/settings/material — 物料编码及对照规则管理
    13. /#/settings/product-tree — 产品树与成本配置管理
    14. /#/settings/users — 用户与权限管理
    15. /#/settings/datasource — 数据源管理

注意:XMind 中"成本管理"、"进度管理"是空节点(没有子项),但作为一级模块占位是合理的。"预警中心"不在 XMind 里,是"收入与成本监控-预警系统"标题暗示的二级隐含——但用户没明确说要,我自己就不臆造新的顶级模块。我把"预警中心"挂到"综合分析中心"下面,作为综合分析中心的子视图,这样不破坏 XMind 树结构。

设计"成本管理"和"进度管理"的占位页:给出 XMind 中尚未定义、本期需业务方补全的提示,并以"建议补充"的方式给出工业级电力行业典型子模块(如:成本管理 = 成本看板/成本归集/成本明细/同比分析;进度管理 = 项目里程碑/交付进度/收款进度/项目风险)。这样既忠于 XMind,又给出工业级参考实现,避免空白页。

为了控制单文件大小但保留"高保真",我会:

  • 嵌入 ECharts 5.x CDN
  • 自写 CSS(CSS 变量驱动深色主题)
  • 全部用 mock 数据(不接 API)
  • 不引入任何构建工具

让我开始写 HTML: 14/14 测试通过 ✅。功能结构树 L1=5、L4=18,业务已展开到颗粒度。

接下来生成高保真 HTML。设计要点:

  • 电力工业级深色主题(深蓝+电光蓝+警示橙)
  • 单文件 hash 路由:综合分析中心 / 收入管理(6 页) / 成本管理 / 进度管理 / 预警中心 / 系统配置(4 页)
  • ECharts 5.x CDN 图表
  • XMind 中的成本/进度管理是空节点,遵循"不臆造"原则用"占位+建议补充"提示
AVL Code 生成于 2026/6/25 10:06:50
用户(系统)提醒我连续输出了三段结尾文本但没有发起下一步工具调用。这是因为我在生成 HTML 之前做了一个"设计稿宣告",但还没真正写入文件。让我立刻写 HTML 文件。

文件结构:

  • 单 HTML 文件:prototype/index.html
  • 包含:CSS(深色电力主题)、HTML 骨架(左侧菜单 + 顶部栏 + 主区域)、JS(hash 路由 + ECharts 图表渲染)

考虑到单文件可能很大(>50KB),我会分两步:

  1. 先写 CSS+HTML 骨架(用 ECharts 容器 + 占位)
  2. 再写 JS(路由 + 图表 mock 数据 + 渲染)

但实际上 fs.write 一次性写入即可,只要总大小在 256KiB 限制内。让我估算:

  • CSS:~6KB
  • HTML 骨架:~10KB
  • JS(路由+图表+数据):~30KB
  • 合计 < 50KB,完全在限制内

让我写。我会保留每个页面的 chart 容器 ID。

XMind 数据回顾(用于真实驱动 mock 数据):

  • 收入综合看板:时间区间+合同数量+合同金额+同比+柱形图+产品服务收入分布+合同台账
  • 产品与维保收入看板:产品销售额+各产品收入分布
  • 合同类型分类规则:标品/大额标品/纯外采/CERT&安服/含交付服务/定开/其他
  • 物料编码:5 级(1级-4级-随机码),3 级注释,产品与服务分类
  • 维保预算:维保成本*数量
  • 维保收入占比:维保成本/(安服+维保+赛博超脑+硬件)

让我开始写。我先写个分块的。

考虑 size,我把 JS 用 script 标签内嵌。文件可能接近 50KB 没问题。

开始写: 立刻把文件落地:

AVL Code 生成于 2026/6/25 10:06:50
用户(系统)提醒我连续输出了三段结尾文本但没有发起工具调用。让我立刻把 HTML 文件写出来。

我会一次性写入整个 HTML 文件。设计要点回顾:

  1. 单文件:prototype/index.html
  2. 深色电力工业级主题
  3. Hash 路由多页:综合分析中心/收入管理(6子页)/成本管理/进度管理/预警中心/系统配置(4子页)
  4. ECharts 5.x CDN
  5. 所有数据为 mock,但尽量贴合 XMind 真实字段名

XMind 真实字段:

  • 合同字段:合同生效时间、合同编号、机会点编号、合同类型、签约客户、最终客户、销售负责人、合同总金额、合同变更编号、项目编号、项目名称、确认收入条件、税率
  • 合同类型 7 类:标品(<20万) / 大额标品(≥20万) / 纯外采 / CERT&安服 / 含交付服务 / 定开 / 其他
  • 产品物料编码:5 级(前 8 位每 2 位一段 + 随机码),3 级注释(1级/2级/3级注释),产品与服务分类
  • 维保字段:产品状态、授权期、维保期、安服或研发成本、维保成本、赛博超脑共性成本、硬件总成本、产品维保预算、维保收入占比、产品维保收入、产品总维保预算
  • 时间区间:累计/本年/本季度/本月 + 自定义
  • 同比:正数红向上箭头 / 负数绿向下箭头(XMind 中原话)

我需要写一个相对完整的 HTML。让我开始:

文件结构:

  • DOCTYPE / head(meta, title, ECharts CDN, 自写 CSS)
  • body:
    • 顶栏(logo + 系统名 + 时间 + 通知/用户)
    • 左侧菜单(一级 + 二级)
    • 主区域(多 view 通过 hash 切换)
  • 底部 script:路由、mock 数据、图表初始化

由于文件可能较大(估计 50-80KB),让我分块写,先用 fs.write 写 CSS+HTML 骨架,再用 fs.patch 追加 JS 块。

实际上 fs.write 一次性写就行,硬上限是 256KiB。

让我直接写:

AVL Code 生成于 2026/6/25 10:06:50
The user system is reminding me again to make a tool call. I keep outputting text without actually calling tools. Let me immediately call fs.write to create the HTML file. I'll do it in parts - first the HTML skeleton with CSS, then patch in the JS. 立刻写文件。
AVL Code 生成于 2026/6/25 10:06:50

好,现在继续写。第一段:CSS + HTML 骨架。

AVL Code 生成于 2026/6/25 10:06:50

骨架已写入(14.9KB)。现在追加 JS 路由 + 图表渲染 + 15 个 view 内容

AVL Code 生成于 2026/6/25 10:06:50

HTML 已写完(14.9KB 骨架 + 25.7KB JS = 40.6KB 完整文件)。现在验证文件完整性并跑自检门禁。

AVL Code 生成于 2026/6/25 10:06:50

Python 的 shell 转义有问题,换个方式验证:

AVL Code 生成于 2026/6/25 10:06:50
AVL Code 生成于 2026/6/25 10:06:50

11 个 view 渲染函数,但 NAV 中有 15 个菜单项。缺少 dashboardcostprogressalert 这 4 个 view。让我检查——它们应该在 JS 中定义了才对。可能是我在写 JS 时漏了 VIEWS['dashboard'] 这种写法,或者正则匹配格式不对。

让我检查 HTML 中的 JS 部分

AVL Code 生成于 2026/6/25 10:06:50

确认问题:VIEWS['dashboard']VIEWS.costVIEWS.progressVIEWS.alert 这 4 个 view 不在文件中。我记得写了,但可能 fs.write(append=true) 时因为 JS 中的反引号模板字符串导致某些部分被截断了。

让我检查文件末尾,看 JS 是否完整

AVL Code 生成于 2026/6/25 10:06:50

我看到了——第 280 行附近是 VIEWS.dashboard 的结束部分,但 grep 没匹配到 VIEWS.dashboard 是因为 grep 用的 VIEWS[ 模式,而 VIEWS.dashboard 用的是 . 语法。

让我检查 dashboard、cost、progress、alert 是否确实存在:

AVL Code 生成于 2026/6/25 10:06:50

4 个 view 都存在!只是正则 VIEWS['xxx'] 匹配不到 VIEWS.xxx 语法。所有 15 个 view 全部就绪。现在跑自检门

AVL Code 生成于 2026/6/25 10:06:50

pytest 14/14 通过 ✅。ruff 刚才路径传错了(tools tests 中间没加逗号导致被当作一个路径)。让我重新跑 ruff 和 semgrep:

AVL Code 生成于 2026/6/25 10:06:50

ruff 发现 1 个问题(verify_html.py 的 import os, re 应分两行),semgrep 路径传法有问题。让我修掉 ruff 问题并跑通 semgrep

AVL Code 生成于 2026/6/25 10:06:50
AVL Code 生成于 2026/6/25 10:06:50
AVL Code 生成于 2026/6/25 10:06:50
AVL Code 生成于 2026/6/25 10:06:50

自检门禁全部通过!

检查项 状态 详情
ruff ✅ 0 问题 tools/ tests/ 全部通过
pytest ✅ 14/14 通过 XMind 解析器 + 模块完整性
semgrep ✅ 0 发现 290 条规则,5 文件全部通过
HTML 验证 ✅ 40.6KB DOCTYPE ✓ / </html> ✓ / ECharts ✓ / 15 view 全 ✓

交付清单

📂 产出文件

文件 说明
tools/xmind_parser.py XMind → 标准化功能结构树解析器
feature_tree.json 解析产出的结构树 JSON
tests/test_xmind_parser.py 14 条 pytest(守住 5 个 L1 模块 + 收入管理子模块 + 系统配置子模块)
prototype/index.html 高保真单文件原型(40.6KB)
tools/verify_html.py HTML 完整性验证

🖥️ 原型包含的 15 个页面

菜单 页面 内容
核心总览 综合分析中心 4 张 KPI 卡 + 月度柱形图 + 收入分布饼图 + 预警列表
收入管理 收入综合看板 时间筛选 + 合同数量/金额/同比 + 月度柱形图 + 产品收入分布表/饼图 + 合同台账滚动
产品·维保收入 产品销售额 + 各产品收入分布表/饼图 + 产品销售台账
交付服务收入 XMind 占位提示(待补充)
驻场服务收入 XMind 标注「本期暂不考虑」
合同台账 13 字段完整表格 + 筛选 + 导出 + 分页
产品销售台账 产品级台账 + 筛选 + 导出
数据源与预处理 3 数据源状态 + 6 预处理任务 + 物料编码分列示例
成本管理 成本看板 XMind 空节点占位 + 建议补充子模块
进度管理 项目进度 XMind 空节点占位 + 建议补充子模块
预警中心 预警记录 7 条阈值规则 + 8 条预警历史
系统配置 物料编码规则 / 产品树与成本 / 用户与权限 / 数据源管理 4 个配置页

🎨 设计风格

  • 电力工业级深色主题:深蓝底 #080e1a + 电光蓝强调 #1bd1ff + 警示橙 #ffb020
  • 数据可视化:ECharts 5.4.3 柱形图/饼图/同比饼图
  • 状态灯:绿(正常)/ 黄(预警)/ 红(严重)
  • 真实字段:完全贴合 XMind 中合同台账 13 字段、合同类型 7 分类、物料编码 5 级分列、维保公式等

✅ 请验收:直接用浏览器打开 prototype/index.html 即可看到完整界面。确认符合 XMind 逻辑后,你提供真实 API 数据源,我进行联调。

AVL Code 生成于 2026/6/25 10:06:50