v1.1.0 — 心愿清单
- 新增 wishes 表 (schema v2),含名称/优先级/截止时间/完成状态 - API: GET/POST/PUT/DELETE /api/wishes + PUT /api/wishes/reorder - 侧边栏心愿清单面板:checklist + 新增表单 - 完成勾选 → 删除线;优先级标签(红/黄/灰) - HTML5 原生拖拽排序,松开即保存 - 编辑模式切换:默认隐藏新增/删除按钮
This commit is contained in:
72
database.py
72
database.py
@@ -11,7 +11,7 @@ os.makedirs(DB_DIR, exist_ok=True)
|
||||
DB_PATH = os.path.join(DB_DIR, 'ziwei_power.db')
|
||||
|
||||
# 当前数据库 schema 版本 —— 改表结构时必须 +1 并补迁移逻辑
|
||||
CURRENT_SCHEMA_VERSION = 1
|
||||
CURRENT_SCHEMA_VERSION = 2
|
||||
|
||||
|
||||
def get_conn():
|
||||
@@ -55,6 +55,20 @@ def init_db():
|
||||
)
|
||||
''')
|
||||
|
||||
if current < 2:
|
||||
# v2: 心愿清单
|
||||
conn.execute('''
|
||||
CREATE TABLE IF NOT EXISTS wishes (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
priority TEXT NOT NULL DEFAULT '中',
|
||||
deadline TEXT NOT NULL DEFAULT '',
|
||||
done INTEGER NOT NULL DEFAULT 0,
|
||||
sort_order INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TEXT NOT NULL
|
||||
)
|
||||
''')
|
||||
|
||||
# ── 将来加字段/改表在此扩展 ──
|
||||
# if current < 2:
|
||||
# conn.execute('ALTER TABLE checkins ADD COLUMN tags TEXT DEFAULT ""')
|
||||
@@ -126,3 +140,59 @@ def get_all_checkins():
|
||||
'updated_at': row['updated_at']
|
||||
})
|
||||
return results
|
||||
|
||||
|
||||
# ── 心愿清单 CRUD ──────────────────────────────────
|
||||
|
||||
def get_wishes():
|
||||
"""获取所有心愿,按 sort_order 排序"""
|
||||
conn = get_conn()
|
||||
rows = conn.execute('SELECT * FROM wishes ORDER BY sort_order').fetchall()
|
||||
conn.close()
|
||||
return [dict(row) for row in rows]
|
||||
|
||||
|
||||
def save_wish(name, priority, deadline):
|
||||
"""新增一条心愿"""
|
||||
now = datetime.now().isoformat()
|
||||
conn = get_conn()
|
||||
max_order = conn.execute('SELECT COALESCE(MAX(sort_order), -1) + 1 AS n FROM wishes').fetchone()['n']
|
||||
conn.execute(
|
||||
'INSERT INTO wishes (name, priority, deadline, done, sort_order, created_at) VALUES (?, ?, ?, 0, ?, ?)',
|
||||
(name, priority, deadline, max_order, now)
|
||||
)
|
||||
conn.commit()
|
||||
wish_id = conn.execute('SELECT last_insert_rowid()').fetchone()[0]
|
||||
conn.close()
|
||||
return wish_id
|
||||
|
||||
|
||||
def update_wish(wish_id, **kwargs):
|
||||
"""更新心愿字段"""
|
||||
allowed = ['name', 'priority', 'deadline', 'done']
|
||||
updates = {k: v for k, v in kwargs.items() if k in allowed}
|
||||
if not updates:
|
||||
return
|
||||
conn = get_conn()
|
||||
sets = ', '.join(f'{k} = ?' for k in updates)
|
||||
vals = list(updates.values()) + [wish_id]
|
||||
conn.execute(f'UPDATE wishes SET {sets} WHERE id = ?', vals)
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
|
||||
def delete_wish(wish_id):
|
||||
"""删除心愿"""
|
||||
conn = get_conn()
|
||||
conn.execute('DELETE FROM wishes WHERE id = ?', (wish_id,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
|
||||
def reorder_wishes(order_list):
|
||||
"""批量更新排序:order_list = [id1, id2, ...]"""
|
||||
conn = get_conn()
|
||||
for idx, wid in enumerate(order_list):
|
||||
conn.execute('UPDATE wishes SET sort_order = ? WHERE id = ?', (idx, wid))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
Reference in New Issue
Block a user