1
This commit is contained in:
@@ -812,22 +812,48 @@ async def list_generation_record_history_grouped_days(
|
||||
)
|
||||
day_rows = day_rows_result.all()
|
||||
|
||||
if not day_rows:
|
||||
return {
|
||||
"total_days": int(total_days or 0),
|
||||
"page": page,
|
||||
"page_size": page_size,
|
||||
"groups": [],
|
||||
}
|
||||
|
||||
day_list = [row[0] for row in day_rows]
|
||||
day_total_map = {row[0]: row[1] for row in day_rows}
|
||||
|
||||
min_day = min(day_list)
|
||||
max_day = max(day_list)
|
||||
|
||||
all_rows_result = await db.execute(
|
||||
select(GenerationRecord, Project.name.label("project_name"))
|
||||
.outerjoin(Project, (GenerationRecord.project_id == Project.id) & (Project.deleted_at.is_(None)))
|
||||
.where(
|
||||
*filters,
|
||||
func.date(GenerationRecord.generated_at).between(min_day, max_day),
|
||||
)
|
||||
.order_by(GenerationRecord.generated_at.desc(), GenerationRecord.created_at.desc())
|
||||
)
|
||||
all_rows = all_rows_result.all()
|
||||
|
||||
rows_by_day: dict[str, list[tuple[GenerationRecord, str]]] = {}
|
||||
for record, project_name in all_rows:
|
||||
if record.generated_at is None:
|
||||
continue
|
||||
day_key = record.generated_at.date()
|
||||
if day_key not in rows_by_day:
|
||||
rows_by_day[day_key] = []
|
||||
rows_by_day[day_key].append((record, project_name))
|
||||
|
||||
raw_groups = []
|
||||
all_record_ids: list[str] = []
|
||||
for generated_day, day_total in day_rows:
|
||||
item_result = await db.execute(
|
||||
select(GenerationRecord, Project.name.label("project_name"))
|
||||
.outerjoin(Project, (GenerationRecord.project_id == Project.id) & (Project.deleted_at.is_(None)))
|
||||
.where(
|
||||
*filters,
|
||||
func.date(GenerationRecord.generated_at) == generated_day,
|
||||
)
|
||||
.order_by(GenerationRecord.generated_at.desc(), GenerationRecord.created_at.desc())
|
||||
.limit(HISTORY_GROUP_ITEM_LIMIT)
|
||||
)
|
||||
rows = item_result.all()
|
||||
raw_groups.append((generated_day, day_total, rows))
|
||||
all_record_ids.extend(record.id for record, _project_name in rows)
|
||||
for generated_day in day_list:
|
||||
day_rows_list = rows_by_day.get(generated_day, [])
|
||||
limited_rows = day_rows_list[:HISTORY_GROUP_ITEM_LIMIT]
|
||||
day_total = day_total_map.get(generated_day, 0)
|
||||
raw_groups.append((generated_day, day_total, limited_rows))
|
||||
all_record_ids.extend(record.id for record, _project_name in limited_rows)
|
||||
|
||||
resource_info_map = await batch_get_generated_resource_info_map(
|
||||
db,
|
||||
@@ -995,21 +1021,47 @@ async def list_generation_history_grouped_days(
|
||||
)
|
||||
day_rows = day_rows_result.all()
|
||||
|
||||
if not day_rows:
|
||||
return {
|
||||
"total_days": int(total_days or 0),
|
||||
"page": page,
|
||||
"page_size": page_size,
|
||||
"groups": [],
|
||||
}
|
||||
|
||||
day_list = [row[0] for row in day_rows]
|
||||
day_total_map = {row[0]: row[1] for row in day_rows}
|
||||
|
||||
min_day = min(day_list)
|
||||
max_day = max(day_list)
|
||||
|
||||
all_tasks_result = await db.execute(
|
||||
select(ChatGenerationTask)
|
||||
.where(
|
||||
*filters,
|
||||
func.date(ChatGenerationTask.generated_at).between(min_day, max_day),
|
||||
)
|
||||
.order_by(ChatGenerationTask.generated_at.desc(), ChatGenerationTask.created_at.desc())
|
||||
)
|
||||
all_tasks = list(all_tasks_result.scalars().all())
|
||||
|
||||
tasks_by_day: dict[str, list[ChatGenerationTask]] = {}
|
||||
for task in all_tasks:
|
||||
if task.generated_at is None:
|
||||
continue
|
||||
day_key = task.generated_at.date()
|
||||
if day_key not in tasks_by_day:
|
||||
tasks_by_day[day_key] = []
|
||||
tasks_by_day[day_key].append(task)
|
||||
|
||||
raw_groups = []
|
||||
all_task_ids: list[str] = []
|
||||
for generated_day, day_total in day_rows:
|
||||
item_result = await db.execute(
|
||||
select(ChatGenerationTask)
|
||||
.where(
|
||||
*filters,
|
||||
func.date(ChatGenerationTask.generated_at) == generated_day,
|
||||
)
|
||||
.order_by(ChatGenerationTask.generated_at.desc(), ChatGenerationTask.created_at.desc())
|
||||
.limit(HISTORY_GROUP_ITEM_LIMIT)
|
||||
)
|
||||
tasks = list(item_result.scalars().all())
|
||||
raw_groups.append((generated_day, day_total, tasks))
|
||||
all_task_ids.extend(task.id for task in tasks)
|
||||
for generated_day in day_list:
|
||||
day_tasks = tasks_by_day.get(generated_day, [])
|
||||
limited_tasks = day_tasks[:HISTORY_GROUP_ITEM_LIMIT]
|
||||
day_total = day_total_map.get(generated_day, 0)
|
||||
raw_groups.append((generated_day, day_total, limited_tasks))
|
||||
all_task_ids.extend(task.id for task in limited_tasks)
|
||||
|
||||
resource_info_map = await batch_get_generated_resource_info_map(
|
||||
db,
|
||||
@@ -1022,8 +1074,8 @@ async def list_generation_history_grouped_days(
|
||||
source=source,
|
||||
chat_task_ids=all_task_ids,
|
||||
)
|
||||
all_tasks = [task for _generated_day, _day_total, tasks in raw_groups for task in tasks]
|
||||
reference_display_map = await _resolve_task_reference_display_map(db, all_tasks, user_id=user_id)
|
||||
all_tasks_for_refs = [task for _generated_day, _day_total, tasks in raw_groups for task in tasks]
|
||||
reference_display_map = await _resolve_task_reference_display_map(db, all_tasks_for_refs, user_id=user_id)
|
||||
|
||||
groups = [
|
||||
{
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
@@ -28,7 +28,7 @@
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<script type="module" crossorigin src="/assets/index-CNAElJYI.js"></script>
|
||||
<script type="module" crossorigin src="/assets/index-CM_dxMTI.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-JhRVnnL-.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -176,11 +176,23 @@ const GeneratedRecord: React.FC = () => {
|
||||
document.body.removeChild(link);
|
||||
};
|
||||
// 预览文件
|
||||
const handlePreview = (item: any) => {
|
||||
const handlePreview = async (item: any) => {
|
||||
setPreviewItem(item);
|
||||
setPreviewVisible(true);
|
||||
// 触发事件通知布局组件关闭浮动按钮
|
||||
window.dispatchEvent(new Event('previewOpen'));
|
||||
|
||||
// 如果是视频且没有尺寸信息,异步获取视频尺寸
|
||||
if (item.videoUrl && item.videoUrl.trim() && !item.imagePx) {
|
||||
try {
|
||||
const dimensions = await getVideoDimensions(item.videoUrl);
|
||||
if (dimensions) {
|
||||
setPreviewItem((prev: any) => prev ? { ...prev, imagePx: dimensions } : prev);
|
||||
}
|
||||
} catch (e) {
|
||||
// 忽略获取尺寸失败
|
||||
}
|
||||
}
|
||||
};
|
||||
// 关闭预览并暂停视频
|
||||
const handleClosePreview = () => {
|
||||
@@ -803,21 +815,6 @@ const GeneratedRecord: React.FC = () => {
|
||||
} else {
|
||||
setRecordList([]);
|
||||
}
|
||||
if (isPageLoaded) {
|
||||
data.forEach(async (item: any) => {
|
||||
if (item.videoUrl && item.videoUrl.trim()) {
|
||||
const dimensions = await getVideoDimensions(item.videoUrl);
|
||||
if (dimensions) {
|
||||
setRecordList(prev => prev.map(group => ({
|
||||
...group,
|
||||
items: group.items.map((i: any) =>
|
||||
i.id === item.id ? { ...i, imagePx: dimensions } : i
|
||||
),
|
||||
})));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}).catch((err) => {
|
||||
}).finally(() => {
|
||||
setLoading(false);
|
||||
@@ -838,23 +835,6 @@ const GeneratedRecord: React.FC = () => {
|
||||
setRecordList(prev => [...prev, ...data]);
|
||||
}
|
||||
setTotalnumber(res?.totalDays || 0);
|
||||
if (isPageLoaded) {
|
||||
data.forEach(group => {
|
||||
group.items.forEach(async (item: any) => {
|
||||
if (item.videoUrl && item.videoUrl.trim()) {
|
||||
const dimensions = await getVideoDimensions(item.videoUrl);
|
||||
if (dimensions) {
|
||||
setRecordList(prev => prev.map(g => ({
|
||||
...g,
|
||||
items: g.items.map((i: any) =>
|
||||
i.id === item.id ? { ...i, imagePx: dimensions } : i
|
||||
),
|
||||
})));
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}).catch((err) => {
|
||||
if (Pagebreak.page === 1) {
|
||||
setRecordList([]);
|
||||
@@ -1354,6 +1334,7 @@ const GeneratedRecord: React.FC = () => {
|
||||
<img
|
||||
src={displayUrl}
|
||||
alt="预览"
|
||||
loading="lazy"
|
||||
style={{
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
|
||||
Reference in New Issue
Block a user