立项原因:公司采购、销售、财务三条线的经营报表,原先依赖 Electron + Python(pymysql + pandas + openpyxl)脚本在本机运行,环境依赖重、需单独安装 Python、Excel 导出慢且多表要手工拼接,非技术人员基本无法独立使用。本项目把报表引擎重写为桌面应用,一键扫描 SQL 资产、直连云端只读库执行、自动导出多 Sheet Excel,解决"报表必须开发陪同跑、换台电脑就罢工"的产品问题。
行业场景:面向生鲜冻品供应链的多租户 SaaS 商户(闽赛、英联志合、珍尚等),业务覆盖采购在途、分仓库存、销售合计、机构加价、账龄回款、财务内销日报等场景,数据源为阿里云 RDS 只读实例(yinglian_etl 账号)。采购与财务人员只需按租户目录选报表、勾日期与商户即可出表,取代过去手工导 SQL 的流程。
项目包含六大功能模块:① 登录与权限——图形验证码 + RSA 防重放签名,会话级登录态;主界面按租户目录做一级过滤、按 SaaS 菜单白名单做二级过滤。② 报表目录树——由 report_specs.json 驱动的多租户 / 多分类菜单(采购、财务、销售),缺 SQL 的报表自动置灰。③ 参数配置——开始与结束日期选择、商户选择,占位符模式(range / aging / target_date / month_filter)自动分派。④ 报表执行——扫描 SQL 资产、注入日期与商户占位符、连接 MySQL 执行,实时日志流回传前端。⑤ Excel 导出——多 Sheet 按顺序输出,冻结首行、自适应列宽,产物落到按日期分目录的 output 下。⑥ 结果管理——已导出 Excel 列表、一键打开所在目录,以及无边框窗口的最小化 / 最大化 / 关闭控制。
我负责从 Electron + Python 方案到 Tauri 2 的完整重构:Rust 侧 9 个 #[tauri::command](报表扫描、报表执行、Excel 扫描、目录打开、凭据存取、运行时信息等)全部重写,用 mysql crate 同步连接替换 pymysql、rust_xlsxwriter 替换 openpyxl / pandas,chrono 处理账龄所需的 12 个月日期序列;前端沿用原有 Vue 组件,新增 src/tauri/bridge.js 把 window.electronAPI 一对一映射到 Tauri 原语,实现前端零改动迁移。
技术栈:Tauri 2 + Rust(mysql / rust_xlsxwriter / chrono)+ Vue 3(script setup)+ Vue Router(Hash)+ Pinia + axios + jsencrypt,打包为 macOS .app。
实现亮点与难点:① 用 serde_json::Value 接收 RunOptions 再做 json_to_opt_string 转换,兼容前端传数字 / 字符串 / null 三种形态,避免整数 mchId 导致整条 invoke 被 reject;② 报表执行放在 spawn_blocking 中,日志经 mpsc 通道交给独立 async 任务统一 emit,外层包 catch_unwind,把任何 panic 转成 {success:false} 返回而不是 reject;③ 资源路径多级回退(资源目录 / 包内 / 裸二进制 / 环境变量),保证开发与打包后都能正确定位 SQL;④ 用 Tauri ACL 白名单授予窗口控制能力。
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!

下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论