feat: 完成Tab①任务导入列表

实现 CollectTab 与 TaskTableModel,Tab① 接入导入 Excel 按钮、QTableView 任务列表和未匹配别名略过标记。

新增 GUI 测试覆盖 Tab① 接入、任务展示、未匹配标记和导入刷新;同步任务状态、API 合约、当前状态与 progress。

加入标准空模板 shopee待处理任务模板.xlsx,并更新 ignore/文档规则:模板可提交,运营填写后的 Excel 业务文件默认忽略。
This commit is contained in:
chengma
2026-06-27 11:29:48 +08:00
parent 893aa56881
commit 6f36118b7e
11 changed files with 363 additions and 19 deletions
+13 -4
View File
@@ -95,8 +95,8 @@ class ExcelError(RuntimeError): ...
OPENPYXL_IMPORT_ERROR: Exception | None
import_tasks(file_paths, path=None, note=None, write_db=True) -> dict
# file_paths 可传单个路径或多个路径。
# 只解析【输入列】:账号名(可选)、别名、商品id;并记录
# file_paths 可传单个路径或多个路径;标准空模板为根目录 shopee待处理任务模板.xlsx。
# 只解析【输入列】:账号名(可选)、别名、商品id;推荐表头固定为 账号名 | 别名 | 商品id,并记录
# source_file/source_file_abs/source_sheet/source_row/row_key。
# 默认 write_db=True:有有效行时创建 batch 并写入 tasks。
# -> {
@@ -124,7 +124,7 @@ export_copy(batch_id, out_dir_or_path, path=None) -> dict
# T-201 仅保证函数存在;实际回写/另存实现留给 T-204/T-403。
```
列模板见 [架构 5.3](04-architecture.md);别名以“别名”列为权威。
列模板见 [架构 5.3](04-architecture.md);别名以“别名”列为权威,必须与 ④ 账号管理中的账号别名一致。`shopee待处理任务模板.xlsx` 是可提交的标准空模板;运营填写后的 Excel 副本属于业务数据,不提交。
## config 模块(`app/config.py`,已建)
@@ -271,13 +271,15 @@ render_prompt(template_text, task) -> str
# GUI 入口
main() -> int # 创建 QApplication + MainWindow
class MainWindow(QMainWindow) # QTabWidget: ①②③④⑤;支持注入 db_path/config 便于测试
class CollectTab(QWidget) # ① 导入采集:导入 Excel + QTableView 任务列表 + 未匹配略过标记
class TaskTableModel(QAbstractTableModel) # 任务表格模型:账号/别名/商品ID/阶段;未匹配别名显示“略过”
class AccountsTab(QWidget) # ④ 账号管理:表格 + 增删改 + 启动登录 + 检测登录 + 快捷方式
class AccountDialog(QDialog) # 账号编辑弹窗;密码 QLineEdit.Password
TAB_TITLES: list[str] # 固定 Tab 顺序
TAB_STYLE: str # 顶层 Tab 栏防误点样式:最小宽度/padding/间距/当前态
```
`MainWindow` 已实现五 Tab 与 ④ 账号管理;①②③⑤ 仍为空壳,业务控件按后续 Tab 任务逐步填充。缺 PySide6 时 `main()` 返回 1 并输出明确提示。
`MainWindow` 已实现五 Tab、① 导入采集任务列表与 ④ 账号管理;②③⑤ 仍为空壳,业务控件按后续 Tab 任务逐步填充。缺 PySide6 时 `main()` 返回 1 并输出明确提示。
主 Tab 栏必须在 `MainWindow` 初始化时应用 `TAB_STYLE`:5 个 Tab 不使用 Qt 默认紧凑宽度,需保证点击区域稳定、间距清晰、当前 Tab 高亮明显。该样式属于全局导航基础,不归后续业务 Tab 任务重复实现。
@@ -287,6 +289,13 @@ TAB_STYLE: str # 顶层 Tab 栏防误点样式:
- 弹窗字段:账号名、别名、地区、调试端口、密码、备注、slug、数据目录;密码框使用打码显示。
- 「启动登录」只启动 Chrome,人工登录;「检测登录」用 worker 跑 `accounts.detect_login()` 并刷新状态列;「快捷方式」调用 `accounts.create_shortcut()` 生成默认桌面 `.lnk`。
① 导入采集当前要点(T-202):
- 「导入 Excel...」按钮调用 `excel.import_tasks(file_paths, path=db_path)`,导入成功后刷新当前批次任务。
- 任务列表使用 `QTableView + TaskTableModel`,列为:账号、别名、商品ID、阶段。
- 账号列优先显示匹配到的 `accounts.account_name`;未匹配账号时保留 Excel 输入账号名。
- 别名未匹配 `accounts.alias` 时不立即写库为 skipped,只在表格阶段列显示“略过”,真正跳过入库留给采集执行阶段。
## workers 模块(`app/workers.py`,已建,PySide6)
```python