From 359e15a82d64113a85ad9fd0922770bcd6b5252e Mon Sep 17 00:00:00 2001 From: admin <362324317@qq.com> Date: Fri, 15 May 2026 06:57:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20save=5Frecords=20JOIN=20=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=88=97=E5=90=8D=E6=AD=A7=E4=B9=89,=20=E5=8A=A0=20sr?= =?UTF-8?q?.=20=E5=89=8D=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - getRecords JOIN cloud_configs 后 WHERE 列需加 sr. 前缀 - 不带日期筛选时不触发 (srWhere 为空字符串) - summaryRows 查询也用 srWhere 但去掉 sr. 前缀 (查询 save_records 不需要) - 详情补充文件大小/使用账号/耗时 --- packages/backend/src/cloud/cloud.service.ts | 16 ++++--- .../frontend/src/pages/admin/SaveRecords.vue | 43 +++++++++++++------ 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/packages/backend/src/cloud/cloud.service.ts b/packages/backend/src/cloud/cloud.service.ts index f5c6c3d..887c5bc 100644 --- a/packages/backend/src/cloud/cloud.service.ts +++ b/packages/backend/src/cloud/cloud.service.ts @@ -270,15 +270,19 @@ export function getSaveRecords(page: number = 1, pageSize: number = 20, startDat summaryConditions.push('source_type = ?'); summaryParams.push(sourceType); } if (keyword) { conditions.push('source_title LIKE ?'); params.push(`%${keyword}%`); } - const where = conditions.length > 0 ? 'WHERE ' + conditions.join(' AND ') : ''; - const total = (db.prepare(`SELECT COUNT(*) as count FROM save_records ${where}`).get(...params) as any).count; + const srWhere = conditions.length > 0 ? 'WHERE sr.' + conditions.join(' AND sr.') : ''; + const total = (db.prepare(`SELECT COUNT(*) as count FROM save_records ${srWhere.replace(/sr\./g, '')}`).get(...params) as any).count; const records = db.prepare( - `SELECT * FROM save_records ${where} ORDER BY created_at DESC LIMIT ? OFFSET ?` - ).all(...params, pageSize, offset) as SaveRecord[]; + `SELECT sr.*, cc.nickname as config_nickname + FROM save_records sr + LEFT JOIN cloud_configs cc ON sr.config_id = cc.id + ${srWhere} + ORDER BY sr.created_at DESC LIMIT ? OFFSET ?` + ).all(...params, pageSize, offset) as any[]; - const summaryWhere = summaryConditions.length > 0 ? 'WHERE ' + summaryConditions.join(' AND ') : ''; + const summaryWhere = summaryConditions.length > 0 ? 'WHERE sr.' + summaryConditions.join(' AND sr.') : ''; const summaryRows = db.prepare( - `SELECT status, COUNT(*) as cnt FROM save_records ${summaryWhere} GROUP BY status` + `SELECT status, COUNT(*) as cnt FROM save_records ${summaryWhere.replace(/sr\./g, '')} GROUP BY status` ).all(...summaryParams) as { status: string; cnt: number }[]; let sumTotal = 0, sumSuccess = 0, sumFailed = 0, sumReused = 0; for (const r of summaryRows) { diff --git a/packages/frontend/src/pages/admin/SaveRecords.vue b/packages/frontend/src/pages/admin/SaveRecords.vue index 52c3b66..21af7dc 100755 --- a/packages/frontend/src/pages/admin/SaveRecords.vue +++ b/packages/frontend/src/pages/admin/SaveRecords.vue @@ -85,15 +85,15 @@