# 成套报价软件 电气成套设备报价桌面软件:报价三表(图号/箱号/元件)+ CAD/PDF 图纸扒图 + 元件库选型 + 公式计算 + 甲方报表,单机 SQLite 存储,可选 AI 助手与云端会员服务。 > **改代码前必读**:[代码索引.md](代码索引.md)(所有功能的文件/方法级定位 + 修改铁律) > **组件属性手册**:`.agents\skills\sd-enhanced-components\SKILL.md`(WinForms 控件白名单、设计器规则、版本号铁律、git 推送排查手册) ## 功能概览 - **项目管理**:新建/修改/删除/复制项目,zip 项目包导入导出,最近项目自动恢复 - **报价三表**:图号/箱号/元件三级联动,虚拟模式万行秒开,编辑实时落库;公式自动计算(成本价/报出价/利润/毛利率,公式可自定义);批量粘贴/删除/撤销、费用模板行 - **CAD 扒图**:内嵌网页 CAD 查看器(mlightcad)打开 DWG/DXF;框选扒图号/箱号/元件,表格点行定位图上蒙版,F1/F2/F3 元件合并 - **PDF 扒图**:pdfium 渲染 + 框选 OCR(百度/智谱 GLM/千帆/UApiPro/Umi-OCR 本地五引擎),自动纠正文本方向,入库/合并/定位同 CAD - **元件库与选型**:厂家/系列/价格网页选型,收藏跳转,方案库独立库文件,用户库/柜体库管理与 CSV 导入导出 - **计算与报表**:GCS 母排计算与铜排推荐、批量调系数、元件排序、甲方报表 Excel 导出 - **其它**:停靠布局保存恢复、数据备份恢复、登录门禁、可选 AI 助手(ZCode 引擎) ## 技术栈 | 项 | 说明 | |---|---| | 框架 | WinForms,.NET Framework 4.8,x86(SharpDevelop 5.x 工具链) | | 数据库 | SQLite(WAL + Pooling + BusyTimeout=5000),连接串统一见 `成套报价软件\数据库连接.cs` | | 内嵌网页 | WebView2(元件库/CAD 查看器/AI 助手面板) | | PDF/OCR | pdfium 渲染 + 多引擎 OCR(`扒图\` 下为唯一源码,pdfbt 链接共享) | | Excel | NPOI(甲方报表/导入导出) | | UI 组件 | Smart.CustomComponents(自研)、WeifenLuo Docking、AdvancedDataGridView | ## 仓库结构 ``` 成套报价软件\ 主程序源码(MainForm 拆 14 个 partial;xiangmu/shezhi/ku 子模块窗体) └ 扒图\ CAD/PDF 扒图窗口 + OCR/PDF 基础设施(唯一权威源,pdfbt 链接共享) cadbt\ CAD 扒图独立程序(含 CAD-Viewer 网页引擎) pdfbt\ PDF 扒图独立程序(OCR 等基础设施链接主项目扒图\ 源码) ai助手\ ZCode 引擎发行包 + 启停脚本(发行包不进 git) 会员服务器\ 肥牛 fnnas 会员服务端 v1.5.1(fpk 工程) tools\ 构建/打包/维护脚本(见下表) release\ 组装产物(仅 setup.iss 进 git) ghj\ yjktool\ 历史试验小工具 ``` **数据目录**(运行时,均不进 git):`sjk\bjb\项目<编号>.db` 每项目一库;`sjk\fak.db` 公式库;`sjk\方案库\*.db` 一方案一库;`shezhi\` 用户配置;`xiangmu\` 报表模板。 ## 构建与验证 ```powershell # 主程序(工作目录必须是 成套报价软件\ 子目录!rsp 相对路径基于它) cd 成套报价软件 & "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" "@..\tools\verify_build.rsp" /warn:1 # pdfbt 独立程序(链接共享主项目扒图\ 源码,改 OCR 相关先确认两项目都编译) & "C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" pdfbt\pdfbt.csproj /t:Build /p:Configuration=Debug ``` 注意:编译前杀掉运行中的主程序(exe 被锁报 CS0016);rsp 默认 `/warn:0` 压警告,排查时加 `/warn:1`。 ## 版本号与发版流程 版本号唯一事实源 = `成套报价软件\Properties\AssemblyInfo.cs` 的 `AssemblyVersion`(固定三段式 `主.次.修订.0`,禁用 `1.0.*` 自动号);关于软件窗口运行时自动读它显示;安装包文件名带版本号。 ```powershell # 每次发版必须先递增版本号(规则详见技能"版本号铁律") powershell -File tools\递增版本号.ps1 # 修订号+1;大版本: tools\递增版本号.ps1 1.1.0 # 发版链(顺序固定) 递增版本号 → 编译 → python tools\make_package.py → ISCC release\成套报价软件\setup.iss → python tools\make_update_package.py → git add/commit/push → Gitea Release(tag=v版本号,附件=安装包+更新包) ``` ## 常用工具脚本(tools\) | 脚本 | 用途 | |---|---| | `递增版本号.ps1` | 版本号一键递增,同步 AssemblyInfo + setup.iss | | `make_package.py` | 组装发布目录(exe+DLL+数据目录+cadbt+pdfbt+AI 助手) | | `make_update_package.py` | 生成覆盖式更新包(exe+说明.txt+zip) | | `扒图同步检查.ps1` | Cad/Pdf Form3.cs 双胞胎漂移护栏(超基线报警) | | `perf_load.py` | 性能加载测试 | ## 版本控制与远程 - 远程:`http://192.168.9.43:3000/0999we/ctbjrj`(Gitea,remote URL 内嵌访问令牌自动认证) - 节奏:每轮改动 `git add -A → commit(中文消息)→ push`;Release 附件只在发版时上传一次 - 故障排查(认证失败/rebase 整合/文件占用/gitignore 陷阱等 7 类场景):见技能"git 推送流程与故障排查" - 发版历史:Gitea Releases(含安装包与更新包附件) ## 开源组件致谢 软件内嵌的开源组件(WeifenLuo Docking、ADGV、NPOI、DotNetZip、SharpZipLib、ReoGrid、System.Data.SQLite、pdfium、WebView2、Node.js、ZCode、mlightcad CAD-Viewer、Umi-OCR、Lucide)的版权与许可声明见软件"关于→开源致谢"页及安装目录 `licenses\`。