# 技术栈选型

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

## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录：版本兼容性矩阵与升级策略](#附录版本兼容性矩阵与升级策略)

## 引言
本文件面向GSDJGXApp的技术栈选型，围绕前端框架Angular 22、跨平台桌面框架Tauri 2、后端语言Rust、数据库与ORM（SeaORM）、组件库Syncfusion EJ2以及本地数据库SQLite进行系统化说明，并结合仓库中实际配置与代码实现，给出可落地的选型依据、架构交互与升级建议。

## 项目结构
该项目采用“Angular前端 + Tauri 2桌面壳 + Rust后端”的混合架构：
- 前端：Angular 22，构建产物由Tauri托管；TypeScript严格模式开启，启用ES2022模块与bundler解析。
- 桌面壳：Tauri 2，开发时通过Angular DevServer提供前端资源，打包时将dist输出注入。
- 后端：Rust（Edition 2021），使用SeaORM连接SQLite，提供命令接口供前端调用。
- 组件库：Syncfusion EJ2，覆盖按钮、布局、输入、导航、网格、图表等金融场景常用组件。
- 数据库：SQLite（通过SeaORM/sqlx驱动），用于本地数据持久化与计算支撑。

```mermaid
graph TB
subgraph "前端(Angular 22)"
A["Angular 应用<br/>构建产物: dist/gsdjgxapp"]
B["@tauri-apps/api<br/>前端调用后端命令"]
C["Syncfusion EJ2 组件库"]
end
subgraph "桌面壳(Tauri 2)"
D["tauri.conf.json<br/>构建/安全/插件配置"]
E["lib.rs<br/>注册插件/命令/状态管理"]
end
subgraph "后端(Rust)"
F["Cargo.toml<br/>依赖: SeaORM/reqwest/tokio/rayon"]
G["SQLite 数据库<br/>sqlx-sqlite"]
end
A --> D
B --> E
C --> A
D --> E
E --> F
F --> G
```

**图表来源**
- `angular.json#L15-L46`
- `src-tauri/tauri.conf.json#L6-L11`
- `src-tauri/src/lib.rs#L33-L304`
- `src-tauri/Cargo.toml#L26-L59`

**章节来源**
- `angular.json#L1-L79`
- `src-tauri/tauri.conf.json#L1-L70`
- `src-tauri/src/lib.rs#L1-L308`
- `src-tauri/Cargo.toml#L1-L66`

## 核心组件
- 前端框架与工具链
  - Angular 22：统一的组件化UI框架，配合TypeScript获得强类型保障与编译期错误检测。
  - TypeScript：严格模式、ES2022目标、bundler解析，提升开发体验与构建效率。
  - 构建与开发：Angular CLI构建器、开发服务器端口1420、生产构建开启hashing与体积预算。
- 桌面壳与系统集成
  - Tauri 2：以Web前端为UI层，Rust提供系统级能力（文件、进程、对话框、日志、更新器、剪贴板、深链等）。
  - 配置：devUrl指向Angular DevServer；bundle targets包含NSIS；Windows WebView安装模式嵌入引导。
- 后端与数据层
  - Rust：Tokio运行时、Rayon并行、OpenAI/HTTP客户端、日志插件、状态管理。
  - SeaORM：类型安全ORM，启用sqlx-sqlite、runtime-tokio-rustls、with-chrono宏，支持SQLite。
- 组件库
  - Syncfusion EJ2：覆盖按钮、布局、输入、导航、网格、日历、通知、富文本、电子表格等，适配金融业务复杂界面。
- 本地数据库
  - SQLite：轻量、易部署、无需额外服务进程，适合本地数据持久化与离线场景。

**章节来源**
- `package.json#L19-L87`
- `tsconfig.json#L3-L38`
- `angular.json#L15-L46`
- `src-tauri/tauri.conf.json#L6-L51`
- `src-tauri/Cargo.toml#L26-L59`
- `src/app/styles.scss#L12-L31`

## 架构总览
下图展示前端、桌面壳与后端之间的调用关系与职责边界：

```mermaid
sequenceDiagram
participant UI as "Angular 组件"
participant API as "SystemApiService"
participant Tauri as "Tauri 命令桥"
participant Rust as "Rust 命令实现(lib.rs)"
participant DB as "SQLite/SeaORM"
UI->>API : "调用系统/文件/配置等API"
API->>Tauri : "invoke('command', payload)"
Tauri->>Rust : "分发到对应命令处理函数"
Rust->>DB : "查询/事务/批量执行"
DB-->>Rust : "结果集/影响行数"
Rust-->>Tauri : "序列化响应"
Tauri-->>API : "返回结果"
API-->>UI : "更新视图/通知"
```

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

**章节来源**
- `src/app/services/api/system-api.service.ts#L1-L273`
- `src-tauri/src/lib.rs#L77-L304`

## 详细组件分析

### 前端框架：Angular 22 选型要点
- TypeScript优势
  - 严格编译选项：noImplicitReturns、noFallthroughCasesInSwitch、strictInjectionParameters等，降低运行时风险。
  - ES2022目标与bundler解析：提升模块加载性能与现代语法支持。
- 组件化设计
  - 站点入口在main.ts中通过bootstrapApplication挂载根组件，路由采用HashLocation策略，便于打包与分发。
  - app.component.ts集中管理菜单、面板、通知、深链与系统操作，体现清晰的职责划分。
- 生态系统支持
  - 丰富的第三方库与插件生态，如@syncfusion/ej2-angular-*、echarts、mathjs等，满足金融计算与可视化需求。
  - Tauri官方API与插件生态完善，便于系统级能力接入。

**章节来源**
- `tsconfig.json#L6-L38`
- `src/app/app.config.ts#L7-L12`
- `src/main.ts#L1-L23`
- `src/app/app.component.ts#L1-L851`
- `package.json#L19-L87`

### 桌面壳：Tauri 2 替代 Electron 的技术考量
- 应用体积
  - Tauri 2使用精简的WebView内核，相较Electron显著降低二进制体积与运行时占用。
- 运行时性能
  - 更少的JavaScript上下文与更低的内存占用，提升启动速度与长时稳定性。
- 安全特性
  - 默认最小权限模型，通过显式声明权限与能力控制访问范围；内置日志、更新器、深链等插件增强安全性。
- 与Angular的集成
  - tauri.conf.json配置devUrl指向Angular DevServer，构建时注入dist输出，开发与发布流程清晰。

**章节来源**
- `src-tauri/tauri.conf.json#L6-L11`
- `angular.json#L47-L61`

### 后端语言：Rust 在金融计算场景中的优势
- 内存安全
  - 所有权系统与借用检查器避免空指针、缓冲区溢出等常见问题，提升系统可靠性。
- 并行计算能力
  - Rayon提供高效并行迭代，适合大规模财务指标与矩阵运算；Tokio异步运行时支撑高并发请求。
- 零成本抽象
  - 高层抽象不牺牲性能，结合OpenAI/HTTP客户端与Excel解析库，兼顾业务灵活性与执行效率。

**章节来源**
- `src-tauri/Cargo.toml#L42-L59`
- `src-tauri/src/lib.rs#L33-L70`

### ORM：SeaORM 相比其他ORM的优势
- 类型安全
  - 自动生成实体与查询类型，减少运行时错误；与chrono集成，简化时间字段处理。
- 性能表现
  - 基于sqlx的高性能SQL执行；支持批量执行与事务，满足金融数据高频写入场景。
- 开发效率
  - 宏自动生成CRUD与查询方法，减少样板代码；支持SQLite，便于本地开发与测试。

**章节来源**
- `src-tauri/Cargo.toml#L38-L38`
- `src-tauri/src/lib.rs#L137-L144`

### 组件库：Syncfusion EJ2 的选择理由
- 金融行业应用经验
  - 组件覆盖广泛，尤其在数据表格、图表、日历、通知等金融业务高频场景表现稳定。
- 组件丰富度
  - 按钮、布局、输入、导航、网格、日历、弹窗、通知、富文本、电子表格等一体化解决方案。
- 技术支持
  - 官方包与样式体系完善，结合Tailwind3主题，易于定制与维护。

**章节来源**
- `package.json#L29-L54`
- `src/app/styles.scss#L12-L31`
- `src/main.ts#L12-L12`

### 本地数据库：SQLite 的适用性分析
- 部署简单性
  - 无服务进程依赖，单文件即可运行，便于分发与回滚。
- 性能特点
  - 对中小规模数据与本地计算场景性能良好；结合SeaORM与批量执行优化，满足日常业务。
- 扩展性考虑
  - 大数据量或高并发写入场景建议评估迁移至PostgreSQL/MySQL；当前项目以SQLite为主，满足本地化需求。

**章节来源**
- `src-tauri/Cargo.toml#L38-L38`
- `src-tauri/src/lib.rs#L137-L144`

## 依赖关系分析
- 前端对桌面壳与后端的依赖
  - 前端通过@tauri-apps/api调用Rust命令；SystemApiService封装invoke调用，统一错误与返回处理。
- 桌面壳对后端的依赖
  - lib.rs集中注册插件与命令；tauri.conf.json定义构建、安全与插件参数。
- 后端对数据库与工具库的依赖
  - SeaORM负责类型安全与SQL执行；Rayon、Tokio、reqwest、OpenAI等库支撑计算与网络能力。

```mermaid
graph LR
FE["Angular 前端"] --> API["@tauri-apps/api"]
API --> CMD["Tauri 命令桥"]
CMD --> L["lib.rs 命令注册"]
L --> ORM["SeaORM/SQLite"]
```

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

**章节来源**
- `src/app/services/api/system-api.service.ts#L1-L273`
- `src-tauri/src/lib.rs#L33-L304`

## 性能考量
- 前端性能
  - 生产构建开启outputHashing与体积预算，有助于CDN缓存与体积控制。
  - TypeScript严格模式与ES2022目标提升编译质量与运行时性能。
- 桌面壳性能
  - Tauri 2较Electron体积更小、内存占用更低，适合本地化金融应用。
- 后端性能
  - SeaORM基于sqlx，具备高性能SQL执行；Rayon并行与Tokio异步运行时提升吞吐。
- 数据库性能
  - SQLite适合本地与中小规模数据；建议对热点查询建立索引并使用批量执行优化。

**章节来源**
- `angular.json#L29-L43`
- `tsconfig.json#L13-L18`
- `src-tauri/Cargo.toml#L38-L38`

## 故障排查指南
- 前端启动失败
  - 检查Angular DevServer端口1420是否被占用；确认tauri.conf.json的devUrl配置正确。
- 命令调用异常
  - 查看SystemApiService的invoke调用与lib.rs命令注册是否一致；关注错误日志与通知。
- 日志定位
  - Tauri日志插件按天轮转，过滤掉sqlx查询日志，便于定位业务问题。
- 更新与深链
  - 更新器插件已启用；深链在Windows/Linux注册，注意协议与scheme配置。

**章节来源**
- `src-tauri/tauri.conf.json#L6-L68`
- `src-tauri/src/lib.rs#L34-L51`
- `src/app/services/api/system-api.service.ts#L135-L162`

## 结论
本项目采用Angular 22 + Tauri 2 + Rust + SeaORM + Syncfusion EJ2 + SQLite的组合，既满足金融业务对组件丰富度与类型安全的需求，又兼顾了本地化应用对体积、性能与安全的要求。整体架构清晰、职责分离明确，适合持续演进与规模化扩展。

## 附录：版本兼容性矩阵与升级策略
- 版本兼容性矩阵（基于仓库配置，应用版本 2.1.498）
  - Angular 22.x（Zoneless 变更检测 + Signals）→ TypeScript ~6.0.x → ES2022 → Bundler解析
  - Tauri 2.11.x → Rust Edition 2021 → rustc ≥ 1.94（`rust-version = "1.94"`，sqlx 0.9 与 SeaORM 2.0 的最低要求）
  - SeaORM 2.0.x → sqlx 0.9（sqlx-sqlite）→ runtime-tokio-rustls → with-chrono
  - Syncfusion EJ2 33.2.x（UI 文本统一简体中文：syncfusion-ej2-zh-cn）
  - 网络/AI：reqwest 0.13、openai-api-rs 10
- 升级策略
  - 前端：优先升级Angular minor版本，同步升级TypeScript与CLI；验证构建与测试通过后再升级patch。
  - 桌面壳：Tauri 2.x升级需关注API变更与插件兼容性；建议逐个插件升级并回归测试。
  - 后端：Rust版本升级需验证编译与运行时行为；SeaORM升级关注实体与查询变更。
  - 数据库：SQLite迁移前做好备份与回滚方案；大表结构变更建议分阶段执行。
  - 组件库：Syncfusion升级前进行UI回归测试与主题一致性校验。

**章节来源**
- `package.json#L19-L87`
- `tsconfig.json#L13-L18`
- `src-tauri/Cargo.toml#L2-L8`
- `src-tauri/tauri.conf.json#L2-L6`