桌面应用(Tauri+React+SQLite):时间线/记录/学年学科成绩梯度/统计/类型与字段模板/附件内容寻址/详情视图/PWA 同步服务端(sync-server):多用户+邀请码/LWW推拉/seq游标/附件去重/Docker部署 多端同步地基:uuid v7/HLC混合逻辑时钟/软删除墓碑/sync_oplog,Node与Rust双端一致并通过自动化测试
57 lines
2.6 KiB
Markdown
57 lines
2.6 KiB
Markdown
# 足迹 Footprints
|
||
|
||
个人留痕系统 · 桌面应用(Tauri 2 + React 19 + SQLite)+ 移动端 PWA。
|
||
设计文档见仓库根目录 `DESIGN.md`;同步服务端见 `sync-server/`。
|
||
|
||
## 目录结构
|
||
|
||
app/
|
||
src/ React 前端(时间线 / 记录 / 统计 / 类型 / 字典)
|
||
src-tauri/ Tauri 2 桌面壳 + Rust 后端(rusqlite,26 个 IPC 命令 + 同步地基)
|
||
public/ PWA 清单 / Service Worker / 图标
|
||
server/dev-bridge.mjs 开发桥接:HTTP 暴露与 Tauri IPC 相同的命令契约
|
||
server/db.mjs 桥接与种子脚本共用的数据层(node:sqlite)
|
||
server/seed.mjs 演示数据(仅当库为空时写入)
|
||
schema.sql 数据库 schema(Rust 与 Node 共用同一份,v2 含同步元数据)
|
||
tools/pnpm.cjs 自包含 pnpm(本机无全局 npm/pnpm 时使用)
|
||
sync-server/ 自建同步服务(Docker 部署,协议已冻结)
|
||
|
||
## 浏览器预览(无需 Rust)
|
||
|
||
node ../tools/pnpm.cjs bridge # 终端 1:数据桥接(含 dist 静态托管)
|
||
node ../tools/pnpm.cjs dev # 终端 2:前端热更(http://localhost:5173)
|
||
|
||
或构建后直接访问桥接托管页:
|
||
|
||
node ../tools/pnpm.cjs build # tsc 类型检查 + vite 打包(含 PWA 资源)
|
||
node server/seed.mjs # 可选:写入演示数据
|
||
|
||
## 桌面应用打包(Windows)
|
||
|
||
前置:Rust stable-msvc(scripts/setup-rust.ps1 一键安装,MSVC Build Tools 需已具备)。
|
||
|
||
node ../tools/pnpm.cjs build # 先产出 dist
|
||
node ../tools/pnpm.cjs tauri build
|
||
|
||
产物:`src-tauri/target/release/bundle/nsis/*-setup.exe`(NSIS 安装包)。
|
||
开发模式:`node ../tools/pnpm.cjs tauri dev`。
|
||
|
||
## 移动端(PWA)
|
||
|
||
前端已做响应式与 PWA 改造(manifest + Service Worker + 图标):
|
||
|
||
- 桌面壳内运行时自动跳过 SW 注册
|
||
- 浏览器/手机访问托管页时自动注册 SW,可"添加到主屏幕"离线壳启动
|
||
- 同步服务部署后,手机 PWA 直连同一账号数据
|
||
|
||
原生 Android 壳(Tauri mobile)为可选后续项,需要 Android SDK/NDK;iOS 构建需 macOS。
|
||
|
||
## 命令契约
|
||
|
||
前端统一经 `src/lib/api.ts` 调用:浏览器模式走 `POST /api/<command>`(开发桥接),
|
||
桌面模式走 Tauri `invoke(command, { payload })`。两端实现同一组命令,
|
||
含多端同步地基:每行携带 uuid/hlc/origin,删除为墓碑,写入进 sync_oplog。
|
||
|
||
数据与附件位置:桌面版在系统应用数据目录(`%APPDATA%/com.footprints.app`),
|
||
开发预览在 `app/.data/`。备份 = 复制该目录。
|