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

57 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 足迹 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/`。备份 = 复制该目录。