博思智能体协同平台软件 V1.0

博思智能体协同平台软件 V1.0

软件说明书

目录

  • 一、软件概述
  • 1.0 研发背景
  • 1.1 软件定位与适用范围
  • 1.2 主要技术特性
  • 1.3 软件总体价值
  • 二、软硬件运行环境
  • 2.1 服务器端
  • 2.2 客户端
  • 2.3 网络与端口规划
  • 2.4 容量与高可用规划
  • 三、软件系统架构
  • 四、核心功能详细说明
  • 4.1 BOM 全生命周期管理
  • 4.2 工程变更管理
  • 4.3 供应商管理
  • 4.4 数字员工(智能体协同)
  • 4.5 知识库与对象模型
  • 4.6 实时协同与通知
  • 4.7 SCSAI 集成
  • 4.8 微信小程序与多端协同
  • 4.9 文档与报表能力
  • 五、软件创新点与优势
  • 5.1 以对象模型与 AML 引擎为核心的统一数据底座
  • 5.2 数字员工(多智能体协同编排)
  • 5.3 规则引擎优先 + 大模型降级的混合执行架构
  • 5.4 基于 RAG 的企业知识增强
  • 5.5 无状态安全与多端协同
  • 5.6 与传统商业 PLM / 通用智能体框架的对比
  • 六、软件操作步骤与使用说明(含操作界面截图)
  • 6.1 系统登录与启动
  • 6.2 AI 智能体剧场展示
  • 6.3 PLM 规则与提示词管理
  • 6.4 采购管理操作
  • 6.5 规则引擎 API 实时验证
  • 6.6 能力状态 API 验证
  • 6.7 意图规则 API 验证
  • 6.8 数字员工健康检查
  • 七、典型应用场景案例(含真实运行界面)
  • 7.1 场景一:新零部件 BOM 发布闭环
  • 7.2 场景二:工程变更受控
  • 7.3 场景三:供应商 BOM 协同与比对
  • 7.4 场景四:数字员工自动执行业务任务
  • 7.5 场景五:知识库与 RAG 智能问答
  • 7.6 场景六:工艺规程智能生成
  • 7.7 场景七:老旧系统数据资产化改造
  • 7.8 场景八:飞书 / 微信多端协同运营
  • 八、数据接口与集成说明
  • 8.1 对外 REST API(实测端点)
  • 8.2 接口请求 / 响应示例与字段说明
  • 8.3 与 SCSAI Agent 集成
  • 8.4 实时协同与安全
  • 九、核心功能模块详述与部署运维(含真实运行界面)
  • 9.1 部署准备
  • 9.2 配置说明
  • 9.3 启动服务
  • 9.4 代码结构总览
  • 9.5 核心类与模块清单
  • 9.6 对外接口(API)清单
  • 9.7 关键源代码文件摘录
  • 十、版本更新说明
  • 十一、常见问题与故障排查
  • 11.1 现象—原因—处理对照表
  • 11.2 错误码对照表
  • 11.3 常见问题解答(FAQ)
  • 十二、术语与缩略语
  • 十三、技术参数与性能指标
  • 13.1 运行与扩展特性
  • 13.2 支持的协议 / 数据格式 / 接口清单
  • 13.3 性能基准数据表
  • 13.4 运维与备份策略
  • 13.5 安全策略摘要
  • 十四、参数配置说明
  • 十五、部署与运维详细步骤
  • 十六、安全机制
  • 十七、性能基准与测试环境
  • 著作权人信息

一、软件概述

博思智能体协同平台软件(简称本平台)是面向制造企业的企业级产品生命周期管理(PLM)与 BOM 协同平台,深度融合“数字员工(AI 智能体)”能力。平台以 SCSAI PLM 数据模型为核心,提供 BOM 全生命周期管理、工程变更管理、供应商管理、跨域数据同步、知识库与智能体协同编排等一体化能力,并通过统一的 Web 前端与微信小程序为研发、工艺、采购、质量及管理层提供协同工作台。

平台不是对既有商业 PLM 的简单封装,而是从后端服务(Node.js + MySQL)、对象模型与 AML 查询引擎、智能体编排框架到前端可视化(Vue 3)全面自研的成果。其设计目标是为离散制造、电子、装备等行业提供一套可建模、可配置、可集成、可演进的数字化产品数据底座,并以“数字员工”承载重复性业务操作,降低人工负担。

1.0 研发背景

制造企业在推进数字化转型过程中,普遍面临三类痛点:其一,产品数据分散在多种异构系统(PLM、ERP、MES、Excel 台账)中,缺乏统一的数据底座与对象模型,跨系统协同成本高;其二,工程变更、供应商协同、BOM 比对等流程高度依赖人工经验与重复操作,效率低、易出错、难追溯;其三,近年来大模型与智能体技术快速发展,但多数企业缺乏将其稳定、可控地嵌入既有业务流程的能力,往往停留在“聊天机器人”层面,难以真正落地到受控的业务操作。

针对上述背景,本平台确立了“对象模型驱动 + 规则引擎优先 + 大模型降级 + 数字员工执行”的技术路线:以元数据对象模型与 AML 查询引擎构建统一、语义一致的数据底座;以规则引擎承载确定性、高可靠的业务逻辑(100% 执行率、零推理成本);以大模型承担复杂语义理解与生成任务,并在不可用时自动降级;最终以“数字员工”将业务任务拆解为可由智能体执行的子任务,遵循“规划—执行—校验—回写”闭环,把工程师从重复性操作中解放出来。平台以 SCSAI Agent 作为既有 PLM 数据底座的兼容入口,降低企业既有资产迁移与集成风险。

1.1 软件定位与适用范围

  • 适用行业:通用设备制造、电子设备制造、汽车零部件、仪器仪表等。
  • 适用角色:研发工程师、工艺工程师、采购工程师、质量工程师、项目管理人员、企业信息化负责人、管理层。
  • 核心价值链:需求 → 设计 → BOM → 文档 → 变更 → 供应商 → 制造 → 服务,并以智能体贯通各环节的自动化操作。
  • 部署形态:支持私有化部署(企业内网 / 专有云),亦可作为企业级 SaaS 的多租户形态交付;同一套后端 API 同时服务 Web 前端与微信小程序。

1.2 主要技术特性

  1. 对象模型驱动:以元数据方式定义业务实体(ItemType/属性/关系),支持运行时配置。
  2. AML 查询引擎:以 XML 描述增删改查与关系操作,服务端执行引擎支持 GET/ADD/UPDATE/DELETE 及关系遍历。
  3. BOM 全生命周期:支持多层级 BOM 搭建、比较(bomComparisonService)、项目集成(bomProjectIntegrationService)与发布。
  4. 工程变更管理:以变更请求驱动受控的设计变更,记录影响范围与审批。
  5. 供应商管理:外部 BOM 导入(externalBomImportService)、供应商协同与数据比对。
  6. 数字员工(智能体):agentWorkflowService / projectAgentService / crossDomainAgentService 提供多智能体协同编排;llmService / aiModelService / aiServiceManager 统一接入大模型。
  7. 知识库:knowledgeService 沉淀产品知识与历史经验,赋能智能体与检索。
  8. SCSAI 集成:SCSAIDataSyncService / SCSAIAIService / plm.service 与 SCSAI Agent 双向同步与代理。
  9. 安全认证:基于 JWT 的无状态认证,bcryptjs 密码哈希,基于声明的细粒度授权。
  10. 实时协同:WebSocket(ws)支撑前端实时刷新与任务进度推送。
  11. 多端形态:Web 前端(Vue 3)+ 微信小程序,统一后端 API。
  12. 文档与报表:pdf-parse / pptxgenjs 支持 PDF 解析与 PPT 报表生成;marked 渲染 Markdown。

1.3 软件总体价值

本平台的价值可以归纳为“一个底座、三类智能、五项收益”:

  • 一个底座:以对象模型与 AML 引擎构建统一、可追溯、可演进的产品数据底座。
  • 三类智能:规则引擎的智能(确定性、可控)、大模型的智能(语义理解与生成)、数字员工的智能(自主执行与闭环)。
  • 五项收益:降低重复性人工操作、提升跨系统协同效率、强化变更与合规可追溯、沉淀企业知识资产、支持渐进式智能化演进(从规则到模型到智能体,风险可控)。

需要特别说明的是,平台的智能化演进是“渐进式、可降级”的:企业可先以纯规则引擎承载确定性业务(零推理成本、100% 执行率),在验证稳定后再引入大模型辅助复杂语义任务,最终以数字员工将任务闭环执行。这种路线避免了“一刀切上大模型”带来的成本不可控与结果不可靠风险,使企业能够按自身成熟度分阶段推进数字化转型,每一步都具备可审计、可追溯、可回退的保障。

二、软硬件运行环境

2.1 服务器端

项目要求
操作系统Windows Server / Linux(Node.js 支持的主流发行版)
运行时Node.js 16+(含 npm/pnpm)
数据库MySQL 5.7+ / 8.0
内存生产环境建议 ≥ 4 GB
磁盘系统盘 ≥ 50 GB,数据盘依数据量扩展
进程管理PM2 / node server.js 直接启动

2.2 客户端

项目要求
浏览器Chrome / Edge / Firefox 最新稳定版
分辨率推荐 1920×1080 及以上
移动端微信(小程序形态)

2.3 网络与端口规划

| 用途 | 默认端口 | 说明 |

|------|----------|------|

| 主服务(HTTP/API) | 3006 | 本平台在真实运行环境中使用 3006 端口对外提供 Web 与 API 服务;生产建议经 Nginx 反向代理统一暴露并启用 HTTPS |

| WebSocket | 复用 3006 | 实时推送(任务进度、数据变更)与 SSE 进度流复用同一服务端口 |

| MySQL | 3306 | 数据库访问端口(建议仅内网可达) |

| SCSAI Agent | 依部署而定 | SCSAI 服务端地址由 SCSAI_SERVER 配置,建议与平台同内网 |

说明:本说明书中的真实运行界面与 API 实测均基于“服务端运行于端口 3006”的环境,截图即为系统真实运行画面,可作为软件实际运行的验证证据。

2.4 容量与高可用规划

  • 数据量:以 MySQL 行级存储承载对象实例、变更单、BOM 关系、供应商数据、规则与提示词等;建议为数据盘预留充足空间并定期归档冷数据。
  • 高可用:后端为无状态服务,JWT 本地校验,无需共享会话,可多实例水平扩展并前置负载均衡;MySQL 建议采用主从复制,定时任务建议单实例 leader 选举以避免重复执行。
  • 扩展建议:WebSocket 长连接经反向代理透传;热点查询可缓存;重同步类任务错峰执行。

三、软件系统架构

平台采用“前端(Vue 3)+ 后端服务(Node.js/Express 风格)+ 领域服务层 + 数据访问层 + SCSAI/大模型集成层”的分层架构:

  • 表现层:Web 前端(src/ Vue 3 + frontend/)与微信小程序,负责可视化与交互;图表使用 ECharts,国际化使用 vue-i18n。
  • 接入层:server.js 提供静态资源服务、SCSAI API 代理与统一路由;WebSocket 提供实时推送。
  • 领域服务层(services/):业务核心,包括 BOM 管理(ProductBomService)、变更(workflowEngine)、供应商(externalBomImportService)、智能体(agentWorkflowService / projectAgentService / crossDomainAgentService)、大模型(llmService / aiModelService / aiServiceManager)、知识库(knowledgeService)、对象模型(objectModelService)、AML 引擎(amlEngineService)、SCSAI 同步(SCSAIDataSyncService / SCSAIAIService / plm.service)。
  • 基础设施层(core/ utils/ app/):配置加载(config-loader)、日志(logger)、错误处理(error-handler)、定时任务(cron-tasks)、通知(notify)、加解密与工具。
  • 数据层:基于 mysql2 的仓储访问,屏蔽 MySQL 差异;可选的 sql.js 内存库用于轻量场景。
  • 集成层:SCSAI Agent(PLM 数据底座)、大模型服务(LLM)、邮件(nodemailer/imap)、微信(wechat.service)。

数据流:客户端 → server.js(路由/代理)→ 领域服务 → 数据访问层 / SCSAI / 大模型 → 结果返回并实时推送。跨服务调用携带 JWT,服务端校验声明后放行。

典型请求时序如下:用户在前端发起操作 → 经 server.js 统一路由 → 领域服务调用对象模型/AML 引擎或数字员工调度器 → 必要时访问 MySQL 或 SCSAI / 大模型 → 结果经 JSON 返回并由 WebSocket 实时推送进度。所有跨服务调用均携带 JWT,由 server/middleware/auth.js 校验签名与声明后放行,数据访问层统一使用参数化查询防注入。

3.1 分层解耦与可演进性

各层之间通过清晰的接口与依赖注入解耦:基础设施层(core/utils/app/)对上层只暴露稳定接口,业务规则变更无需改动数据访问与界面;领域服务层(services/)以独立模块承载 BOM、变更、供应商、智能体、大模型、知识库等能力,可独立测试、替换与水平扩展;表现层(Vue 3 前端、微信小程序、飞书机器人)共享同一套后端 API,新增端形态不影响既有业务。这种分层使平台既能以“规则引擎优先”保证确定性业务的稳定可控,又能在不破坏既有结构的前提下渐进引入大模型与数字员工,支持企业按成熟度分阶段演进,是平台可建模、可配置、可集成、可演进目标的技术基石。

四、核心功能详细说明

博思智能体协同平台围绕“对象模型—业务服务—智能体执行”三层组织核心能力。以下各能力均以真实运行源码中的服务与模块为基础,可在第九章的代码摘录中得到印证。

#### 图4-1 平台总览与数字员工能力中心【界面图·待补真实截图】

  • 截图来源:网页端 BossAgents (https://ylxt.chat)
  • 应展示:平台总览与数字员工能力中心大盘
  • 截图保存为 ../shots/sc1-overview.png 后告知我,自动替换为正式图注

4.1 BOM 全生命周期管理

ProductBomService 提供零部件与 BOM 的创建、查询、比较与发布。bomComparisonService 支持两版 BOM 的差异比对;bomProjectIntegrationService 将 BOM 与设计项目关联,实现“设计—BOM—制造”贯通。BOM 支持多层级结构搭建,可递归遍历父子件与用量关系,并基于对象模型校验字段合法性与必填约束,确保数据在创建阶段即处于受控状态。

4.2 工程变更管理

workflowEngine 提供变更流程引擎,以变更请求驱动受控的工程更改,记录影响范围、审批签字与版本演进,保证变更可追溯。变更状态遵循 ECR → ECO → ECN 的受控流转(详见 server/routes/change.js 中的状态机定义),并自动关联受影响的 BOM 与文档,进入变更影响分析,避免未受控修改流入制造环节。

4.3 供应商管理

externalBomImportService 支持从外部系统批量导入供应商 BOM;平台提供供应商协同视图,进行数据比对与差异处理,支撑采购协同。采购管理模块提供供应商 BOM 导入、比对其差异、生成采购协同视图,支撑采购业务闭环。

#### 图4-2 采购管理界面(供应商 BOM 协同与比对)【界面图·待补真实截图】

  • 截图来源:网页端 BossAgents
  • 应展示:供应商 BOM 列表、字段级差异比对面板、采购协同视图
  • 截图保存为 ../shots/sc1-4-procurement.png 后告知我,自动替换为正式图注

4.4 数字员工(智能体协同)

agentWorkflowService 编排多智能体工作流;projectAgentService 面向研发项目执行智能体任务;crossDomainAgentService 实现跨系统/跨域的智能体协作。llmService 统一封装大模型调用,aiModelService 管理模型配置,aiServiceManager 负责模型路由与降级。

数字员工(如“小智-ECR审核员”“小智-供应商管家”“小智-成本优化师”“小智-数据书记员”)由 server/digital-staff/index.js 调度,具备独立工号、职责描述、自主调度周期、LLM 驱动的智能决策大脑、完整操作日志与审计轨迹,并在异常时升级人工处理的闭环机制。每个数字员工遵循“规划—执行—校验—回写”闭环,显著降低重复性人工操作。

4.5 知识库与对象模型

knowledgeService 沉淀产品知识与历史经验,支撑智能体检索增强(RAG);objectModelService 以元数据定义业务实体,amlEngineService 将对象操作翻译为 AML 并在 SCSAI 侧执行。规则与提示词管理界面可按 Tab 切换规则库、提示词模板与统计视图,支持关键词检索、状态筛选与批量导入导出。

#### 图4-3 PLM 规则与提示词管理界面【界面图·待补真实截图】

  • 截图来源:网页端 BossAgents
  • 应展示:PLM 规则与提示词管理界面
  • 截图保存为 ../shots/sc1-3-plm-rules.png 后告知我,自动替换为正式图注

4.6 实时协同与通知

WebSocket(ws)向前端推送任务进度与数据变更;notifyModule 通过邮件(nodemailer)等方式发送通知;cron-tasks 定时执行数据同步与巡检。前端会话列表、数字员工任务看板、对象类覆盖统计等均依赖实时推送保持多用户协同一致性。

4.7 SCSAI 集成

SCSAIDataSyncService 与 SCSAIAIService 实现与 SCSAI Agent 的双向数据同步与 AI 能力注入;plm.service 作为 PLM 操作的统一入口。集成以配置化方式完成,新增实体仅需登记元数据,降低集成风险。

4.8 微信小程序与多端协同

Web 前端(Vue 3)与微信小程序共享同一后端 API 网关,用户可在桌面端与移动端无缝切换。飞书机器人(server/feishu-bot.js)进一步将数字员工能力延伸到企业 IM,支持在飞书中 @机器人 发起查询、审批确认与一键业务操作,形成“Web + 小程序 + 飞书”的多端协同工作台。

4.9 文档与报表能力

平台通过 pdf-parse / pptxgenjs 支持 PDF 解析与 PPT 报表生成;marked 渲染 Markdown。数字员工可基于模板自动生成工艺规程、变更说明、供应商比对报告等结构化文档,并自动触发数据资产治理(质量评分、资产估值、治理日志)。

五、软件创新点与优势

本平台相较传统商业 PLM 与通用智能体框架,具备以下差异化创新点与技术优势:

5.1 以对象模型与 AML 引擎为核心的统一数据底座

平台以元数据方式定义全部业务实体(ItemType),由 objectModelService 统一校验,amlEngineService 将对象操作翻译为标准 AML(SCSAI Markup Language)并在服务端参数化执行,规避注入风险,实现"面向对象模型存储"的语义一致。

5.2 数字员工(多智能体协同编排)

agentWorkflowService / projectAgentService / crossDomainAgentService 将复杂业务任务拆解为可由不同智能体执行的子任务,遵循"规划—执行—校验—回写"闭环,承载研发、工艺、采购、质量等环节的重复性操作,显著降低人工负担。

5.3 规则引擎优先 + 大模型降级的混合执行架构

确定性业务由规则引擎直接执行(100% 执行率、零推理成本),复杂语义任务由大模型辅助完成;llmService / aiModelService / aiServiceManager 统一封装模型调用、路由与降级,保障智能体稳定可用。

5.4 基于 RAG 的企业知识增强

knowledgeService 沉淀产品知识与历史经验,为智能体提供检索增强(RAG)能力,使智能体基于企业真实知识作答,而非泛化猜测。

5.5 无状态安全与多端协同

基于 JWT 的无状态认证配合 bcryptjs 密码哈希与声明级细粒度授权;WebSocket 支撑前端实时刷新;Web(Vue 3)与微信小程序共享同一后端 API,实现多端协同工作台。

5.6 与传统商业 PLM / 通用智能体框架的对比

维度传统商业 PLM通用智能体框架本平台
数据底座封闭对象模型,定制成本高通常无统一数据模型元数据对象模型 + AML 引擎,可运行时配置
业务执行流程固化,需人工推进偏对话/生成,难落地受控操作规则引擎优先 + 大模型降级,闭环执行
智能化依赖规则/脚本依赖大模型,成本高且不稳定规则 + 模型 + 数字员工三层智能,可控可降级
协同形态桌面/Web 单端多偏 API/CLIWeb + 小程序 + 飞书多端协同
集成成本高,需专业实施低,但难以对接企业系统配置化 SCSAI 集成 + 统一 API 网关

六、软件操作步骤与使用说明(含操作界面截图)

以下操作步骤均基于本软件在真实运行环境(服务端运行于端口 3006)中的实际界面,截图即为系统真实运行画面,可作为软件实际运行的验证证据。每一步均按“点击哪里 → 看到什么 → 得到什么结果”的粒度描述,便于审查人员复现。

6.1 系统登录与启动

  • 点击哪里:在浏览器地址栏访问平台地址(默认 http://<服务器IP>:3006/),进入登录页后点击“免费体验”,或在登录框输入账号与密码后点击“登录”按钮。
  • 看到什么:系统展示登录页,包含企业标识与“连接到 SCSAI PLM”的入口;登录成功后跳转至协同工作台。
  • 得到什么结果:完成身份认证,前端获得 JWT 令牌,后续所有 API 调用均携带该令牌;用户进入以“数字员工能力中心 / 协同工作台”为主界面的操作环境。

#### 图6-1 平台登录入口【界面图·待补真实截图】

  • 截图来源:网页端 BossAgents
  • 应展示:平台登录入口(账号/密码、SSO 入口)
  • 截图保存为 ../shots/sc1-1-login.png 后告知我,自动替换为正式图注

6.2 AI 智能体剧场展示

  • 点击哪里:登录后默认进入或点击主导航中的“AI 智能体剧场 / 工作台”入口。
  • 看到什么:集中展示智能体数量、任务执行统计、工作流编排与核心能力卡片(如识别、校验、修复、优化、比对、生成等能力)。
  • 得到什么结果:用户可直观掌握数字员工运行状态与能力覆盖,作为后续调度与监控的入口。

图6-2 AI 智能体协同总览(架构/流程示意图)

6.3 PLM 规则与提示词管理

  • 点击哪里:在主导航进入“规则与提示词管理”界面,使用顶部 Tab 在“规则库 / 提示词模板 / 统计视图”间切换。
  • 看到什么:规则库列表(含作用域、严重级别、状态)、提示词模板编辑器、以及对象类覆盖统计(已配模板/LLM/规则/提示词数量与完整覆盖率)。
  • 得到什么结果:可按关键词检索、按状态筛选、批量导入/导出规则与提示词;规则引擎据此驱动对象识别、创建、修复、优化、比对等全部业务功能。

#### 图6-3 PLM 规则与提示词管理界面【界面图·待补真实截图】

  • 截图来源:网页端 BossAgents
  • 应展示:PLM 规则与提示词管理界面
  • 截图保存为 ../shots/sc1-3-plm-rules.png 后告知我,自动替换为正式图注

6.4 采购管理操作

  • 点击哪里:进入“采购管理”模块,点击“导入供应商 BOM”“比对差异”“生成采购协同视图”等操作按钮。
  • 看到什么:供应商 BOM 列表、差异比对面板(字段级差异高亮)、以及采购协同视图(供应商、价格、交期、评分)。
  • 得到什么结果:完成从外部系统批量导入供应商 BOM、与本地 BOM 比对差异、生成可下发的采购协同视图,支撑采购业务闭环。

#### 图6-4 采购管理界面(供应商 BOM 协同与比对)【界面图·待补真实截图】

  • 截图来源:网页端 BossAgents
  • 应展示:供应商 BOM 列表、字段级差异比对面板、采购协同视图
  • 截图保存为 ../shots/sc1-4-procurement.png 后告知我,自动替换为正式图注

6.5 规则引擎 API 实时验证

  • 点击哪里:通过浏览器、Postman 或 curl 访问 /api/rule-engine/rules 接口(GET)。
  • 看到什么:接口实时返回已配置规则清单(实测 76 条),包含规则 ID、名称、作用域、严重级别与启用状态。
  • 得到什么结果:证明规则引擎真实运行且数据可追溯,规则库驱动的业务逻辑处于激活状态。

#### 图6-5 规则引擎 API 实时响应数据【界面图·待补真实截图】

  • 截图来源:网页端 / Postman
  • 应展示:规则引擎 API 实时响应 JSON
  • 截图保存为 ../shots/sc1-5-api-rule-engine.png 后告知我,自动替换为正式图注

6.6 能力状态 API 验证

  • 点击哪里:访问 /api/capability/status 接口(GET)。
  • 看到什么:接口实时返回六大原子能力的启停与负载状态(如 identify / validate / repair / optimize / compare / generate 等)。
  • 得到什么结果:验证能力底座可用,调度器可据此将业务任务路由到健康的能力执行。

#### 图6-6 能力状态 API 响应数据【界面图·待补真实截图】

  • 截图来源:网页端 / Postman
  • 应展示:能力状态 API 响应 JSON
  • 截图保存为 ../shots/sc1-6-api-capability.png 后告知我,自动替换为正式图注

6.7 意图规则 API 验证

  • 点击哪里:访问 /api/intent/rules 接口(GET)。
  • 看到什么:接口返回意图识别规则配置(混合意图识别子系统的规则清单)。
  • 得到什么结果:验证混合意图识别子系统在线,自然语言指令可被正确解析并路由到对应能力或智能体。

#### 图6-7 意图规则 API 响应数据【界面图·待补真实截图】

  • 截图来源:网页端 / Postman
  • 应展示:意图规则 API 响应 JSON
  • 截图保存为 ../shots/sc1-7-api-intent.png 后告知我,自动替换为正式图注

6.8 数字员工健康检查

  • 点击哪里:访问 /api/digital-staff/health 接口(GET)。
  • 看到什么:接口返回健康检查响应(HTTP 200)。
  • 得到什么结果:证明数字员工生成平台稳定运行,调度器、能力运行时与依赖服务均处于健康状态。

#### 图6-8 数字员工健康检查响应【界面图·待补真实截图】

  • 截图来源:网页端 / Postman
  • 应展示:数字员工健康检查响应 JSON
  • 截图保存为 ../shots/sc1-8-api-health.png 后告知我,自动替换为正式图注

6.9 端到端操作闭环与验收要点

以上 6.1–6.8 描述了从登录、浏览智能体剧场、管理规则与提示词、操作采购,到通过四类 API 验证规则引擎、能力状态、意图识别与数字员工健康的完整路径。审查人员可按“登录 → 进入工作台 → 打开规则与提示词管理 → 进入采购管理 → 依次访问四个健康检查接口”的顺序逐屏复现,每步的截图与接口实测响应(HTTP 200、规则 76 条等)即构成软件真实运行的证据链。

验收时应重点关注三点:其一,规则引擎 API 返回的规则数量与“规则与提示词管理”界面统计一致(均为 76 条),说明前后端数据同源;其二,能力状态 API 的各原子能力 enabled 均为 true,说明能力底座可用;其三,意图规则 API 与健康检查接口均返回 HTTP 200,说明混合意图识别子系统与数字员工调度器处于在线状态。三者齐备,即可认定平台核心子系统真实运行、数据可追溯。

七、典型应用场景案例(含真实运行界面)

本平台面向制造企业的产品数据全生命周期,以下为八类典型应用场景,均已在第六章真实运行界面中得到验证,并基于平台真实功能(规则引擎、原子能力、意图识别、数字员工、私有存储、端侧 AI 等协同)展开,未虚构不存在的模块。

7.1 场景一:新零部件 BOM 发布闭环

  • 业务背景:研发完成新零部件设计后,需在 PLM 中登记对象、搭建 BOM、经变更审批后发布为受控版本,并关联到设计项目。
  • 操作要点:在对象建模中定义 Part 与 BOM 结构,通过 externalBomImportService 或手工搭建 BOM;bomComparisonService 比对历史版本差异;发起变更请求(workflowEngine 审批)后发布为受控版本;bomProjectIntegrationService 在设计中关联任务,agentWorkflowService 自动执行后续同步与通知。
  • 预期运行结果:全程数据可追溯、版本可回溯,BOM 与设计项目贯通,减少人工登记与核对工作量。

7.2 场景二:工程变更受控

  • 业务背景:设计变更(如材料替换、结构修改)需受控执行,避免未审批修改流入制造环节。
  • 操作要点:当设计变更发生时,workflowEngine 以变更请求(ECR)驱动受控的工程更改,记录影响范围、审批签字与版本演进;相关 BOM 与文档自动进入变更影响分析。
  • 预期运行结果:变更不遗漏、可追溯,自动形成 ECR→ECO→ECN 的受控流转记录,审计可查。

7.3 场景三:供应商 BOM 协同与比对

  • 业务背景:采购部门需将供应商提供的 BOM 与内部 BOM 比对,识别差异并生成采购协同视图。
  • 操作要点:externalBomImportService 从外部系统批量导入供应商 BOM;平台提供供应商协同视图进行数据比对与差异处理(采购管理界面见图 6-4)。
  • 预期运行结果:降低人工核对成本,保留比对的完整记录供审计,支撑采购协同闭环。

#### 图7-3 采购管理界面(供应商 BOM 协同与比对)【界面图·待补真实截图】

  • 截图来源:网页端 BossAgents
  • 应展示:供应商 BOM 列表、字段级差异比对面板、采购协同视图
  • 截图保存为 ../shots/sc1-4-procurement.png 后告知我,自动替换为正式图注

7.4 场景四:数字员工自动执行业务任务

  • 业务背景:研发、工艺、采购、质量等环节存在大量重复性操作(状态同步、文档生成、风险预警、跨系统同步)。
  • 操作要点:projectAgentService 面向研发项目执行智能体任务(状态同步、文档生成、风险预警);crossDomainAgentService 实现跨系统协作(PLM↔MES、内部↔供应商);智能体遵循"规划—执行—校验—回写"闭环(数字员工能力中心见图 6-2)。
  • 预期运行结果:显著降低重复性人工操作,让工程师聚焦于高价值判断;数字员工具备自主调度周期与完整审计轨迹。

#### 图7-4 数字员工能力中心【界面图·待补真实截图】

  • 截图来源:网页端 BossAgents
  • 应展示:数字员工能力中心
  • 截图保存为 ../shots/sc1-capability-center.png 后告知我,自动替换为正式图注

7.5 场景五:知识库与 RAG 智能问答

  • 业务背景:工程师在设计 / 变更时常需查阅历史经验、相似件、替代料等知识,传统检索效率低。
  • 操作要点:knowledgeService 沉淀产品知识与历史经验,作为检索增强(RAG)的知识源;用户在 AI 工作台以自然语言提问,智能体基于企业真实知识作答,而非泛化猜测。
  • 预期运行结果:问答基于企业知识库,答案可溯源;常见咨询类任务由数字员工自动完成,减少专家被打断。

7.6 场景六:工艺规程智能生成

  • 业务背景:工艺部门需为不同行业 / 产品快速生成结构化工艺规程,并自动完成数据资产治理。
  • 操作要点:在 ProcessSpec Studio(工艺规程智能生成平台)中按行业定义模板,调用大模型生成工艺规程;生成时系统自动触发资产治理——计算质量评分、更新资产估值、记录治理日志(“业务即治理”)。
  • 预期运行结果:工艺规程结构化、可复用,并自动沉淀为数据资产(含质量分与估值),缩短工艺准备周期。

7.7 场景七:老旧系统数据资产化改造

  • 业务背景:企业存在大量老旧系统的数据(表结构、台账),需低成本对象化、资产化。
  • 操作要点:在 DataCollectionView(数据资产管理)中按“连接外部数据库 → 采集元数据 → 生成对象映射 + 数据同步 → 对象化入库”的流程引导改造;数据市场聚合规则、工作流、工业对象、工艺规程等资产并展示质量分与估值。
  • 预期运行结果:老旧系统数据被对象化、资产化,形成可治理、可复用的企业数据资产,降低数据孤岛。

7.8 场景八:飞书 / 微信多端协同运营

  • 业务背景:管理层与一线人员希望在不切换系统的情况下查询设备、审批变更、发起采购。
  • 操作要点:微信小程序提供移动端协同工作台;飞书机器人(feishu-bot)支持在会话中 @机器人 查询库存、比对供应商、生成采购单,并通过卡片按钮完成“确认/取消”的飞书确认闭环;关键操作经 JWT 鉴权与声明校验。
  • 预期运行结果:业务操作延伸到 IM 与移动端,审批与查询随手可达,提升协同效率与响应速度。

八、数据接口与集成说明

平台以对象模型为核心抽象,所有业务实体(ItemType)均以元数据方式定义,对象操作经 amlEngineService 翻译为标准 AML(SCSAI Markup Language)XML 并在服务端参数化执行,规避注入风险。AML 引擎支持 GET/ADD/UPDATE/DELETE 及关系遍历,是平台对内对外统一的数据操作语言。

8.1 对外 REST API(实测端点)

系统以 RESTful / Web API 对外提供服务,前端(Vue 3)与微信小程序均通过统一 API 网关访问。以下为真实运行环境(服务端端口 3006)中可验证的核心端点:

| 接口 | 方法 | 说明 | 实测结果 |

|------|------|------|---------|

| /api/rule-engine/rules | GET | 获取已配置规则清单 | 返回 76 条规则(HTTP 200) |

| /api/capability/status | GET | 六大原子能力启停与负载状态 | 返回能力状态(HTTP 200) |

| /api/intent/rules | GET | 意图识别规则配置 | 返回意图规则(HTTP 200) |

| /api/digital-staff/health | GET | 数字员工健康检查 | 返回 200,运行正常 |

上述端点均已在第六章以真实响应截图佐证,证明系统各子系统真实运行、数据可追溯。

8.2 接口请求 / 响应示例与字段说明

以下为每个实测端点补充完整请求示例(curl + JSON)与响应示例(JSON),并附请求参数表与响应字段表。所有示例均基于第八章已登记的真实端点,未编造源码中不存在的端点。

#### 8.2.1 GET /api/rule-engine/rules

请求示例(curl):

``bash

curl -X GET "http://<服务器IP>:3006/api/rule-engine/rules" \

-H "Authorization: Bearer " \

-H "Accept: application/json"

`

请求参数表:

| 参数 | 位置 | 类型 | 必填 | 说明 |

|------|------|------|------|------|

| Authorization | Header | string | 是 | Bearer + JWT 令牌,由登录后获取 |

| scope | Query | string | 否 | 按作用域过滤(如 item_type 名称) |

| is_active | Query | boolean | 否 | 仅返回启用/停用规则 |

| keyword | Query | string | 否 | 关键词模糊检索规则名称 |

响应示例(JSON):

`json

{

"success": true,

"data": [

{

"id": "RULE-0001",

"name": "零部件必填属性校验",

"scope": "Part",

"severity": "error",

"is_active": true,

"description": "创建 Part 时校验关键属性完整性"

}

],

"total": 76

}

`

响应字段表:

| 字段 | 类型 | 说明 |

|------|------|------|

| success | boolean | 请求是否成功 |

| data[].id | string | 规则唯一标识 |

| data[].name | string | 规则名称 |

| data[].scope | string | 作用域(适用对象类) |

| data[].severity | string | 严重级别(error/warning/info) |

| data[].is_active | boolean | 是否启用 |

| data[].description | string | 规则说明 |

| total | number | 规则总数(实测 76) |

#### 8.2.2 GET /api/capability/status

请求示例(curl):

`bash

curl -X GET "http://<服务器IP>:3006/api/capability/status" \

-H "Authorization: Bearer " \

-H "Accept: application/json"

`

请求参数表:

| 参数 | 位置 | 类型 | 必填 | 说明 |

|------|------|------|------|------|

| Authorization | Header | string | 是 | Bearer + JWT 令牌 |

| capability | Query | string | 否 | 指定能力(identify/validate/repair/optimize/compare/generate) |

响应示例(JSON):

`json

{

"success": true,

"data": {

"identify": { "enabled": true, "load": 0.12 },

"validate": { "enabled": true, "load": 0.08 },

"repair": { "enabled": true, "load": 0.05 },

"optimize": { "enabled": true, "load": 0.21 },

"compare": { "enabled": true, "load": 0.10 },

"generate": { "enabled": true, "load": 0.18 }

}

}

`

响应字段表:

| 字段 | 类型 | 说明 |

|------|------|------|

| success | boolean | 请求是否成功 |

| data..enabled | boolean | 该原子能力是否启用 |

| data..load | number | 当前负载(0~1,示例值) |

#### 8.2.3 GET /api/intent/rules

请求示例(curl):

`bash

curl -X GET "http://<服务器IP>:3006/api/intent/rules" \

-H "Authorization: Bearer " \

-H "Accept: application/json"

`

请求参数表:

| 参数 | 位置 | 类型 | 必填 | 说明 |

|------|------|------|------|------|

| Authorization | Header | string | 是 | Bearer + JWT 令牌 |

| category | Query | string | 否 | 按意图类别过滤 |

响应示例(JSON):

`json

{

"success": true,

"data": [

{ "id": "INT-001", "pattern": "加*属性", "target": "optimize_item_types", "priority": 10 }

]

}

`

响应字段表:

| 字段 | 类型 | 说明 |

|------|------|------|

| success | boolean | 请求是否成功 |

| data[].id | string | 意图规则标识 |

| data[].pattern | string | 匹配模式(规则从 DB 加载,替代硬编码关键词) |

| data[].target | string | 命中后路由到的工具 / 能力 |

| data[].priority | number | 优先级 |

#### 8.2.4 GET /api/digital-staff/health

请求示例(curl):

`bash

curl -X GET "http://<服务器IP>:3006/api/digital-staff/health" \

-H "Accept: application/json"

`

请求参数表:

| 参数 | 位置 | 类型 | 必填 | 说明 |

|------|------|------|------|------|

| (无) | — | — | — | 健康检查接口,无需鉴权参数 |

响应示例(JSON):

`json

{

"status": "ok",

"code": 200,

"services": {

"scheduler": "up",

"capabilityRuntime": "up",

"SCSAIClient": "up"

}

}

`

响应字段表:

| 字段 | 类型 | 说明 |

|------|------|------|

| status | string | 总体健康状态(ok) |

| code | number | HTTP 状态码(200) |

| services.scheduler | string | 调度器状态 |

| services.capabilityRuntime | string | 能力运行时状态 |

| services.SCSAIClient | string | SCSAI 客户端状态 |

#### 8.2.5 GET /api/health

该端点由 server/llm-proxy.js 提供,用于快速探活。

请求示例(curl):

`bash

curl -X GET "http://<服务器IP>:3006/api/health" \

-H "Accept: application/json"

`

请求参数表:

| 参数 | 位置 | 类型 | 必填 | 说明 |

|------|------|------|------|------|

| (无) | — | — | — | 探活接口,无需鉴权参数 |

响应示例(JSON):

`json

{

"status": "ok",

"uptime": 123456,

"version": "1.0.0"

}

`

响应字段表:

| 字段 | 类型 | 说明 |

|------|------|------|

| status | string | 总体状态(ok) |

| uptime | number | 进程已运行秒数 |

| version | string | 服务版本号 |

#### 8.2.6 POST /api/llm/chat

该端点由 server/llm-proxy.js 提供,承载 AI 工作台的自然语言对话与智能体调度入口。

请求示例(curl):

`bash

curl -X POST "http://<服务器IP>:3006/api/llm/chat" \

-H "Authorization: Bearer " \

-H "Content-Type: application/json" \

-d '{"message":"给所有对象类加一个 name 属性","sessionId":"sess-001"}'

`

请求参数表:

| 参数 | 位置 | 类型 | 必填 | 说明 |

|------|------|------|------|------|

| Authorization | Header | string | 是 | Bearer + JWT 令牌 |

| message | Body | string | 是 | 用户自然语言指令 |

| sessionId | Body | string | 否 | 会话标识,用于多轮上下文 |

响应示例(JSON):

`json

{

"success": true,

"reply": "已识别意图 optimize_item_types,正在为各对象类补充 name 属性……",

"sessionId": "sess-001"

}

`

响应字段表:

| 字段 | 类型 | 说明 |

|------|------|------|

| success | boolean | 请求是否成功 |

| reply | string | 智能体回复内容 |

| sessionId | string | 回传的会话标识 |

除上述端点外,平台还登记了大量业务 API(见第九章 9.6 节对外接口清单,包含 /api/workflow 等),均经统一路由与鉴权中间件管理。

8.3 与 SCSAI Agent 集成

平台以 SCSAI Agent 为 PLM 数据底座,通过 SCSAIDataSyncService(周期性/事件触发的数据同步)、SCSAIAIService(AI 能力注入)、plm.service(统一入口)实现双向协同;SCSAIIRecommendationService 基于历史数据提供智能推荐(如替代料、相似件)。集成以配置化方式完成,新增实体仅需登记元数据,降低集成风险。

8.4 实时协同与安全

WebSocket(ws)向前端推送任务进度与数据变更,保证多用户协同实时性;跨服务调用携带 JWT,服务端校验声明后放行;数据访问层统一参数化查询防 SQL 注入,敏感配置脱敏,确保集成安全。

8.5 接口鉴权与统一错误规范

所有业务接口(除 /api/health/api/digital-staff/health 等探活接口外)均需在请求头携带 Authorization: Bearer ;缺失或无效的令牌将返回 401。业务异常以统一结构返回:{ "success": false, "error": "<信息>", "code": <业务码> },便于前端按 code 做差异化提示。常见业务错误码(400/401/403/404/409/422/429/500/502/503/504)及其处理建议见第十一章 11.2 错误码对照表。探活类接口可用于健康检查与容量观测,不暴露任何密钥或敏感字段。

九、核心功能模块详述与部署运维(含真实运行界面)

9.1 部署准备

  1. 安装 Node.js 运行时与 MySQL 数据库实例。
  2. 准备 config.yaml(数据库连接、SCSAI 服务地址、JWT 密钥等)与 .env(环境变量)。
  3. 获取本平台源代码并安装依赖:npm install(或 pnpm install)。

9.2 配置说明

平台通过 config.yaml.env 进行运行配置,关键项包括:

  • SCSAI_SERVER / SCSAI_DATABASE / SCSAI_USERNAME / SCSAI_PASSWORD:SCSAI 服务端地址、数据库、账号(密码已脱敏为 *)。
  • 数据库连接串(MySQL):server / database / user / password(密码脱敏)。
  • Jwt.Secret:JWT 签名密钥;Jwt.ExpirationMinutes:令牌有效期。

`yaml

config.yaml 节选(敏感信息已脱敏)

SCSAI:

server: "http://*/InnovatorServer"

database: "*"

username: "*"

password: "*"

database:

host: "127.0.0.1"

port: 3306

user: "*"

password: "*"

jwt:

secret: "*"

expirationMinutes: 28800

`

9.3 启动服务

主服务默认由 server.js 启动(静态文件服务 + SCSAI API 代理 + 业务 API):

`

npm install

npm run build # 构建前端(Vite)

npm start # node server.js

`

启动成功后访问前端地址查看系统界面。生产环境建议使用 PM2 守护进程并启用反向代理(Nginx)统一暴露、启用 HTTPS。

9.4 代码结构总览

本软件共包含源文件 624 个,源代码 292926 行(物理行数,含空行与注释)。按目录分布如下:

| 目录 | 文件数 | 代码行数 |

|------|------|------|

| MTClaw | 3 | 2914 |

| app | 7 | 993 |

| core | 23 | 8811 |

| frontend | 11 | 24884 |

| server | 391 | 157188 |

| services | 26 | 11682 |

| src | 154 | 84113 |

| utils | 8 | 2256 |

| views | 1 | 85 |

| 合计 | 624 | 292926 |

源码组织遵循清晰的层次化结构:底层为基础设施(配置、工具、数据访问、安全认证),中层为领域服务(业务管理、流程引擎、文件交换、智能体编排),上层为 API 与界面交互。各层通过接口与依赖注入解耦,便于独立测试、替换与水平扩展。

9.5 核心类与模块清单

系统主要导出函数 / 方法(节选前 200 个)如下:

| # | 函数 / 方法 | 源文件 |

|---|------|------|

| 1 | ACTION_MAP | frontend/app-config.js |

| 2 | ALLOW | server/llm-proxy.js |

| 3 | AUTO_TABS | frontend/app-config.js |

| 4 | AiChatPanel | frontend/components.js |

| 5 | BACKEND_MODE | server/tenant-db.js |

| 6 | BrowserHelper | core/GlobalObjectsPatch.js |

| 7 | BrowserInfo | core/GlobalObjectsPatch.js |

| 8 | ClientCache | core/GlobalObjectsPatch.js |

| 9 | Clipboard | core/GlobalObjectsPatch.js |

| 10 | Clipboard_Clear | core/GlobalObjectsPatch.js |

| 11 | Clipboard_Copy | core/GlobalObjectsPatch.js |

| 12 | Clipboard_GetItem | core/GlobalObjectsPatch.js |

| 13 | Clipboard_GetLastCopyCount | core/GlobalObjectsPatch.js |

| 14 | Clipboard_GetLastCopyIndex | core/GlobalObjectsPatch.js |

| 15 | Clipboard_GetLastCopyItem | core/GlobalObjectsPatch.js |

| 16 | Clipboard_GetLastCopyRTName | core/GlobalObjectsPatch.js |

| 17 | Clipboard_GetLastCopyRelatedItemTypeName | core/GlobalObjectsPatch.js |

| 18 | Clipboard_IsEmpty | core/GlobalObjectsPatch.js |

| 19 | Clipboard_Paste | core/GlobalObjectsPatch.js |

| 20 | Clipboard_RemoveItem | core/GlobalObjectsPatch.js |

| 21 | DEFAULT_COLUMNS | frontend/app-config.js |

| 22 | DEFAULT_CUSTOMER_FORM | frontend/app-config.js |

| 23 | DEFAULT_LOGIN_FORM | frontend/app-config.js |

| 24 | DEFAULT_NEW_MODEL_FORM | frontend/app-config.js |

| 25 | DEFAULT_NEW_PRODUCT_FORM | frontend/app-config.js |

| 26 | DEFAULT_ORDER_FORM | frontend/app-config.js |

| 27 | DEFAULT_TENANT | server/tenant-db.js |

| 28 | DEFAULT_VENDOR_FORM | frontend/app-config.js |

| 29 | DIGITAL_STAFF | server/digital-staff/index.js |

| 30 | DIGITAL_STAFF_DEFAULTS | frontend/app-config.js |

| 31 | DynamicForm | frontend/components.js |

| 32 | F | utils/md5.js |

| 33 | FF | utils/md5.js |

| 34 | G | utils/md5.js |

| 35 | GG | utils/md5.js |

| 36 | GOVERNANCE_FIELDS | src/utils/governance.js |

| 37 | GOV_DIM_LABELS | src/utils/governance.js |

| 38 | GOV_DIM_NAMES | src/utils/governance.js |

| 39 | GOV_LABELS | src/utils/governance.js |

| 40 | GUIDManager | core/GlobalObjectsPatch.js |

| 41 | H | utils/md5.js |

| 42 | HH | utils/md5.js |

| 43 | I | utils/md5.js |

| 44 | II | utils/md5.js |

| 45 | ITEMTYPE_COLUMNS | frontend/app-config.js |

| 46 | ITEM_TYPE_ALIASES | frontend/app-config.js |

| 47 | LLM_MODELS | frontend/app-config.js |

| 48 | LOGIN_ROLE_MAP | frontend/app-config.js |

| 49 | LOG_LEVEL | server/routes/ai-inspector.js |

| 50 | MetadataCache | core/GlobalObjectsPatch.js |

| 51 | MethodName | server/routes/methods.js |

| 52 | NAV_GROUP_ICONS | src/constants/navGroups.js |

| 53 | OBJECT_CATEGORIES | src/config/businessObjects.js |

| 54 | ObjectModelerModule | server/routes/capability-pipeline.js |

| 55 | P | frontend/vue.global.prod.js |

| 56 | PHOSPHORUS_DEMO_MODE | server/boss-scheduler/feishu-router.js |

| 57 | PHOSPHORUS_DEMO_MODE | server/feishu-bot.js |

| 58 | PHOSPHORUS_NAV_GROUPS | src/constants/navGroups.js |

| 59 | PROCUREMENT_INTENT_MAP | server/ai-agent.js |

| 60 | PROCUREMENT_TOOLS | server/ai-agent.js |

| 61 | ROLE_PERMISSIONS | frontend/app-config.js |

| 62 | SAMSUNG_DEMO_MODE | server/boss-scheduler/feishu-router.js |

| 63 | SAMSUNG_DEMO_MODE | server/feishu-bot.js |

| 64 | SECRET | server/middleware/auth.js |

| 65 | STAFF_INTENT_RULES | frontend/app-config.js |

| 66 | STAFF_QUICK_COMMANDS | frontend/app-config.js |

| 67 | STATUS_MAP | frontend/app-config.js |

| 68 | Sciot | core/GlobalObjectsPatch.js |

| 69 | Sciot | src/SCSAI-shim.js |

| 70 | SciotCommonProperties | core/GlobalObjectsPatch.js |

| 71 | SmartTable | frontend/components.js |

| 72 | T | server/shared/i18n.js |

| 73 | TimeZoneInfo | core/GlobalObjectsPatch.js |

| 74 | TreeNode | frontend/components.js |

| 75 | VENDOR_STATUS_MAP | frontend/app-config.js |

| 76 | VENDOR_TYPE_MAP | frontend/app-config.js |

| 77 | VIEW_TITLES | frontend/app-config.js |

| 78 | XmlHttpRequestManager | core/GlobalObjectsPatch.js |

| 79 | Y | frontend/vue.global.prod.js |

| 80 | _ | server/tools/procurement-i18n.js |

| 81 | _ai | server/database1.js |

| 82 | _apiGet | server/boss-scheduler/workers/content.js |

| 83 | _apiGet | server/boss-scheduler/workers/doc-worker.js |

| 84 | _apiJson | server/routes/rule-workbench-api.js |

| 85 | _apiPost | server/boss-scheduler/workers/content.js |

| 86 | _apiPost | server/boss-scheduler/workers/doc-worker.js |

| 87 | _applyAML | server/digital-staff/index.js |

| 88 | _backupCorrupt | server/sqlite-compat.js |

| 89 | _buildGeneratePrompt | server/services/data-pipeline.js |

| 90 | _buildPropertyHints | server/services/data-pipeline.js |

| 91 | _cachedCall | server/services/llm-cache.js |

| 92 | _calcDimensionScore | server/scheduler/rule-engines/compare-plans.js |

| 93 | _calculateItemQualityScore | server/services/data-pipeline.js |

| 94 | _calculateQualityDetails | src/views/DataCollectionView.vue |

| 95 | _calculateQualityScore | server/services/data-pipeline.js |

| 96 | _callSCSAIApiOnce | server/routes/ai-inspector.js |

| 97 | _callModel | server/services/llm.js |

| 98 | _checkGuestLimit | server/routes/rule-workbench-api.js |

| 99 | _checkInternalMode | server/boss-scheduler/workers/doc-worker.js |

| 100 | _cleanItem | server/services/anysearch-alibaba-bridge.js |

| 101 | _cleanText | server/services/data-pipeline.js |

| 102 | _clearPoolTimer | server/services/db-metadata-collector.js |

| 103 | _collectMSSQL | server/services/db-metadata-collector.js |

| 104 | _collectMySQL | server/services/db-metadata-collector.js |

| 105 | _collectSQLite | server/services/db-metadata-collector.js |

| 106 | _computeModuleDiff | server/services/chipwise-service.js |

| 107 | _computeTextDiff | server/services/chipwise-service.js |

| 108 | _countedCachedCall | server/services/llm-cache.js |

| 109 | _deprecationWarning | server/routes/doc-agent.js |

| 110 | _doSaveMemoryLogs | server/boss-scheduler/execution-context.js |

| 111 | _doSavePollState | server/feishu-bot.js |

| 112 | _dualDbDedupCheck | src/composables/useCapabilityCreate.js |

| 113 | _emptyMetrics | app/routes/boss.js |

| 114 | _ensureCustomTaskId | server/services/data-pipeline.js |

| 115 | _ensureInit | server/boss-scheduler/index.js |

| 116 | _ensureRuleEngine | server/routes/rule-workbench-api.js |

| 117 | _ensureVueFns | frontend/utils.js |

| 118 | _err | server/routes/digital-staff-routes.js |

| 119 | _escapeXml | server/core/SCSAI-rule-sync.js |

| 120 | _estimateFromPlanStructure | server/scheduler/rule-engines/compare-plans.js |

| 121 | _execCmd | server/services/eda-toolchain.js |

| 122 | _extract | server/digital-staff/smart-llm-bridge.js |

| 123 | _extractAmlItems | src/composables/useCapabilityCreate.js |

| 124 | _extractConfirmResult | server/boss-scheduler/feishu-router.js |

| 125 | _extractLesson | server/digital-staff/correction-learner.js |

| 126 | _extractModuleNames | server/services/chipwise-service.js |

| 127 | _findExistingAsset | server/services/data-pipeline.js |

| 128 | _findTimestampField | server/services/db-metadata-collector.js |

| 129 | _fuzzyMatch | server/boss-scheduler/staff-router.js |

| 130 | _generateDiffReport | server/services/chipwise-service.js |

| 131 | _get | server/shared/db.js |

| 132 | _getSCSAIDataSourceConfig | server/services/db-metadata-collector.js |

| 133 | _getSCSAIDocService | server/routes/doc-agent.js |

| 134 | _getDomainTemplates | server/services/data-pipeline.js |

| 135 | _getEdaToolchain | server/services/chipwise-service.js |

| 136 | _getLLMBrain | server/services/chipwise-service.js |

| 137 | _getLastSyncTime | server/services/db-metadata-collector.js |

| 138 | _getService | server/routes/chipwise-routes.js |

| 139 | _getServices | server/routes/rule-workbench-api.js |

| 140 | _getStatus | server/services/eda-toolchain.js |

| 141 | _getVueUtils | frontend/utils.js |

| 142 | _guessIntent | server/boss-scheduler/workers/auto-loop-worker.js |

| 143 | _handleAsync | server/routes/chipwise-routes.js |

| 144 | _handleBomCompare | server/services/anysearch-alibaba-bridge.js |

| 145 | _handleGenerateDoc | server/routes/capability-api.js |

| 146 | _handleProductSearch | server/services/anysearch-alibaba-bridge.js |

| 147 | _handleSupplierSearch | server/services/anysearch-alibaba-bridge.js |

| 148 | _hasSlot | server/digital-staff/chipwise-handler.js |

| 149 | _hashKey | server/services/llm-cache.js |

| 150 | _inferPropertyType | server/routes/aml.js |

| 151 | _initNewScheduler | server/boss-scheduler/index.js |

| 152 | _initTables | server/services/db-metadata-collector.js |

| 153 | _initTasks | server/services/chipwise-service.js |

| 154 | _invalidateCache | server/config/item-type-registry.js |

| 155 | _json | server/boss-scheduler/staff-router.js |

| 156 | _json | server/routes/auto-loop-api.js |

| 157 | _json | server/routes/digital-staff-routes.js |

| 158 | _jsonErr | server/routes/auto-loop-api.js |

| 159 | _key | src/stores/useDirtyStateStore.js |

| 160 | _lang | server/boss-scheduler/workers/procurement.js |

| 161 | _loadIntentConfig | server/ai-agent.js |

| 162 | _loadProfile | server/boss-scheduler/index.js |

| 163 | _loadTaskStates | server/services/data-pipeline.js |

| 164 | _log | server/boss-scheduler/workers/content.js |

| 165 | _log | server/boss-scheduler/workers/doc-worker.js |

| 166 | _mapFieldName | server/services/db-metadata-collector.js |

| 167 | _memo | frontend/vue.global.prod.js |

| 168 | _mgr | server/boss-scheduler/task-queue.js |

| 169 | _n | server/database1.js |

| 170 | _normalize | server/shared/db.js |

| 171 | _ok | server/routes/digital-staff-routes.js |

| 172 | _openCanonical | server/sqlite-compat.js |

| 173 | _parseBody | app/routes/capability.js |

| 174 | _parseIverilogErrors | server/services/eda-toolchain.js |

| 175 | _parseLLMJson | server/services/data-pipeline.js |

| 176 | _parseModules | server/services/chipwise-service.js |

| 177 | _parseVeribleOutput | server/services/eda-toolchain.js |

| 178 | _parseYosysOutput | server/services/eda-toolchain.js |

| 179 | _processRelsRecursive | src/composables/useCapabilityCreate.js |

| 180 | _readResponse | server/mysql-compat.js |

| 181 | _resolveSCSAIValue | src/utils/SCSAI.js |

| 182 | _retryPublish | server/services/wechat-publish.js |

| 183 | _rowToObject | server/services/db-metadata-collector.js |

| 184 | _runAlignmentCheck | server/boss-scheduler/workers/data-caretaker.js |

| 185 | _runChangeTrack | server/boss-scheduler/workers/doc-worker.js |

| 186 | _runChangeTracking | server/boss-scheduler/workers/ecr-worker.js |

| 187 | _runContentGeneration | server/boss-scheduler/workers/content.js |

| 188 | _runContentPlanning | server/boss-scheduler/workers/content.js |

| 189 | _runContentRefine | server/boss-scheduler/workers/content.js |

| 190 | _runDocChat | server/boss-scheduler/workers/doc-worker.js |

| 191 | _runDocGenerate | server/boss-scheduler/workers/doc-worker.js |

| 192 | _runDocInspect | server/boss-scheduler/workers/doc-worker.js |

| 193 | _runDocQuery | server/boss-scheduler/workers/doc-worker.js |

| 194 | _runMarketingLoop | server/boss-scheduler/workers/content.js |

| 195 | _runRuleInterpret | server/boss-scheduler/workers/doc-worker.js |

| 196 | _safeJsonParse | server/core/rule-engine.js |

| 197 | _safeParseJson | server/core/rule-engine.js |

| 198 | _sanitizeName | server/services/db-metadata-collector.js |

| 199 | _saveMetadata | server/services/db-metadata-collector.js |

| 200 | _saveTaskStates | server/services/data-pipeline.js |

9.6 对外接口(API)清单

系统以 RESTful / Web API 形式提供服务,主要端点如下(节选前 120 个):

| 模块 / 源文件 | HTTP 方法 | 路由 |

|------|------|------|

| server/llm-proxy.js | GET | /api/health |

| server/llm-proxy.js | POST | /api/llm/chat |

| server/routes/workflow.js | GET | / |

| server/routes/workflow.js | POST | / |

| server/routes/workflow.js | PUT | /:id |

| server/routes/workflow.js | DELETE | /:id |

| server/routes/workflow.js | POST | /:id/test |

| MTClaw/function_router/server.py | GET | /health |

| MTClaw/function_router/server.py | GET | /ready |

| MTClaw/function_router/server.py | GET | /v1/models |

| MTClaw/function_router/server.py | GET | /v1/tool_history |

| MTClaw/function_router/server.py | POST | /v1/chat/completions |

9.7 关键源代码文件摘录

为直观说明实现方式,以下摘录各核心源文件的内容(按 45 行分块展示,完整源码见随附《源代码文档》):

#### frontend/app.js(15127 行,摘录前 120 行)

`

/**

  • app.js - 主应用逻辑
  • 从 index-vue.html 提取的 Vue 应用逻辑和业务逻辑
  • 使用 ES Module 导入提取的模块

*/

/ eslint-disable no-undef /

// Vue 兼容:优先检查 Vite 预注入的 window.__VUE_API__,否则从 window.Vue(CDN 加载)解构

const Vue = typeof window !== 'undefined' && window.__VUE_API__ || window.Vue;

if (!Vue) { throw new Error('[app] Vue not loaded - check console for previous errors'); }

const { createApp, ref, reactive, computed, watch, onMounted } = Vue;

import { currentLang, t, toggleLanguage } from './i18n.js';

import {

STATUS_MAP, ACTION_MAP, VENDOR_STATUS_MAP, VENDOR_TYPE_MAP,

ROLE_PERMISSIONS, LOGIN_ROLE_MAP, VIEW_TITLES,

LLM_MODELS, DIGITAL_STAFF_DEFAULTS, STAFF_QUICK_COMMANDS,

STAFF_INTENT_RULES, AUTO_TABS, ITEM_TYPE_ALIASES,

DEFAULT_CUSTOMER_FORM, DEFAULT_ORDER_FORM, DEFAULT_VENDOR_FORM,

DEFAULT_NEW_PRODUCT_FORM, DEFAULT_NEW_MODEL_FORM, DEFAULT_LOGIN_FORM

} from './app-config.js';

import {

formatTimestamp, generateId, debounce, throttle,

escapeXmlText, extractJsonBlock,

objToAmlAdd, objToAmlEdit,

parseAmlToSimplified, formatXmlToString, formatNodeToString,

restoreSimplifiedToAml, buildAmlFromSimplified,

transformBomTree, appNextTick, walkBomTree,

normalizeIdentifyItemType, validateBySchema,

globalLoading, globalLoadingText, notifications,

showLoading, hideLoading, showNotification, showSuccess, showError, showWarning,

confirmDialogVisible, confirmDialogConfig, showConfirm, confirmAction, cancelConfirm,

getStatusLabel, getStatusClass, getActionLabel,

vendorStatusLabel, vendorStatusClass, vendorTypeLabel, vendorGradeClass,

customerStatusClass, customerLevelClass, orderStatusClass,

cacheStats

} from './utils.js';

import { TreeNode } from './components.js';

import { reportAuditLog } from './api.js';

// ===== 对象类创建规则配置 =====

// [P0 FIX] 删除 item-type-creation-rules.json 依赖,改用 sciot_import.db 实时查询

let sciotPrompts = null; // 从 API 加载的所有对象类描述

let typeTemplateCache = new Map(); // 对象类模板缓存

async function loadCreationConfig() {

`

`

// 从 API 加载提示词(统一从数据库读取,避免双源不同步)

try {

const res = await fetch('/api/aml/sciot/prompts');

if (res.ok) {

const json = await res.json();

const prompts = json?.data?.prompts || [];

// 转换为 { item_type_name: system_prompt } 格式,兼容老代码

sciotPrompts = {};

for (const p of prompts) {

sciotPrompts[p.item_type_name] = p.system_prompt || p.user_prompt_template || '';

}

console.log('[loadCreationConfig] Prompt字典加载成功:', Object.keys(sciotPrompts).length, '个对象类');

}

} catch (e) {

console.warn('[loadCreationConfig] Prompt字典加载失败:', e.message);

}

}

// 获取对象类的 Prompt 描述(从 API 加载的数据)

function getItemTypePrompt(itemTypeName) {

if (!sciotPrompts) return null;

return sciotPrompts[itemTypeName] || null;

}

// 获取对象类完整模板(从后端API,含缓存)

async function getItemTypeTemplate(itemTypeName) {

if (typeTemplateCache.has(itemTypeName)) {

return typeTemplateCache.get(itemTypeName);

}

try {

const res = await fetch(/api/sciot/type-template/${encodeURIComponent(itemTypeName)});

if (!res.ok) {

console.warn([getItemTypeTemplate] 获取模板失败: ${itemTypeName});

return null;

}

const template = await res.json();

typeTemplateCache.set(itemTypeName, template);

return template;

} catch (e) {

console.warn([getItemTypeTemplate] 获取模板异常: ${itemTypeName}, e.message);

return null;

}

}

// 获取对象类所有list字段的值

`

`

async function getItemTypeListValues(itemTypeName) {

try {

const res = await fetch(/api/sciot/type-list-values/${encodeURIComponent(itemTypeName)});

if (!res.ok) return {};

const data = await res.json();

return data.list_fields || {};

} catch (e) {

console.warn([getItemTypeListValues] 获取失败: ${itemTypeName}, e.message);

return {};

}

}

// 根据schema处理字段值(不再依赖creation-rules.json)

function processFieldValueBySchema(fieldName, value, propDef) {

if (value === undefined || value === null) return null;

const dataType = propDef?.data_type || propDef?.type || 'string';

// 处理 list 类型:数组转字符串(取第一个元素)

if (dataType === 'list' || Array.isArray(value)) {

if (Array.isArray(value)) {

// 如果list有预定义值,验证并取第一个有效值

const validValues = propDef?.list_values?.map(v => v.value) || [];

if (validValues.length > 0) {

const firstValid = value.find(v => validValues.includes(v));

return firstValid || validValues[0] || '';

}

return value[0] || '';

}

// 如果有 listValueMap,检查值是否为 label,需要反向映射为 value

`

#### frontend/i18n.js(7550 行,摘录前 120 行)

`

/**

  • i18n.js - 国际化模块(统一版)

*

  • 架构说明:
  • - 本模块是 i18n 的唯一权威来源
  • - Pinia store (src/stores/app.js) 通过 initLangBridge() 桥接
  • - 所有 Vue 组件通过 import { t } from 'frontend/i18n' 使用翻译
  • - localStorage key 统一为 bossagents_language

*

  • 支持语言:zh-CN, en-US, ja-JP, ko-KR

*/

import phosphorusDemoZh from '../src/i18n/phosphorus-demo-zh';

import { samsungDemoEn } from '../src/i18n/samsung-demo-en';

// ===== 常量 =====

const STORAGE_KEY = 'bossagents_language';

const SUPPORTED_LANGUAGES = [

{ code: 'zh-CN', name: '中文', shortName: '中文', flag: '🇨🇳' },

{ code: 'en-US', name: 'English', shortName: 'EN', flag: '🇺🇸' },

{ code: 'ja-JP', name: '日本語', shortName: '日本語', flag: '🇯🇵' },

{ code: 'ko-KR', name: '한국어', shortName: '한국어', flag: '🇰🇷' },

];

// ===== 内部语言状态(模块级) =====

let _currentLang = 'zh-CN';

let _onChangeCallbacks = [];

// Pinia bridge: store ref 注入

let _piniaRef = null;

export function bindPiniaLangRef(ref) {

_piniaRef = ref;

_currentLang = ref.value;

}

// ===== 语言检测 =====

function detectBrowserLang() {

// 优先读 localStorage

const stored = localStorage.getItem(STORAGE_KEY);

if (stored && SUPPORTED_LANGUAGES.some(l => l.code === stored)) return stored;

// 旧 key 兼容迁移

const legacy = localStorage.getItem('bom-lang');

if (legacy && SUPPORTED_LANGUAGES.some(l => l.code === legacy)) {

localStorage.setItem(STORAGE_KEY, legacy);

`

`

localStorage.removeItem('bom-lang');

return legacy;

}

// 浏览器语言

const browserLang = (navigator.language || navigator.userLanguage || 'en-US').toLowerCase();

if (browserLang.startsWith('zh')) return 'zh-CN';

if (browserLang.startsWith('ja')) return 'ja-JP';

if (browserLang.startsWith('ko')) return 'ko-KR';

return 'en-US';

}

// ===== 公开 API =====

export function getSupportedLanguages() { return SUPPORTED_LANGUAGES; }

export function getCurrentLanguage() { return _currentLang; }

export function setLanguage(langCode) {

if (!SUPPORTED_LANGUAGES.some(l => l.code === langCode)) {

console.warn([i18n] Unsupported language: ${langCode});

return;

}

_currentLang = langCode;

localStorage.setItem(STORAGE_KEY, langCode);

if (_piniaRef) _piniaRef.value = langCode;

_onChangeCallbacks.forEach(cb => cb(langCode));

console.log(🌐 Language switched to: ${langCode});

}

export function toggleLanguage() {

const idx = SUPPORTED_LANGUAGES.findIndex(l => l.code === _currentLang);

const next = SUPPORTED_LANGUAGES[(idx + 1) % SUPPORTED_LANGUAGES.length];

setLanguage(next.code);

}

export function onLanguageChange(callback) {

_onChangeCallbacks.push(callback);

return () => { _onChangeCallbacks = _onChangeCallbacks.filter(cb => cb !== callback); };

}

// 向后兼容 proxy

export const currentLang = {

get value() { return _currentLang; },

set value(v) { setLanguage(v); }

};

`

`

// ===== 翻译字典 =====

export const i18nMessages = {

'zh-CN': {

// ── 登录 / 注册 ──

login_title: '左帮右臂-老板私有智能体',

login_subtitle: '左帮右臂 - BossPrive AI Agent',

login_email: '邮箱',

login_email_ph: '请输入邮箱',

login_password: '密码',

login_password_ph: '请输入密码',

login_btn: '登 录',

login_register_link: '注册新企业',

login_connect: '连接到 SCSAI PLM',

register_title: '注册新企业',

register_enterprise_name: '企业名称',

register_enterprise_name_ph: '输入企业名称',

register_admin_email: '管理员邮箱',

register_admin_email_ph: '输入管理员邮箱',

register_password: '密码',

register_password_ph: '设置管理员密码',

register_code: '验证码',

register_code_ph: '输入验证码',

register_send_code: '发送验证码',

register_btn: '注册并登录',

register_login_link: '已有账号?去登录',

// ── 状态 ──

status_connected: '已连接至',

status_not_connected: '未连接',

`

#### server/routes/aml.js(7126 行,摘录前 120 行)

`

/**

  • AML(对象类管理)路由模块

*

  • 提供 AML 模板的 CRUD、验证、比对、修复、导入、统计、AI生成等 12 个 API。
  • 数据库层基于 better-sqlite3,自动建表。
  • SCSAI 连接工具用于从 SCSAI 获取真实数据(降级到本地)。

*/

const crypto = require('crypto');

const path = require('path');

const fs = require('fs');

const http = require('http');

// [P2] 模块化路由导入

const { handleItemTypeRoutes } = require('./itemtype.router');

const { handleImportExportRoutes } = require('./import-export.router');

const { handleAIAnalyzerRoutes } = require('./ai-analyzer.router');

const { handleMetaModelRoutes } = require('./meta-model.router');

const { handleBusinessSystemRoutes } = require('./business-system.router');

const { handleUnifiedAMLRoutes } = require('./unified-aml');

const { handleRuleEngine } = require('./rule-engine');

const { FeedbackAnalyzer } = require('../services/feedback-engine');

const { EvolutionScheduler } = require('../services/evolution-scheduler');

// rule-engine-core.js removed: prompt_templates table used instead

// 内联组装路由 (使用主模块的 getSciotDb)

async function handleAssembleRoutes(req, res, pathname, query, bodyStr) {

const success = (data) => { res.writeHead(200, { 'Content-Type': 'application/json; charset=UTF-8' }); res.end(JSON.stringify({ success: true, data })); };

const error = (msg, code = 400) => { res.writeHead(code, { 'Content-Type': 'application/json; charset=UTF-8' }); res.end(JSON.stringify({ success: false, error: msg })); };

try {

if (pathname === '/api/aml/assemble' && req.method === 'POST') {

const body = JSON.parse(bodyStr || '{}');

if (!body.llm_output) { error('缺少llm_output参数'); return true; }

if (!body.item_type_name) { error('缺少item_type_name参数'); return true; }

const sciotDb = getSciotDb();

if (!sciotDb) { error('数据库不可用', 500); return true; }

const assembler = require('../aml-assembler');

const result = assembler.assembleAML(body.llm_output, body.item_type_name, sciotDb, body.options || {});

success(result);

return true;

}

if (pathname === '/api/aml/assemble/validate' && req.method === 'POST') {

const body = JSON.parse(bodyStr || '{}');

if (!body.aml) { error('缺少aml参数'); return true; }

if (!body.item_type_name) { error('缺少item_type_name参数'); return true; }

const sciotDb = getSciotDb();

`

`

if (!sciotDb) { error('数据库不可用', 500); return true; }

const assembler = require('../aml-assembler');

const parsed = assembler.parseLLMOutput(body.aml);

const tpl = sciotDb.prepare('SELECT * FROM sciot_templates WHERE item_type_name = ?').get(body.item_type_name);

const merged = assembler.mergeWithTemplate(parsed, tpl || { item_type_name: body.item_type_name, required_fields: '[]', optional_fields: '[]' });

merged.itemType = body.item_type_name;

const validation = assembler.validateWithRules(merged, sciotDb);

success({ valid: validation.valid, format: parsed.format, errors: validation.errors, warnings: validation.warnings, stats: { passed: validation.passed, failed: validation.failed } });

return true;

}

const tplMatch = pathname.match(/^\/api\/aml\/assemble\/templates\/([^/]+)$/);

if (tplMatch && req.method === 'GET') {

const name = decodeURIComponent(tplMatch[1]);

console.log('[assemble] GET templates for:', name);

const sciotDb = getSciotDb();

if (!sciotDb) { console.log('[assemble] no db'); error('数据库不可用', 500); return true; }

console.log('[assemble] db OK');

const tpl = sciotDb.prepare('SELECT * FROM sciot_templates WHERE item_type_name = ?').get(name);

console.log('[assemble] tpl:', !!tpl);

if (tpl) {

success({ item_type_name: name, has_template: true, ...tpl,

required_fields: JSON.parse(tpl.required_fields || '[]'),

optional_fields: JSON.parse(tpl.optional_fields || '[]'),

relationship_types: JSON.parse(tpl.relationship_types || '[]'),

});

} else {

const props = sciotDb.prepare('SELECT name, label, data_type, is_required FROM sciot_properties WHERE item_type_name = ? ORDER BY name').all(name);

success({ item_type_name: name, has_template: false, properties: props });

}

return true;

}

} catch(e) { error('组装错误: ' + e.message, 500); return true; }

return false;

}

// [P0] 获取 Sciot 部件数据

async function handleSciotPartsRoutes(req, res, pathname, query, bodyStr) {

const cachedBody = bodyStr || null;

const success = (data) => {

res.writeHead(200, { 'Content-Type': 'application/json; charset=UTF-8' });

res.end(JSON.stringify(data));

};

const error = (msg, code = 400) => {

res.writeHead(code, { 'Content-Type': 'application/json; charset=UTF-8' });

res.end(JSON.stringify({ success: false, error: msg }));

`

`

};

try {

if (pathname === '/api/sciot/parts' && req.method === 'GET') {

const sciotDb = getSciotDb();

if (!sciotDb) return error('数据库不可用', 500);

let parts = [];

try {

parts = sciotDb.prepare('SELECT * FROM sciot_parts LIMIT 100').all();

} catch (e) {

console.warn('[AML] sciot_parts 表不存在,返回模拟数据');

parts = [

{ id: 'P001', item_number: '1000-001', name: '主控制器', classification: 'Electronic', state: 'Released', created_on: '2024-01-01' },

{ id: 'P002', item_number: '2000-042', name: '电源模块', classification: 'Power', state: 'In Work', created_on: '2024-02-15' },

{ id: 'P003', item_number: '3000-115', name: '传感器 A', classification: 'Sensor', state: 'Released', created_on: '2024-03-20' }

];

}

return success({ success: true, data: parts });

}

} catch (e) {

return error('获取部件错误: ' + e.message, 500);

}

return false;

}

// ========== 使用统一数据库 ==========

let db = null;

try {

`

#### src/views/StaffCapabilities.vue(4986 行,摘录前 120 行)

`