docs: 更新 README + CHANGELOG — web 端 / Docker / 修复记录

- README: 四种使用方式,新增 Web 服务/Docker 章节
- CHANGELOG: 完整的 Fixed 列表 (14 项修复)
- 测试数 69→82, Docker badge, axum badge

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-06-19 15:24:50 +08:00
parent 15b3119588
commit 4dc5f62b2e
2 changed files with 96 additions and 33 deletions
+62 -22
View File
@@ -7,10 +7,11 @@
<img src="https://img.shields.io/badge/version-0.1.0-blue" alt="version">
<img src="https://img.shields.io/badge/tauri-2.x-ffa03a" alt="tauri">
<img src="https://img.shields.io/badge/react-18-61dafb" alt="react">
<img src="https://img.shields.io/badge/axum-0.8-ff6b35" alt="axum">
<img src="https://img.shields.io/badge/rust-1.95-000000" alt="rust">
<img src="https://img.shields.io/badge/typescript-strict-blue" alt="typescript">
<img src="https://img.shields.io/badge/docker-ready-2496ed" alt="docker">
<img src="https://img.shields.io/badge/license-MIT-green" alt="license">
<img src="https://img.shields.io/badge/tests-69%20passed-brightgreen" alt="tests">
<img src="https://img.shields.io/badge/tests-82%20passed-brightgreen" alt="tests">
</p>
---
@@ -19,7 +20,7 @@
QRGen 是 **从零手写** 的 QR 码(二维码)生成器,完整实现 ISO/IEC 18004 国际标准。不依赖任何第三方 QR 编码库,所有算法(Galois 域运算、Reed-Solomon 纠错编码、BCH 格式编码、掩码评分)均从底层手搓。
支持 **种使用方式**:程序库(`qr-core`)、命令行(`qrgen`)、桌面 GUI`qrgen-gui`)。
支持 **种使用方式**:程序库(`qr-core`)、命令行(`qrgen`)、桌面 GUI`qrgen-gui`、Web 服务(`qrgen-web`
## 架构
@@ -37,12 +38,17 @@ graph TB
App --> History
end
subgraph Web["Web 服务 (axum)"]
HTML[内嵌 HTML 页面<br/>三栏 + 7 模式 + 实时预览]
API[/api/qr → PNG/SVG]
end
subgraph CLI["CLI 命令行"]
Clap[clap 参数解析]
end
subgraph IPC["Tauri IPC 桥接"]
Commands[encode_qr / export_png<br/>save_history / load_history / clear_history]
subgraph IPC["Tauri IPC"]
Commands[5 个 Tauri commands]
end
subgraph Core["Rust core 库 (qr-core)"]
@@ -58,6 +64,8 @@ graph TB
Modes --> Commands
Commands --> Encoder
Clap --> Encoder
HTML --> API
API --> Encoder
```
### 数据流水线
@@ -65,7 +73,7 @@ graph TB
```mermaid
sequenceDiagram
actor U as 用户
participant UI as React UI / CLI
participant UI as React UI / CLI / Web
participant Q as QrCode::encode()
participant E as 编码器
participant RS as Reed-Solomon
@@ -108,56 +116,75 @@ qrgen "https://example.com" -o qr.png -s 8
# 生成 SVG(高纠错)
qrgen "重要数据" -o qr.svg -l H
# 指定版本 + 反色
qrgen "test" -v 10 --invert
```
### GUI 桌面应用
- **7 种编码模式**:文本 / URL / WiFi / vCard / Email / 电话 / SMS
- **实时预览**200ms 防抖,SVG 即时渲染
- **实时预览**200ms 防抖,PNG 即时渲染
- **多格式导出**:PNG(可调模块大小)/ SVG / 复制到剪贴板
- **历史记录**:最近 50 条,点击回填,支持删除和清空
- **暗色模式**:跟随系统,磨砂玻璃效果
- **纠错级别可调**L (7%) / M (15%) / Q (25%) / H (30%)
### Web 服务
- **内嵌 HTML 界面**:复刻 GUI 三栏布局,7 种编码模式
- **REST API**`GET /api/qr?text=&level=&margin=&size=&fmt=svg` → PNG / SVG
- **Docker 部署**17.7MB Alpine 镜像,开箱即用
## 安装
从源码构建
### 从源码构建
```bash
# 克隆
git clone git@lhy-git.liuhangyv.top:Serendipity/QRGen.git
cd QRGen
# 安装前端依赖
cd gui/src-frontend && pnpm install && cd ../..
# 构建 CLI
# CLI
cargo build --release -p qrgen
# 构建 GUI + NSIS 安装包
# 1. 先构建前端
# Web 服务
cargo build --release -p qrgen-web
# GUI + NSIS 安装包
cd gui/src-frontend && pnpm build && cd ../..
# 2. 打包
cd gui && src-frontend/node_modules/.bin/tauri.cmd build
```
> **要求**Windows 10+自带 WebView2),Rust 1.95+Node.js 22+pnpm
> **要求**Windows 10+GUI 需 WebView2),Rust 1.95+Node.js 22+
### DockerWeb 服务)
```bash
# 拉取镜像(或本地构建)
docker build -t qrgen-web -f web/Dockerfile .
# 运行
docker run -d --name qrgen-web --restart unless-stopped -p 3000:3000 qrgen-web
# docker-compose
# 见 G:\qrgen-web\docker-compose.yamlNAS 部署用)
```
## 开发
```bash
# 开发模式 GUI(热更新,需先 pnpm install
# 开发模式 GUI(热更新)
cd gui/src-frontend && pnpm dev # 终端1: 前端
cargo run -p qrgen-gui # 终端2: Rust 后端
# CLI 开发
cargo run -p qrgen -- "Hello World"
# Web 开发
cargo run -p qrgen-web # → http://localhost:3000
# 全部测试
cargo test # Rust: 69 tests
cargo test # Rust: 82 tests
# 前端类型检查
cd gui/src-frontend && pnpm tsc --noEmit
@@ -174,10 +201,12 @@ cargo clippy -- -D warnings
| GUI 前端 | React 18 + TypeScript (strict) |
| UI 样式 | TailwindCSS 3 |
| 状态管理 | React Context + useReducer |
| Web 服务 | axum 0.8 + tokio |
| 核心库 | Rust (qr-core) |
| CLI | clap + anyhow |
| 前端包管理 | pnpm |
| 打包 | NSIS |
| 桌面打包 | NSIS |
| 容器化 | Docker (alpine, 17.7MB) |
### 项目结构
@@ -206,6 +235,7 @@ QRGen/
├── cli/ # CLI 命令行工具
│ └── src/main.rs # clap 参数解析
├── gui/ # Tauri 桌面应用
│ ├── capabilities/default.json # ACL 权限
│ ├── src/
│ │ ├── main.rs # Windows 子系统入口
│ │ └── lib.rs # 5 个 Tauri commands
@@ -216,9 +246,17 @@ QRGen/
│ │ ├── modes/ # 7 种模式表单
│ │ ├── hooks/ # useQrEncode(防抖+编码)
│ │ ├── store/ # Context + useReducer
│ │ ── types/ # TypeScript 类型
│ │ ── types/ # TypeScript 类型
│ │ └── utils/ # qrText.ts 文本构造工具
│ └── tauri.conf.json # 窗口 + NSIS 打包配置
── Cargo.toml # Workspace: core + cli + gui
── web/ # Web 服务
│ ├── Dockerfile # rust-alpine 多阶段构建
│ ├── src/
│ │ ├── main.rs # axum HTTP 服务
│ │ └── templates/
│ │ └── index.html # 内嵌 GUI 风格页面
├── .dockerignore
└── Cargo.toml # Workspace: core + cli + gui + web
```
## 支持规格
@@ -229,7 +267,9 @@ QRGen/
| 纠错级别 | L (7%) / M (15%) / Q (25%) / H (30%) |
| 编码模式 | 数字 / 字母数字 / 字节 / 汉字 (Shift JIS) |
| 输出格式 | PNG / SVG / 终端 ASCII |
| 使用方式 | Library / CLI / GUI / Web API |
| 自动版本选择 | 根据数据长度 + 纠错级别 |
| Docker 镜像 | ~18MB (alpine) |
## 许可证