@@ -590,7 +590,7 @@ export class DevPlanService {
|
||||
|
||||
|
||||
|
||||
async listVersions(query: { status?: string; page?: number; pageSize?: number }) {
|
||||
async listVersions(query: { status?: string; keyword?: string; page?: number; pageSize?: number }) {
|
||||
|
||||
const page = query.page ?? 1;
|
||||
|
||||
@@ -600,7 +600,13 @@ export class DevPlanService {
|
||||
|
||||
if (query.status) where.status = query.status as DevPlanVersionStatus;
|
||||
|
||||
|
||||
if (query.keyword?.trim()) {
|
||||
const kw = query.keyword.trim();
|
||||
where.OR = [
|
||||
{ versionNo: { contains: kw } },
|
||||
{ content: { contains: kw } },
|
||||
];
|
||||
}
|
||||
|
||||
const [rows, total] = await Promise.all([
|
||||
|
||||
@@ -1329,6 +1335,7 @@ export class DevPlanService {
|
||||
status?: string;
|
||||
type?: string;
|
||||
keyword?: string;
|
||||
columns?: string[];
|
||||
}) {
|
||||
let rows: Array<{
|
||||
id: bigint;
|
||||
@@ -1372,20 +1379,24 @@ export class DevPlanService {
|
||||
: Promise.resolve([]),
|
||||
]);
|
||||
const ticketMap = new Map(tickets.map((t) => [String(t.id), t.ticketNo] as [string, string]));
|
||||
const taskIds = rows.map((r) => r.id);
|
||||
const versionMap = await this.loadTaskVersionMap(taskIds);
|
||||
|
||||
const exportRows = rows.map((r) =>
|
||||
mapTaskToExportRow({
|
||||
const exportRows = rows.map((r) => {
|
||||
const versions = versionMap.get(String(r.id)) ?? [];
|
||||
return mapTaskToExportRow({
|
||||
taskNo: r.taskNo,
|
||||
type: r.type,
|
||||
status: r.status,
|
||||
content: r.content,
|
||||
supportTicketNo: r.supportTicketId != null ? ticketMap.get(String(r.supportTicketId)) ?? null : null,
|
||||
versionNos: versions.map((v) => v.versionNo).join('、') || null,
|
||||
creatorName: names.get(String(r.creatorHqAccountId)) ?? null,
|
||||
createdAt: r.createdAt.toISOString(),
|
||||
completedAt: r.completedAt?.toISOString() ?? null,
|
||||
attachmentUrls: parseAttachmentUrls(r.attachmentUrls),
|
||||
}),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
let buffer: Buffer;
|
||||
switch (dto.format) {
|
||||
@@ -1396,7 +1407,7 @@ export class DevPlanService {
|
||||
buffer = await buildDevPlanDocx(exportRows);
|
||||
break;
|
||||
case 'xlsx':
|
||||
buffer = await buildDevPlanXlsx(exportRows);
|
||||
buffer = await buildDevPlanXlsx(exportRows, dto.columns);
|
||||
break;
|
||||
case 'pdf':
|
||||
buffer = await buildDevPlanPdf(exportRows);
|
||||
|
||||
Reference in New Issue
Block a user