diff --git a/src/views/credit/components/CreditImportModal.vue b/src/views/credit/components/CreditImportModal.vue new file mode 100644 index 0000000..3ee44c4 --- /dev/null +++ b/src/views/credit/components/CreditImportModal.vue @@ -0,0 +1,103 @@ + + + + diff --git a/src/views/credit/components/CreditSearchToolbar.vue b/src/views/credit/components/CreditSearchToolbar.vue new file mode 100644 index 0000000..24fe62c --- /dev/null +++ b/src/views/credit/components/CreditSearchToolbar.vue @@ -0,0 +1,98 @@ + + + + diff --git a/src/views/credit/creditBreachOfTrust/components/credit-breach-of-trust-import.vue b/src/views/credit/creditBreachOfTrust/components/credit-breach-of-trust-import.vue new file mode 100644 index 0000000..3373769 --- /dev/null +++ b/src/views/credit/creditBreachOfTrust/components/credit-breach-of-trust-import.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/views/credit/creditCaseFiling/components/credit-case-filing-import.vue b/src/views/credit/creditCaseFiling/components/credit-case-filing-import.vue new file mode 100644 index 0000000..7d269e4 --- /dev/null +++ b/src/views/credit/creditCaseFiling/components/credit-case-filing-import.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/views/credit/creditCompetitor/components/credit-competitor-import.vue b/src/views/credit/creditCompetitor/components/credit-competitor-import.vue new file mode 100644 index 0000000..96dbb13 --- /dev/null +++ b/src/views/credit/creditCompetitor/components/credit-competitor-import.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/views/credit/creditCourtAnnouncement/components/credit-court-announcement-import.vue b/src/views/credit/creditCourtAnnouncement/components/credit-court-announcement-import.vue new file mode 100644 index 0000000..f2fee14 --- /dev/null +++ b/src/views/credit/creditCourtAnnouncement/components/credit-court-announcement-import.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/views/credit/creditCourtSession/components/credit-court-session-import.vue b/src/views/credit/creditCourtSession/components/credit-court-session-import.vue new file mode 100644 index 0000000..34a3a7c --- /dev/null +++ b/src/views/credit/creditCourtSession/components/credit-court-session-import.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/views/credit/utils/export.ts b/src/views/credit/utils/export.ts new file mode 100644 index 0000000..8460592 --- /dev/null +++ b/src/views/credit/utils/export.ts @@ -0,0 +1,59 @@ +import { message } from 'ant-design-vue'; +import { utils, writeFile } from 'xlsx'; + +export interface ExportColumn { + title: string; + dataIndex: keyof T | string; + formatter?: (record: T) => unknown; +} + +interface ExportOptions { + filename: string; + columns: ExportColumn[]; + fetchData: () => Promise; + beforeMessage?: string; + successMessage?: string; +} + +export async function exportCreditData({ + filename, + columns, + fetchData, + beforeMessage, + successMessage +}: ExportOptions) { + const hide = message.loading(beforeMessage || '正在导出数据...', 0); + try { + const list = await fetchData(); + const headerRow = columns.map((col) => col.title); + const dataRows = (list || []).map((item) => + columns.map((col) => { + if (col.formatter) { + return col.formatter(item) ?? ''; + } + const key = col.dataIndex as string; + return (item as any)?.[key] ?? ''; + }) + ); + + const sheetName = filename.replace(/\s+/g, '_'); + const sheet = utils.aoa_to_sheet([headerRow, ...dataRows]); + sheet['!cols'] = columns.map(() => ({ wch: 20 })); + + const workbook = { + SheetNames: [sheetName], + Sheets: { + [sheetName]: sheet + } + }; + + writeFile(workbook, `${sheetName}.xlsx`); + hide(); + message.success( + successMessage || `成功导出 ${list?.length ?? 0} 条记录` + ); + } catch (e: any) { + hide(); + message.error(e?.message || '导出失败,请重试'); + } +}