feat: 展示PDD商品和采购订单信息 (#164)

This commit is contained in:
chengma
2026-08-11 16:46:49 +08:00
parent 24497c55fd
commit 1f48d3a857
9 changed files with 319 additions and 31 deletions
+54 -24
View File
@@ -56,6 +56,18 @@ from qfluentwidgets import (
PAGE_SIZE = 50
CHECK_COLUMN = 0
TASK_TYPE_COLUMN = 1
GOODS_ID_COLUMN = 2
TITLE_COLUMN = 3
SHOP_COLUMN = 4
COLOR_COLUMN = 5
SIZE_COLUMN = 6
PRICE_COLUMN = 7
QUANTITY_COLUMN = 8
STATUS_COLUMN = 9
ORDER_NO_COLUMN = 10
DURATION_COLUMN = 11
UPDATED_AT_COLUMN = 12
REMOTE_TASK_ID_ROLE = Qt.UserRole + 1
@@ -76,6 +88,7 @@ class TaskRow:
status: str = "待执行"
latest_run_status: str = ""
duration_seconds: Optional[int] = None
order_no: str = ""
updated_at: str = ""
@@ -88,6 +101,7 @@ class TaskTableModel(QAbstractTableModel):
HEADERS = (
"选择",
"任务类型",
"PDD商品ID",
"商品标题",
"店铺名",
"颜色",
@@ -95,6 +109,7 @@ class TaskTableModel(QAbstractTableModel):
"价格",
"数量",
"状态",
"订单号",
"用时",
"更新时间",
)
@@ -138,15 +153,24 @@ class TaskTableModel(QAbstractTableModel):
return self._display_value(task, column)
if role == Qt.TextAlignmentRole:
if column in (0, 1, 8, 9):
if column in (
CHECK_COLUMN,
TASK_TYPE_COLUMN,
STATUS_COLUMN,
DURATION_COLUMN,
):
return Qt.AlignCenter
if column in (6, 7):
if column in (PRICE_COLUMN, QUANTITY_COLUMN):
return Qt.AlignRight | Qt.AlignVCenter
return Qt.AlignLeft | Qt.AlignVCenter
if role == Qt.ToolTipRole:
if column == 2:
if column == GOODS_ID_COLUMN:
return task.goods_id or "尚无PDD商品ID"
if column == TITLE_COLUMN:
return task.title or "尚未获取标题"
if column == ORDER_NO_COLUMN:
return task.order_no or "尚无订单号"
if role == REMOTE_TASK_ID_ROLE:
return task.remote_task_id
@@ -367,32 +391,36 @@ class TaskTableModel(QAbstractTableModel):
def _display_value(task: TaskRow, column: int) -> str:
if column == CHECK_COLUMN:
return ""
if column == 1:
if column == TASK_TYPE_COLUMN:
return task.task_type
if column == 2:
if column == GOODS_ID_COLUMN:
return task.goods_id or "—"
if column == TITLE_COLUMN:
return task.title or "尚未获取标题"
if column == 3:
if column == SHOP_COLUMN:
return task.shop_name or "—"
if column == 4:
if column == COLOR_COLUMN:
return task.color or "—"
if column == 5:
if column == SIZE_COLUMN:
return task.size or "—"
if column == 6:
if column == PRICE_COLUMN:
if task.price_cents is None:
return "—"
suffix = " 起" if task.price_is_starting else ""
return f"¥{task.price_cents / 100:.2f}{suffix}"
if column == 7:
if column == QUANTITY_COLUMN:
return "—" if task.quantity is None else str(task.quantity)
if column == 8:
if column == STATUS_COLUMN:
return task.status
if column == 9:
if column == ORDER_NO_COLUMN:
return task.order_no or "—"
if column == DURATION_COLUMN:
if task.latest_run_status == "running":
return "进行中"
if task.duration_seconds is None:
return "—"
return f"{max(0, task.duration_seconds)} 秒"
if column == 10:
if column == UPDATED_AT_COLUMN:
return task.updated_at or "—"
return ""
@@ -575,18 +603,20 @@ class PDDTaskPage(QWidget):
header = self.taskTable.horizontalHeader()
header.setSectionResizeMode(QHeaderView.Interactive)
header.setSectionResizeMode(2, QHeaderView.Stretch)
header.setSectionResizeMode(TITLE_COLUMN, QHeaderView.Stretch)
header.setMinimumSectionSize(64)
self.taskTable.setColumnWidth(0, 64)
self.taskTable.setColumnWidth(1, 82)
self.taskTable.setColumnWidth(3, 108)
self.taskTable.setColumnWidth(4, 108)
self.taskTable.setColumnWidth(5, 82)
self.taskTable.setColumnWidth(6, 96)
self.taskTable.setColumnWidth(7, 70)
self.taskTable.setColumnWidth(8, 116)
self.taskTable.setColumnWidth(9, 82)
self.taskTable.setColumnWidth(10, 156)
self.taskTable.setColumnWidth(CHECK_COLUMN, 64)
self.taskTable.setColumnWidth(TASK_TYPE_COLUMN, 82)
self.taskTable.setColumnWidth(GOODS_ID_COLUMN, 135)
self.taskTable.setColumnWidth(SHOP_COLUMN, 108)
self.taskTable.setColumnWidth(COLOR_COLUMN, 108)
self.taskTable.setColumnWidth(SIZE_COLUMN, 82)
self.taskTable.setColumnWidth(PRICE_COLUMN, 96)
self.taskTable.setColumnWidth(QUANTITY_COLUMN, 70)
self.taskTable.setColumnWidth(STATUS_COLUMN, 116)
self.taskTable.setColumnWidth(ORDER_NO_COLUMN, 190)
self.taskTable.setColumnWidth(DURATION_COLUMN, 82)
self.taskTable.setColumnWidth(UPDATED_AT_COLUMN, 156)
self.taskTable.viewport().installEventFilter(self)
self.emptyStateCard = CardWidget(self)