fix(报告): 测试计划报告导出,表格列按报告详情配置

--bug=1046788 --user=白奇 计划报告-场景明细未按设置展示字段导出数据 https://www.tapd.cn/55049933/s/1582353
This commit is contained in:
baiqi 2024-09-20 16:18:32 +08:00 committed by Craftsman
parent fbe3ef3490
commit 44ffc18b86
2 changed files with 55 additions and 10 deletions

View File

@ -92,6 +92,7 @@ export default async function exportPDF(
styles: { styles: {
font: 'AlibabaPuHuiTi-3-55-Regular', font: 'AlibabaPuHuiTi-3-55-Regular',
}, },
pageBreak: 'avoid',
rowPageBreak: 'avoid', rowPageBreak: 'avoid',
margin: { top: 16, left: 16, right: 16, bottom: 16 }, margin: { top: 16, left: 16, right: 16, bottom: 16 },
tableWidth: PDF_WIDTH, tableWidth: PDF_WIDTH,

View File

@ -162,6 +162,7 @@
} from '@/config/testPlan'; } from '@/config/testPlan';
import exportPDF, { PAGE_PDF_WIDTH_RATIO, PdfTableConfig } from '@/hooks/useExportPDF'; import exportPDF, { PAGE_PDF_WIDTH_RATIO, PdfTableConfig } from '@/hooks/useExportPDF';
import { useI18n } from '@/hooks/useI18n'; import { useI18n } from '@/hooks/useI18n';
import useTableStore from '@/hooks/useTableStore';
import { addCommasToNumber, characterLimit } from '@/utils'; import { addCommasToNumber, characterLimit } from '@/utils';
import { BatchApiParams } from '@/models/common'; import { BatchApiParams } from '@/models/common';
@ -173,6 +174,7 @@
ReportMetricsItemModel, ReportMetricsItemModel,
StatusListType, StatusListType,
} from '@/models/testPlan/testPlanReport'; } from '@/models/testPlan/testPlanReport';
import { TableKeyEnum } from '@/enums/tableEnum';
import { ReportCardTypeEnum } from '@/enums/testPlanReportEnum'; import { ReportCardTypeEnum } from '@/enums/testPlanReportEnum';
import { defaultGroupConfig, defaultSingleConfig, iconTypeStatus } from './component/reportConfig'; import { defaultGroupConfig, defaultSingleConfig, iconTypeStatus } from './component/reportConfig';
@ -401,7 +403,7 @@
const isDefaultLayout = ref<boolean>(false); const isDefaultLayout = ref<boolean>(false);
/** 缺陷明细 */ /** 缺陷明细 */
const bugColumns: MsTableColumn = [ const bugDefaultColumns: MsTableColumn = [
{ {
title: 'ID', title: 'ID',
dataIndex: 'num', dataIndex: 'num',
@ -484,7 +486,7 @@
}, },
]; ];
const caseColumns = computed(() => { const caseDefaultColumns = computed(() => {
if (isGroup.value) { if (isGroup.value) {
return [...staticColumns, ...testPlanNameColumns, ...lastStaticColumns]; return [...staticColumns, ...testPlanNameColumns, ...lastStaticColumns];
} }
@ -520,7 +522,7 @@
}, },
]; ];
const apiColumns = computed(() => { const apiDefaultColumns = computed(() => {
if (isGroup.value) { if (isGroup.value) {
return [ return [
...apiStaticColumns, ...apiStaticColumns,
@ -649,6 +651,47 @@
); );
} }
const tableStore = useTableStore();
const keyMap: Record<string, any> = {
GROUP: {
[ReportCardTypeEnum.API_CASE_DETAIL]: TableKeyEnum.TEST_PLAN_REPORT_API_TABLE_GROUP,
[ReportCardTypeEnum.SCENARIO_CASE_DETAIL]: TableKeyEnum.TEST_PLAN_REPORT_SCENARIO_TABLE_GROUP,
[ReportCardTypeEnum.BUG_DETAIL]: TableKeyEnum.TEST_PLAN_REPORT_BUG_TABLE_DETAIL_GROUP,
[ReportCardTypeEnum.FUNCTIONAL_DETAIL]: TableKeyEnum.TEST_PLAN_REPORT_FUNCTIONAL_TABLE_GROUP,
},
TEST_PLAN: {
[ReportCardTypeEnum.API_CASE_DETAIL]: TableKeyEnum.TEST_PLAN_REPORT_API_TABLE,
[ReportCardTypeEnum.SCENARIO_CASE_DETAIL]: TableKeyEnum.TEST_PLAN_REPORT_SCENARIO_TABLE,
[ReportCardTypeEnum.BUG_DETAIL]: TableKeyEnum.TEST_PLAN_REPORT_BUG_TABLE_DETAIL,
[ReportCardTypeEnum.FUNCTIONAL_DETAIL]: TableKeyEnum.TEST_PLAN_REPORT_FUNCTIONAL_TABLE,
},
};
function getTableKey(type: ReportCardTypeEnum) {
if (isGroup.value) {
return keyMap.GROUP[type];
}
return keyMap.TEST_PLAN[type];
}
async function initTablesColumns() {
const bugColumns = await tableStore.getShowInTableColumns(getTableKey(ReportCardTypeEnum.BUG_DETAIL));
const functionalCaseColumns = await tableStore.getShowInTableColumns(
getTableKey(ReportCardTypeEnum.FUNCTIONAL_DETAIL)
);
const apiColumns = await tableStore.getShowInTableColumns(getTableKey(ReportCardTypeEnum.API_CASE_DETAIL));
const scenarioColumns = await tableStore.getShowInTableColumns(
getTableKey(ReportCardTypeEnum.SCENARIO_CASE_DETAIL)
);
return {
apiColumns: apiColumns || apiDefaultColumns,
scenarioColumns: scenarioColumns || apiDefaultColumns,
bugColumns: bugColumns || bugDefaultColumns,
functionalCaseColumns: functionalCaseColumns || caseDefaultColumns,
};
}
async function realExportPdf(name: string) { async function realExportPdf(name: string) {
const tableArr: PdfTableConfig[] = []; const tableArr: PdfTableConfig[] = [];
if (!isDefaultLayout.value) { if (!isDefaultLayout.value) {
@ -709,6 +752,7 @@
pageRequest.push(initScenarioList()); pageRequest.push(initScenarioList());
} }
await Promise.all(pageRequest); await Promise.all(pageRequest);
const { apiColumns, scenarioColumns, bugColumns, functionalCaseColumns } = await initTablesColumns();
if (fullBugList.value.length > 0) { if (fullBugList.value.length > 0) {
tableArr.push({ tableArr.push({
tableId: 'bug', tableId: 'bug',
@ -734,9 +778,9 @@
executeResult: { cellWidth: 110 / PAGE_PDF_WIDTH_RATIO }, executeResult: { cellWidth: 110 / PAGE_PDF_WIDTH_RATIO },
testPlanName: { cellWidth: 240 / PAGE_PDF_WIDTH_RATIO }, testPlanName: { cellWidth: 240 / PAGE_PDF_WIDTH_RATIO },
priority: { cellWidth: 110 / PAGE_PDF_WIDTH_RATIO }, priority: { cellWidth: 110 / PAGE_PDF_WIDTH_RATIO },
moduleName: { cellWidth: 200 / PAGE_PDF_WIDTH_RATIO }, moduleName: { cellWidth: 180 / PAGE_PDF_WIDTH_RATIO },
executeUser: { cellWidth: 100 / PAGE_PDF_WIDTH_RATIO }, executeUser: { cellWidth: 100 / PAGE_PDF_WIDTH_RATIO },
relationCaseCount: { cellWidth: 90 / PAGE_PDF_WIDTH_RATIO }, relationCaseCount: { cellWidth: 110 / PAGE_PDF_WIDTH_RATIO },
}; };
if (!isGroup.value) { if (!isGroup.value) {
delete columnStyles.testPlanName; delete columnStyles.testPlanName;
@ -745,7 +789,7 @@
tableArr.push({ tableArr.push({
tableId: 'case', tableId: 'case',
columnStyles, columnStyles,
columns: caseColumns.value.map((item) => ({ columns: functionalCaseColumns.map((item) => ({
...item, ...item,
title: t(item.title as string), title: t(item.title as string),
dataKey: item.dataIndex, dataKey: item.dataIndex,
@ -763,9 +807,9 @@
executeResult: { cellWidth: 110 / PAGE_PDF_WIDTH_RATIO }, executeResult: { cellWidth: 110 / PAGE_PDF_WIDTH_RATIO },
testPlanName: { cellWidth: 230 / PAGE_PDF_WIDTH_RATIO }, testPlanName: { cellWidth: 230 / PAGE_PDF_WIDTH_RATIO },
priority: { cellWidth: 80 / PAGE_PDF_WIDTH_RATIO }, priority: { cellWidth: 80 / PAGE_PDF_WIDTH_RATIO },
moduleName: { cellWidth: 170 / PAGE_PDF_WIDTH_RATIO }, moduleName: { cellWidth: 160 / PAGE_PDF_WIDTH_RATIO },
executeUser: { cellWidth: 120 / PAGE_PDF_WIDTH_RATIO }, executeUser: { cellWidth: 120 / PAGE_PDF_WIDTH_RATIO },
bugCount: { cellWidth: 90 / PAGE_PDF_WIDTH_RATIO }, bugCount: { cellWidth: 100 / PAGE_PDF_WIDTH_RATIO },
}; };
if (!isGroup.value) { if (!isGroup.value) {
delete apiColumnStyles.testPlanName; delete apiColumnStyles.testPlanName;
@ -775,7 +819,7 @@
tableArr.push({ tableArr.push({
tableId: 'apiCase', tableId: 'apiCase',
columnStyles: apiColumnStyles, columnStyles: apiColumnStyles,
columns: apiColumns.value.map((item) => ({ columns: apiColumns.map((item) => ({
...item, ...item,
title: t(item.title as string), title: t(item.title as string),
dataKey: item.dataIndex, dataKey: item.dataIndex,
@ -791,7 +835,7 @@
tableArr.push({ tableArr.push({
tableId: 'scenario', tableId: 'scenario',
columnStyles: apiColumnStyles, columnStyles: apiColumnStyles,
columns: apiColumns.value.map((item) => ({ columns: scenarioColumns.map((item) => ({
...item, ...item,
title: t(item.title as string), title: t(item.title as string),
dataKey: item.dataIndex, dataKey: item.dataIndex,