baseline: 薪酬逻辑收口到 shared/payroll.js 后的当前全量状态
这是第一个包含完整工作区的提交,也是后续「拆 SFC / 上 Vite」的回滚基线。 此前的提交均为 index.html 单文件历史快照,由 .bak 文件重建。 当前状态(提交前已实测): - index.html 内联薪酬算法已删除,改调 WHTPayroll - shared/payroll.js 为唯一薪酬实现,浏览器与 Node 共用 - 对外接口未变:aggregateMonth / isCutEdge / payDayKind 等保留同名薄包装 未入库内容见 .gitignore:依赖、Chrome 验证 profile、验证截图、 运行时 sqlite 数据与日志、时间戳备份、.trash。
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
-- 工时记账服务端 schema
|
||||
-- 同时兼容 VPS 上的 node:sqlite 与 Cloudflare D1(都是 SQLite 方言)
|
||||
-- 设计要点:
|
||||
-- 1. users.rev 是该用户的单调递增版本号,任何写入都 +1,客户端靠它做增量拉取
|
||||
-- 2. records / month_adjust 用 deleted 墓碑标记而非物理删除,否则增量同步无法传播「删除」
|
||||
-- 3. 所有时间戳统一存 ISO 8601 字符串(UTC),避免 D1 与 SQLite 的时间函数差异
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
username TEXT NOT NULL UNIQUE,
|
||||
pw_hash TEXT NOT NULL,
|
||||
pw_salt TEXT NOT NULL,
|
||||
pw_iter INTEGER NOT NULL,
|
||||
rev INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sessions (
|
||||
token_hash TEXT PRIMARY KEY,
|
||||
user_id INTEGER NOT NULL,
|
||||
created_at TEXT NOT NULL,
|
||||
expires_at TEXT NOT NULL
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_sessions_user ON sessions(user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_sessions_exp ON sessions(expires_at);
|
||||
|
||||
-- 每日打卡:主键 (user_id, day),day 形如 2026-09-08
|
||||
CREATE TABLE IF NOT EXISTS records (
|
||||
user_id INTEGER NOT NULL,
|
||||
day TEXT NOT NULL,
|
||||
status TEXT,
|
||||
shift_type TEXT,
|
||||
hours REAL,
|
||||
contraband_found INTEGER NOT NULL DEFAULT 0,
|
||||
contraband_missed INTEGER NOT NULL DEFAULT 0,
|
||||
other_penalty REAL,
|
||||
penalty_reason TEXT,
|
||||
deleted INTEGER NOT NULL DEFAULT 0,
|
||||
rev INTEGER NOT NULL,
|
||||
updated_at TEXT NOT NULL,
|
||||
PRIMARY KEY (user_id, day)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_records_rev ON records(user_id, rev);
|
||||
|
||||
-- 月度奖惩终稿:主键 (user_id, month),month 形如 2026-09
|
||||
-- status = draft(草稿,不计入金额) | final(组长审核定稿,计入金额)
|
||||
CREATE TABLE IF NOT EXISTS month_adjust (
|
||||
user_id INTEGER NOT NULL,
|
||||
month TEXT NOT NULL,
|
||||
status TEXT NOT NULL,
|
||||
final_amount REAL,
|
||||
note TEXT,
|
||||
finalized_at TEXT,
|
||||
deleted INTEGER NOT NULL DEFAULT 0,
|
||||
rev INTEGER NOT NULL,
|
||||
updated_at TEXT NOT NULL,
|
||||
PRIMARY KEY (user_id, month)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_adjust_rev ON month_adjust(user_id, rev);
|
||||
|
||||
-- 设置整体存一份 JSON:字段会随功能迭代增减,拆列反而不好演进
|
||||
CREATE TABLE IF NOT EXISTS settings (
|
||||
user_id INTEGER PRIMARY KEY,
|
||||
json TEXT NOT NULL,
|
||||
rev INTEGER NOT NULL,
|
||||
updated_at TEXT NOT NULL
|
||||
);
|
||||
Reference in New Issue
Block a user