diff --git a/tests/test_douyu_collab_orders.py b/tests/test_douyu_collab_orders.py index df477c3..86ee45f 100644 --- a/tests/test_douyu_collab_orders.py +++ b/tests/test_douyu_collab_orders.py @@ -432,6 +432,7 @@ class TestDouyuCollabOrders: assert result["items"][0]["order_no"] == "DY-EXP-1" assert result["items"][0]["ck_text"] == self.account.cookie assert result["items"][0]["account_username"] == self.account.username + assert result["items"][0]["account_password"] == "password" assert result["items"][0]["ck_status_label"] == "CK 正常" assert [item["order_no"] for item in result["skipped"]] == [ "DY-EXP-2", @@ -497,6 +498,7 @@ class TestDouyuCollabOrders: result = collab_api.copy_external_order_ck(order.id, self.session, self.admin) assert result["exported"] == 1 assert result["items"][0]["ck_text"] == self.account.cookie + assert result["items"][0]["account_password"] == "password" with pytest.raises(collab_api.HTTPException) as excinfo: collab_api.copy_external_order_ck(order.id, self.session, operator) diff --git a/web/backend/schemas.py b/web/backend/schemas.py index 24e9389..55dd194 100644 --- a/web/backend/schemas.py +++ b/web/backend/schemas.py @@ -1885,6 +1885,7 @@ class DouyuCollabCkExportItemOut(BaseModel): order_no: str = "" account_id: int | None = None account_username: str = "" + account_password: str = "" account_nickname: str = "" status: str = "" status_label: str = "" diff --git a/web/backend/services/douyu_collab_service.py b/web/backend/services/douyu_collab_service.py index 65c619a..3a07d9e 100644 --- a/web/backend/services/douyu_collab_service.py +++ b/web/backend/services/douyu_collab_service.py @@ -2057,6 +2057,7 @@ def export_cks( "order_no": order.order_no, "account_id": int(account.id), "account_username": account.username or order.account_username or "", + "account_password": str(account.password or ""), "account_nickname": account.nickname or order.account_nickname or "", "status": order.status, "status_label": ORDER_STATUS_LABELS.get(order.status, order.status), diff --git a/web/frontend/src/api/douyuCollab.ts b/web/frontend/src/api/douyuCollab.ts index dbeefdb..77ecc43 100644 --- a/web/frontend/src/api/douyuCollab.ts +++ b/web/frontend/src/api/douyuCollab.ts @@ -109,6 +109,7 @@ export interface DouyuCollabCkExportItem { order_no: string; account_id: number | null; account_username: string; + account_password: string; account_nickname: string; status: DouyuCollabStatus; status_label: string; diff --git a/web/frontend/src/pages/DouyuCollabPage.tsx b/web/frontend/src/pages/DouyuCollabPage.tsx index 0948c45..5fe4964 100644 --- a/web/frontend/src/pages/DouyuCollabPage.tsx +++ b/web/frontend/src/pages/DouyuCollabPage.tsx @@ -15,7 +15,6 @@ import { Input, InputNumber, Modal, - Radio, Row, Select, Space, @@ -258,7 +257,6 @@ export default function DouyuCollabPage() { const [ckExporting, setCkExporting] = useState(false); const [ckCopyingId, setCkCopyingId] = useState(null); const [ckExport, setCkExport] = useState(null); - const [ckExportFormat, setCkExportFormat] = useState<'plain' | 'with_order'>('plain'); // 批量导出斗鱼用户名:只读列表数据,不含 CK const [usernameExportOpen, setUsernameExportOpen] = useState(false); @@ -434,15 +432,13 @@ export default function DouyuCollabPage() { selectedOrders.length === selectedIds.length && selectedOrders.every((row) => row.status === 'done' && !row.is_archived); - /** 导出文本:默认每行一份纯 CK,也可以带订单号方便多选对号。 */ + /** 与「CK 管理」保持一致:账号----密码----CK,每行一条。 */ const ckExportText = useMemo(() => { if (!ckExport) return ''; return ckExport.items - .map((item) => - ckExportFormat === 'with_order' ? `${item.order_no}\t${item.ck_text}` : item.ck_text, - ) - .join('\n'); - }, [ckExport, ckExportFormat]); + .map((item) => `${item.account_username}----${item.account_password || ''}----${item.ck_text}`) + .join('\r\n'); + }, [ckExport]); const ckExportRisky = useMemo( () => (ckExport?.items ?? []).filter((item) => item.ck_status === 'invalid'), @@ -801,8 +797,10 @@ export default function DouyuCollabPage() { message.warning(result.skipped[0]?.reason || '这行还没有可复制的 CK'); return; } - await copyTextToClipboard(item.ck_text); - message.success(`已复制 ${row.order_no} 的 CK`); + await copyTextToClipboard( + `${item.account_username}----${item.account_password || ''}----${item.ck_text}`, + ); + message.success(`已复制 ${row.order_no} 的账号密码与 CK`); } catch (error) { message.error(`复制失败:${getErrorMessage(error)}`); } finally { @@ -1878,8 +1876,8 @@ export default function DouyuCollabPage() { {ckExport && ckExport.skipped.length > 0 && ( @@ -1899,13 +1897,6 @@ export default function DouyuCollabPage() { .join(';')} )} - setCkExportFormat(event.target.value)} - > - 每行一份纯 CK(直接粘) - 订单号 + Tab + CK(多选时好对号) - 共 {ckExport?.exported ?? 0} 份 · {ckExportText.length} 字符; - 关掉这个弹窗就清掉,不会留在页面上。 + 每行格式:账号----密码----CK;关掉这个弹窗就清掉,不会留在页面上。