fix: export association table data (#561)
* fix: export association table data * fix: fix export * feat: add test case * feat: add test case
This commit is contained in:
parent
3d1ae8fcae
commit
41cb3da448
@ -0,0 +1,45 @@
|
||||
import { columns2Appends } from '../../utils/columns2Appends';
|
||||
|
||||
describe('utils', () => {
|
||||
let columns = null;
|
||||
beforeEach(async () => {});
|
||||
afterEach(async () => {});
|
||||
|
||||
it('first columns2Appends', async () => {
|
||||
columns = [
|
||||
{ dataIndex: ['f_kp6gk63udss'], defaultTitle: '商品名称' },
|
||||
{
|
||||
dataIndex: ['f_brjkofr2mbt'],
|
||||
enum: [
|
||||
{ value: 'lzjqrrw2vdl', label: '节' },
|
||||
{ value: 'i0qarqlm87m', label: '胡' },
|
||||
{ value: '1fpb8x0swq1', label: '一一' },
|
||||
],
|
||||
defaultTitle: '工在在',
|
||||
},
|
||||
{ dataIndex: ['f_qhvvfuignh2', 'createdBy', 'id'], defaultTitle: 'ID' },
|
||||
{ dataIndex: ['f_wu28mus1c65', 'roles', 'title'], defaultTitle: '角色名称' },
|
||||
];
|
||||
const appends = columns2Appends(columns);
|
||||
expect(appends).toMatchObject(['f_qhvvfuignh2.createdBy', 'f_wu28mus1c65.roles']);
|
||||
});
|
||||
|
||||
it('second columns2Appends', async () => {
|
||||
columns = [
|
||||
{ dataIndex: ['f_kp6gk63udss'], defaultTitle: '商品名称' },
|
||||
{
|
||||
dataIndex: ['f_brjkofr2mbt'],
|
||||
enum: [
|
||||
{ value: 'lzjqrrw2vdl', label: '节' },
|
||||
{ value: 'i0qarqlm87m', label: '胡' },
|
||||
{ value: '1fpb8x0swq1', label: '一一' },
|
||||
],
|
||||
defaultTitle: '工在在',
|
||||
},
|
||||
{ dataIndex: ['f_qhvvfuignh2', 'createdBy', 'id'], defaultTitle: 'ID' },
|
||||
{ dataIndex: ['f_qhvvfuignh2', 'createdBy', 'nickname'], defaultTitle: '角色名称' },
|
||||
];
|
||||
const appends = columns2Appends(columns);
|
||||
expect(appends).toMatchObject(['f_qhvvfuignh2.createdBy']);
|
||||
});
|
||||
});
|
@ -2,13 +2,15 @@ import { Context, Next } from '@nocobase/actions';
|
||||
import { Repository } from '@nocobase/database';
|
||||
import xlsx from 'node-xlsx';
|
||||
import render from '../renders';
|
||||
import { columns2Appends } from '../utils';
|
||||
|
||||
export async function exportXlsx(ctx: Context, next: Next) {
|
||||
let { title, columns, filter, fields, except, appends } = ctx.action.params;
|
||||
let { title, columns, filter, fields, except } = ctx.action.params;
|
||||
const { resourceName, resourceOf } = ctx.action;
|
||||
if (typeof columns === 'string') {
|
||||
columns = JSON.parse(columns);
|
||||
}
|
||||
const appends = columns2Appends(columns);
|
||||
columns = columns?.filter((col) => col?.dataIndex?.length > 0);
|
||||
const repository = ctx.db.getRepository<any>(resourceName, resourceOf) as Repository;
|
||||
const collection = repository.collection;
|
||||
|
@ -2,9 +2,30 @@ import moment from 'moment';
|
||||
|
||||
export async function _(field, row, ctx, column?: any) {
|
||||
if (column?.dataIndex.length > 1) {
|
||||
return column.dataIndex.reduce((result, col) => {
|
||||
const result = column.dataIndex.reduce((result, col) => {
|
||||
if (Array.isArray(result)) {
|
||||
const subResults = [];
|
||||
for (const r of result) {
|
||||
subResults.push(r?.[col]);
|
||||
}
|
||||
return subResults;
|
||||
} else {
|
||||
if (Array.isArray(result?.[col])) {
|
||||
const subResults = [];
|
||||
for (const r of result?.[col]) {
|
||||
subResults.push(r);
|
||||
}
|
||||
return subResults;
|
||||
} else {
|
||||
return result?.[col];
|
||||
}
|
||||
}
|
||||
}, row);
|
||||
if (Array.isArray(result)) {
|
||||
return result.join(',');
|
||||
} else {
|
||||
return result;
|
||||
}
|
||||
} else {
|
||||
return row.get(field.name);
|
||||
}
|
||||
|
13
packages/plugins/export/src/server/utils/columns2Appends.ts
Normal file
13
packages/plugins/export/src/server/utils/columns2Appends.ts
Normal file
@ -0,0 +1,13 @@
|
||||
export function columns2Appends(columns) {
|
||||
const appends = new Set([]);
|
||||
for (const column of columns) {
|
||||
if (column.dataIndex.length > 1) {
|
||||
const appendColumns = [];
|
||||
for (let i = 0, iLen = column.dataIndex.length - 1; i < iLen; i++) {
|
||||
appendColumns.push(column.dataIndex[i]);
|
||||
}
|
||||
appends.add(appendColumns.join('.'));
|
||||
}
|
||||
}
|
||||
return Array.from(appends);
|
||||
}
|
1
packages/plugins/export/src/server/utils/index.ts
Normal file
1
packages/plugins/export/src/server/utils/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export * from './columns2Appends';
|
Loading…
Reference in New Issue
Block a user