# 系统架构

本文档概述系统的主要模块、服务边界和协作方式，帮助读者快速理解项目的整体组织结构。

## 组成说明

- 前端与桌面客户端负责交互和展示。
- 服务端与计算模块负责业务处理与数据流转。
- 文档与配置文件用于说明流程和协作约定。

## 设计目标

- 保持模块职责清晰，降低耦合。
- 让关键流程具备可追踪性和可维护性。
- 支持后续扩展与功能接入。

<cite>
**本文引用的文件**
- `package.json`
- `angular.json`
- `src/main.ts`
- `src/app/app.config.ts`
- `src/app/app.component.ts`
- `src/app/app.routes.ts`
- `src/app/styles.scss`
- `src/app/services/api/system-api.service.ts`
- `src/app/services/navigation.service.ts`
- `src-tauri/Cargo.toml`
- `src-tauri/tauri.conf.json`
- `src-tauri/src/main.rs`
- `src-tauri/src/lib.rs`
- `src-tauri/src/commands/mod.rs`
- `README.md`
</cite>

## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)

## 简介
本项目为“基金标的公司估值系统”（GSDJGX App），采用前后端分离架构：前端基于 Angular 22 + Syncfusion EJ2 组件库，后端基于 Tauri 2 + Rust，通过 Tauri 桥接实现前端与后端的双向通信。系统以模块化组件设计为核心，结合 Material Design 风格的主题系统与响应式布局；后端在 Tauri 安全沙箱环境中运行，使用 SeaORM ORM 访问 SQLite 本地数据库，配合 Rust 高性能计算引擎完成复杂的数值计算与数据处理。

## 项目结构
项目采用典型的 Monorepo 结构，前端代码位于 src 目录，后端代码位于 src-tauri 目录，二者通过 Tauri 桥接协同工作。前端负责用户交互与界面展示，后端负责系统级能力（文件系统、进程控制、网络请求、数据库访问、数学计算等）。

```mermaid
graph TB
subgraph "前端Angular 22"
A["src/main.ts<br/>应用入口"]
B["src/app/app.component.ts<br/>根组件"]
C["src/app/app.routes.ts<br/>路由配置"]
D["src/app/styles.scss<br/>全局样式与主题"]
E["src/app/services/*<br/>服务层"]
end
subgraph "后端Tauri 2 + Rust"
F["src-tauri/src/main.rs<br/>入口"]
G["src-tauri/src/lib.rs<br/>应用构建与命令注册"]
H["src-tauri/Cargo.toml<br/>依赖与特性"]
I["src-tauri/tauri.conf.json<br/>应用配置"]
J["src-tauri/src/commands/*<br/>命令模块"]
end
A --> B
B --> C
B --> E
D --> B
E --> |"invoke 命令"| G
G --> |"注册命令"| J
H --> G
I --> F
```

图表来源
- `src/main.ts#L1-L23`
- `src/app/app.component.ts#L1-L120`
- `src/app/app.routes.ts#L1-L104`
- `src/app/styles.scss#L1-L45`
- `src-tauri/src/main.rs#L1-L9`
- `src-tauri/src/lib.rs#L1-L120`
- `src-tauri/Cargo.toml#L1-L66`
- `src-tauri/tauri.conf.json#L1-L70`

章节来源
- `README.md#L1-L118`
- `package.json#L1-L90`
- `angular.json#L1-L79`

## 核心组件
- 前端应用入口与引导：Angular 应用通过 main.ts 引导，注册语言与 Syncfusion 许可，提供路由注入。
- 根组件与事件驱动：AppComponent 作为根组件，负责窗口控制、菜单交互、通知监听、深度链接、最近项目等，采用事件总线与服务组合实现 UI 与业务解耦。
- 路由与多面板布局：使用 Angular 多 outlet（left-pane/main-pane）实现左右分栏布局，NavigationService 提供统一导航能力。
- API 服务层：SystemApiService 等继承自 BaseApiService，封装 invoke 命令调用，屏蔽 Tauri 桥接细节。
- 后端应用构建：lib.rs 中集中注册插件与命令，统一管理状态与生命周期。
- 命令模块化：commands/mod.rs 汇总各领域命令模块，便于扩展与维护。

章节来源
- `src/main.ts#L1-L23`
- `src/app/app.component.ts#L1-L120`
- `src/app/app.routes.ts#L1-L104`
- `src/app/services/navigation.service.ts#L1-L228`
- `src/app/services/api/system-api.service.ts#L1-L273`
- `src-tauri/src/lib.rs#L1-L120`
- `src-tauri/src/commands/mod.rs#L1-L70`

## 架构总览
系统采用“前端 UI + 后端服务”的分层架构，前端通过 Tauri 桥接调用后端命令，后端通过 SeaORM 访问 SQLite 数据库，Rust 计算模块完成高精度数值计算。整体数据流从用户界面到 API 服务，再到后端命令与计算引擎，最终写入数据库。

```mermaid
graph TB
UI["前端 UIAngular"] --> API["API 服务SystemApiService"]
API --> Bridge["Tauri 桥接"]
Bridge --> CMD["后端命令commands/*"]
CMD --> ORM["SeaORM 数据访问层"]
ORM --> DB["SQLite 本地数据库"]
CMD --> CALC["Rust 数值计算引擎"]
CMD --> FS["文件系统/进程/网络等系统能力"]
CMD --> EVT["事件与通知通知后端 -> 前端"]
EVT --> UI
```

图表来源
- `src/app/services/api/system-api.service.ts#L1-L273`
- `src-tauri/src/lib.rs#L70-L308`
- `src-tauri/Cargo.toml#L26-L66`
- `src-tauri/tauri.conf.json#L6-L11`

## 详细组件分析

### 前端架构：Angular 22 + Syncfusion EJ2 + Material 风格主题
- 模块化组件设计：根组件负责窗口控制、菜单、通知与导航；各功能页面以组件形式组织，通过路由与多 outlet 实现左右分栏。
- Syncfusion EJ2 组件库：通过 styles.scss 导入 Tailwind3 风格的基础与组件样式，覆盖按钮、布局、输入、弹窗、列表、导航、下拉、表格、日历、电子表格、富文本、通知等组件。
- Material Design 主题系统：通过 @use 引入主题变量，结合 Inter 字体与 Office UI Fabric 样式，形成统一视觉风格。
- 响应式布局：利用 Syncfusion 布局组件与 Flex/Grid 布局策略，适配不同窗口尺寸与操作系统装饰样式。

```mermaid
classDiagram
class AppComponent {
+toastComponent
+navigateFromRoot(outlets)
+onMenuSelect(event)
+setupBackendNotificationListener()
+refreshUserInfoOnStartup()
}
class NavigationService {
+navigateFromRoot(newOutlets, preserveOthers, extras)
+navigateToLeftPane(path, params, extras)
+navigateToMainPane(path, params, extras)
+navigateToBothPanes(leftPath, mainPath, ...)
+navigateToWelcome(preserveLeftPane)
+navigateToMainPaneOnly(path, params, extras)
+navigateToLeftPaneOnly(path, params, extras)
+navigateToDefault(extras)
+clearAllOutlets()
}
class SystemApiService {
+greet(name)
+aiChat(prompt)
+openExternalUrl(url)
+readFile(filePath)
+writeFile(filePath, content)
+listDirectory(dirPath)
+getConfig(key)
+setConfig(key, value)
+invokeCommand(cmd, payload)
}
AppComponent --> NavigationService : "使用"
AppComponent --> SystemApiService : "调用"
```

图表来源
- `src/app/app.component.ts#L1-L120`
- `src/app/services/navigation.service.ts#L1-L228`
- `src/app/services/api/system-api.service.ts#L1-L273`

章节来源
- `src/app/app.component.ts#L1-L120`
- `src/app/app.routes.ts#L1-L104`
- `src/app/styles.scss#L1-L45`
- `src/app/services/navigation.service.ts#L1-L228`
- `src/app/services/api/system-api.service.ts#L1-L273`

### 后端架构：Tauri 2 + Rust + SeaORM + SQLite
- 安全沙箱环境：Tauri 2 在 macOS 上启用私有 API，Windows 窗口样式与透明装饰，构建阶段通过 tauri.conf.json 配置 devUrl 与前端产物路径。
- 插件体系：统一注册日志、更新器、剪贴板、进程、存储、打开器、对话框、文件系统、HTTP、深链等插件，并在 setup 阶段注册深链。
- 命令注册：lib.rs 中集中注册通用命令、认证命令、代理命令、数据库命令、项目与财务命令、计算命令、Excel/PDF 命令等，覆盖系统全场景。
- 数据访问层：Cargo.toml 引入 SeaORM 与 sqlx-sqlite，配合 with-chrono 宏与 runtime-tokio-rustls 运行时，实现结构化查询与事务支持。
- 计算引擎：Rust 实现熵权法、TOPSIS、矩阵归一化、可比公司选择与全局最优搜索等高精度数值计算，结合 rayon 并行加速。

```mermaid
sequenceDiagram
participant UI as "前端 UI"
participant API as "SystemApiService"
participant Tauri as "Tauri 桥接"
participant CMD as "后端命令"
participant ORM as "SeaORM"
participant DB as "SQLite"
UI->>API : "调用 greet(name)"
API->>Tauri : "invoke('greet', {name})"
Tauri->>CMD : "执行 greet 命令"
CMD->>ORM : "读取/写入数据可选"
ORM->>DB : "SQL 查询/执行"
CMD-->>Tauri : "返回结果"
Tauri-->>API : "返回结果"
API-->>UI : "更新界面"
```

图表来源
- `src/app/services/api/system-api.service.ts#L20-L22`
- `src-tauri/src/lib.rs#L77-L304`
- `src-tauri/Cargo.toml#L38-L41`

章节来源
- `src-tauri/tauri.conf.json#L1-L70`
- `src-tauri/src/lib.rs#L33-L120`
- `src-tauri/Cargo.toml#L26-L66`

### 数据流架构：从 UI 到数据库的完整流转
- 用户操作到 API 服务：用户点击菜单或按钮，根组件或页面组件通过 SystemApiService 发起 invoke 调用。
- API 服务到后端命令：SystemApiService 将命令名称与参数传递至 Tauri 桥接，lib.rs 中注册的命令处理器接收并执行。
- 后端计算与数据库：命令处理器调用 SeaORM 执行 SQL，或调用 Rust 计算模块进行数值处理，最终写入 SQLite。
- UI 反馈：后端可通过事件向前端推送通知，前端 Toast 组件展示错误/警告/成功/信息类通知。

```mermaid
flowchart TD
Start(["用户操作"]) --> UIInvoke["SystemApiService.invoke(...)"]
UIInvoke --> Bridge["Tauri 桥接"]
Bridge --> Cmd["命令处理器"]
Cmd --> Calc{"是否需要计算?"}
Calc --> |否| DBWrite["写入/查询数据库"]
Calc --> |是| RustCalc["Rust 计算引擎"]
RustCalc --> DBWrite
DBWrite --> Notify["事件/通知"]
Notify --> Toast["前端 Toast 展示"]
Toast --> End(["UI 反馈"])
```

图表来源
- `src/app/services/api/system-api.service.ts#L1-L273`
- `src-tauri/src/lib.rs#L77-L304`
- `src/app/app.component.ts#L463-L536`

章节来源
- `src/app/app.component.ts#L463-L536`
- `src/app/services/api/system-api.service.ts#L1-L273`

### 事件驱动系统：用户操作到业务逻辑再到 UI 反馈
- 事件来源：菜单选择、侧边栏点击、窗口控制、深链回调、自定义事件（如打开目录、显示项目汇总表等）。
- 事件处理：根组件监听并分发事件，NavigationService 控制多面板路由，SystemApiService 调用后端命令。
- 通知机制：后端通过事件向前端推送通知，前端统一监听并在 Toast 中展示，支持错误、警告、成功、信息四类样式。

```mermaid
sequenceDiagram
participant User as "用户"
participant Root as "AppComponent"
participant Nav as "NavigationService"
participant API as "SystemApiService"
participant Tauri as "Tauri"
participant Backend as "命令处理器"
participant Toast as "Toast 组件"
User->>Root : "点击菜单项"
Root->>Nav : "navigateToMainPane(...)"
Nav-->>Root : "导航完成"
Root->>API : "invokeCommand(...)"
API->>Tauri : "invoke(...)"
Tauri->>Backend : "执行命令"
Backend-->>Tauri : "返回结果/触发事件"
Tauri-->>API : "返回结果"
API-->>Root : "更新状态"
Backend-->>Root : "backend-notification 事件"
Root->>Toast : "showToast(...)"
Toast-->>User : "UI 反馈"
```

图表来源
- `src/app/app.component.ts#L142-L182`
- `src/app/services/navigation.service.ts#L85-L140`
- `src/app/services/api/system-api.service.ts#L20-L22`
- `src-tauri/src/lib.rs#L135-L135`

章节来源
- `src/app/app.component.ts#L142-L182`
- `src/app/services/navigation.service.ts#L85-L140`

## 依赖关系分析
- 前端依赖：Angular 22 核心库、Syncfusion EJ2 组件库、@tauri-apps/api、rxjs 等（采用 zoneless 变更检测，无 zone.js）；构建与打包由 Angular CLI 与 pnpm 驱动。
- 后端依赖：Tauri 2、SeaORM、reqwest、tokio、rayon、calamine、rust_xlsxwriter 等；通过 Cargo 管理。
- 配置与脚本：package.json 定义 npm/pnpm 脚本，angular.json 定义构建与开发服务器配置，tauri.conf.json 定义应用与打包配置。

```mermaid
graph LR
FE["前端Angular 22"] --> TauriAPI["@tauri-apps/api"]
FE --> Syncfusion["Syncfusion EJ2"]
BE["后端Tauri 2 + Rust"] --> SeaORM["SeaORM"]
BE --> Tauri["Tauri 2"]
BE --> Reqwest["reqwest"]
BE --> Rayon["rayon"]
FE --> |invoke| Tauri
Tauri --> |命令| BE
```

图表来源
- `package.json#L19-L87`
- `src-tauri/Cargo.toml#L26-L66`
- `src-tauri/tauri.conf.json#L6-L11`

章节来源
- `package.json#L1-L90`
- `angular.json#L1-L79`
- `src-tauri/Cargo.toml#L1-L66`
- `src-tauri/tauri.conf.json#L1-L70`

## 性能考量
- 前端性能：按需懒加载路由、组件级变更检测优化、CSS 体积优化；使用 Syncfusion Tailwind3 样式减少冗余样式。
- 后端性能：Tokio 异步运行时、rayon 并行计算、SeaORM 预编译查询与连接池；日志过滤 sqlx 查询噪声，降低 IO 压力。
- 构建效率：pnpm + Cargo 双重高效包管理与编译工具链，缩短迭代周期。

## 故障排查指南
- 启动与窗口控制：若窗口最小化/最大化异常，检查根组件中窗口控制逻辑与 Tauri 插件权限。
- 通知与日志：若前端 Toast 未显示或后端通知无效，检查事件监听器注册与通知类型映射。
- 文件系统与深链：若文件读写失败或深链无法唤起，检查 tauri.conf.json 中的插件配置与深链 schemes。
- 数据库访问：若查询失败，确认 SeaORM 连接池初始化与表结构初始化命令是否正确执行。
- 认证与代理：若同花顺认证失败，检查自动登录流程与代理模式状态恢复逻辑。

章节来源
- `src/app/app.component.ts#L410-L458`
- `src/app/app.component.ts#L463-L536`
- `src-tauri/tauri.conf.json#L52-L68`
- `src-tauri/src/lib.rs#L61-L70`

## 结论
本系统通过 Angular 22 + Syncfusion EJ2 构建现代化前端界面，借助 Tauri 2 + Rust 实现高性能、安全可控的后端能力，结合 SeaORM 与 SQLite 形成清晰的数据访问层。模块化组件设计与事件驱动架构使系统具备良好的可维护性与扩展性。技术选型在性能、安全性与开发体验之间取得平衡，适合桌面端专业分析工具场景。

## 附录
- 快速开始与脚本说明：参见 README 中的“快速开始”与“NPM / PNPM 脚本说明”。

章节来源
- `README.md#L33-L87`