diff --git a/src/views/product/requirement/index.vue b/src/views/product/requirement/index.vue index 792e3f3..d3ced8c 100644 --- a/src/views/product/requirement/index.vue +++ b/src/views/product/requirement/index.vue @@ -147,6 +147,17 @@ function getPriorityTagType(priority?: number | null): UI.ThemeColor { return priorityTagTypeMap[priority] || 'info'; } +function flattenTree(nodes: Api.Product.Requirement[]): Api.Product.Requirement[] { + const result: Api.Product.Requirement[] = []; + for (const node of nodes) { + result.push(node); + if (node.children?.length) { + result.push(...flattenTree(node.children)); + } + } + return result; +} + function collectAllRequirementIds(nodes: Api.Product.Requirement[]): string[] { const ids: string[] = []; for (const node of nodes) { @@ -186,11 +197,25 @@ function getRowActions(row: Api.Product.Requirement): Api.Product.RequirementLif } const columns = computed(() => [ - { prop: 'index', type: 'index', label: '序号', width: 64 }, + { + type: 'index', + label: '序号', + width: 64, + align: 'center', + index: (index: number): number => { + const flatList = flattenTree(treeData.value); + const row = flatList[index]; + if (!row || row.parentId !== '0') { + return 0; + } + const parentIndex = treeData.value.findIndex(item => item.id === row.id); + return parentIndex >= 0 ? (pagination.pageNo - 1) * pagination.pageSize + parentIndex + 1 : 0; + } + }, { prop: 'title', label: '标题', - minWidth: 220, + minWidth: 200, formatter: (row: Api.Product.Requirement) => { const isTerminal = isTerminalStatus(row.statusCode); const className = 'requirement-title'; @@ -625,13 +650,15 @@ watch( - +