Files
FootPrint/app/README.md
T
root 42ca57abfd feat: 足迹 Footprints 个人留痕系统
桌面应用(Tauri+React+SQLite):时间线/记录/学年学科成绩梯度/统计/类型与字段模板/附件内容寻址/详情视图/PWA

同步服务端(sync-server):多用户+邀请码/LWW推拉/seq游标/附件去重/Docker部署

多端同步地基:uuid v7/HLC混合逻辑时钟/软删除墓碑/sync_oplog,Node与Rust双端一致并通过自动化测试
2026-10-16 13:53:15 +08:00

2.6 KiB
Raw Blame History

足迹 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/。备份 = 复制该目录。