feat: 完成Tab④账号管理

- 新增 accounts 服务层,封装账号 CRUD、目录创建、端口分配与登录检测

- 接入 PySide6 账号管理 Tab:表格、账号弹窗、启动登录、后台检测登录

- 密码仅本地保存并在 UI 打码,表格不展示明文;不自动登录或填密码

- 增加顶部 Tab 栏防误点样式,扩大点击区域并高亮当前 Tab

- 补充账号服务和 GUI 单元测试,并同步架构、API、路由、任务和进度文档
This commit is contained in:
chengma
2026-06-27 10:30:45 +08:00
parent 479ab5c41d
commit 598df5f20b
11 changed files with 970 additions and 40 deletions
+13 -7
View File
@@ -19,6 +19,7 @@ DEFAULT_BUSY_TIMEOUT_MS = 5000
VALID_BATCH_FIELDS = {"source_files_json", "status", "note"}
VALID_ACCOUNT_FIELDS = {
"account_name",
"alias",
"region_host",
"slug",
"user_data_dir",
@@ -354,19 +355,24 @@ def add_account(
return get_account_by_alias(alias, conn=database)
def update_account(alias, path=None, conn=None, **fields) -> None:
def update_account(account_alias, path=None, conn=None, **fields) -> None:
_validate_fields(fields, VALID_ACCOUNT_FIELDS)
if not fields:
return
fields["updated_at"] = _now()
assignments = ", ".join(f"{field} = ?" for field in fields)
params = list(fields.values()) + [alias]
params = list(fields.values()) + [account_alias]
with _connection(conn, path) as database:
with database:
database.execute(
f"UPDATE accounts SET {assignments} WHERE alias = ?",
params,
)
try:
with database:
database.execute(
f"UPDATE accounts SET {assignments} WHERE alias = ?",
params,
)
except sqlite3.IntegrityError as exc:
raise DbError(
f"账号别名或 slug 已存在: {fields.get('alias', account_alias)}"
) from exc
def delete_account(alias, path=None, conn=None) -> None: