mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-08 01:17:23 +08:00
feat: export execl demo (#288)
This commit is contained in:
parent
61880bc07b
commit
4af50acf88
@ -84,5 +84,6 @@ menus:
|
|||||||
hsSwiper: Swiper Plugin
|
hsSwiper: Swiper Plugin
|
||||||
hsVirtualList: Virtual List
|
hsVirtualList: Virtual List
|
||||||
hsPdf: PDF Preview
|
hsPdf: PDF Preview
|
||||||
|
hsExecl: Export Excel
|
||||||
status:
|
status:
|
||||||
hsLoad: Loading...
|
hsLoad: Loading...
|
||||||
|
@ -84,5 +84,6 @@ menus:
|
|||||||
hsSwiper: Swiper插件
|
hsSwiper: Swiper插件
|
||||||
hsVirtualList: 虚拟列表
|
hsVirtualList: 虚拟列表
|
||||||
hsPdf: PDF预览
|
hsPdf: PDF预览
|
||||||
|
hsExecl: 导出Excel
|
||||||
status:
|
status:
|
||||||
hsLoad: 加载中...
|
hsLoad: 加载中...
|
||||||
|
@ -74,7 +74,8 @@
|
|||||||
"vuedraggable": "4.1.0",
|
"vuedraggable": "4.1.0",
|
||||||
"vxe-table": "^4.2.3",
|
"vxe-table": "^4.2.3",
|
||||||
"xe-utils": "^3.5.4",
|
"xe-utils": "^3.5.4",
|
||||||
"xgplayer": "^2.31.6"
|
"xgplayer": "^2.31.6",
|
||||||
|
"xlsx": "^0.18.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "13.1.0",
|
"@commitlint/cli": "13.1.0",
|
||||||
|
110
pnpm-lock.yaml
generated
110
pnpm-lock.yaml
generated
@ -113,6 +113,7 @@ specifiers:
|
|||||||
vxe-table: ^4.2.3
|
vxe-table: ^4.2.3
|
||||||
xe-utils: ^3.5.4
|
xe-utils: ^3.5.4
|
||||||
xgplayer: ^2.31.6
|
xgplayer: ^2.31.6
|
||||||
|
xlsx: ^0.18.5
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
"@amap/amap-jsapi-loader": 1.0.1
|
"@amap/amap-jsapi-loader": 1.0.1
|
||||||
@ -164,6 +165,7 @@ dependencies:
|
|||||||
vxe-table: 4.2.3_vue@3.2.36+xe-utils@3.5.4
|
vxe-table: 4.2.3_vue@3.2.36+xe-utils@3.5.4
|
||||||
xe-utils: 3.5.4
|
xe-utils: 3.5.4
|
||||||
xgplayer: 2.31.6
|
xgplayer: 2.31.6
|
||||||
|
xlsx: 0.18.5
|
||||||
|
|
||||||
devDependencies:
|
devDependencies:
|
||||||
"@commitlint/cli": 13.1.0
|
"@commitlint/cli": 13.1.0
|
||||||
@ -2159,10 +2161,6 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
|
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
|
||||||
eslint-plugin-vue: ^8.0.1
|
eslint-plugin-vue: ^8.0.1
|
||||||
typescript: "*"
|
|
||||||
peerDependenciesMeta:
|
|
||||||
typescript:
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/eslint-plugin": 5.23.0_17b6d2ce7129f0b36f2c30ae592c16e7
|
"@typescript-eslint/eslint-plugin": 5.23.0_17b6d2ce7129f0b36f2c30ae592c16e7
|
||||||
"@typescript-eslint/parser": 5.23.0_eslint@8.15.0+typescript@4.6.4
|
"@typescript-eslint/parser": 5.23.0_eslint@8.15.0+typescript@4.6.4
|
||||||
@ -2172,6 +2170,7 @@ packages:
|
|||||||
vue-eslint-parser: 8.3.0_eslint@8.15.0
|
vue-eslint-parser: 8.3.0_eslint@8.15.0
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
- typescript
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@vue/reactivity-transform/3.2.33:
|
/@vue/reactivity-transform/3.2.33:
|
||||||
@ -2610,6 +2609,14 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/adler-32/1.3.1:
|
||||||
|
resolution:
|
||||||
|
{
|
||||||
|
integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==
|
||||||
|
}
|
||||||
|
engines: { node: ">=0.8" }
|
||||||
|
dev: false
|
||||||
|
|
||||||
/aggregate-error/3.1.0:
|
/aggregate-error/3.1.0:
|
||||||
resolution:
|
resolution:
|
||||||
{
|
{
|
||||||
@ -3002,6 +3009,17 @@ packages:
|
|||||||
}
|
}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/cfb/1.2.2:
|
||||||
|
resolution:
|
||||||
|
{
|
||||||
|
integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==
|
||||||
|
}
|
||||||
|
engines: { node: ">=0.8" }
|
||||||
|
dependencies:
|
||||||
|
adler-32: 1.3.1
|
||||||
|
crc-32: 1.2.2
|
||||||
|
dev: false
|
||||||
|
|
||||||
/chalk/2.4.2:
|
/chalk/2.4.2:
|
||||||
resolution:
|
resolution:
|
||||||
{
|
{
|
||||||
@ -3126,6 +3144,14 @@ packages:
|
|||||||
engines: { node: ">=0.8" }
|
engines: { node: ">=0.8" }
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/codepage/1.15.0:
|
||||||
|
resolution:
|
||||||
|
{
|
||||||
|
integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==
|
||||||
|
}
|
||||||
|
engines: { node: ">=0.8" }
|
||||||
|
dev: false
|
||||||
|
|
||||||
/color-convert/1.9.3:
|
/color-convert/1.9.3:
|
||||||
resolution:
|
resolution:
|
||||||
{
|
{
|
||||||
@ -3266,8 +3292,6 @@ packages:
|
|||||||
finalhandler: 1.1.2
|
finalhandler: 1.1.2
|
||||||
parseurl: 1.3.3
|
parseurl: 1.3.3
|
||||||
utils-merge: 1.0.1
|
utils-merge: 1.0.1
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/consola/2.15.3:
|
/consola/2.15.3:
|
||||||
@ -3354,6 +3378,15 @@ packages:
|
|||||||
yaml: 1.10.2
|
yaml: 1.10.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/crc-32/1.2.2:
|
||||||
|
resolution:
|
||||||
|
{
|
||||||
|
integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==
|
||||||
|
}
|
||||||
|
engines: { node: ">=0.8" }
|
||||||
|
hasBin: true
|
||||||
|
dev: false
|
||||||
|
|
||||||
/create-require/1.1.1:
|
/create-require/1.1.1:
|
||||||
resolution:
|
resolution:
|
||||||
{
|
{
|
||||||
@ -3398,8 +3431,6 @@ packages:
|
|||||||
color: 0.11.4
|
color: 0.11.4
|
||||||
debug: 3.2.7
|
debug: 3.2.7
|
||||||
rgb: 0.1.0
|
rgb: 0.1.0
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/css-declaration-sorter/6.2.2_postcss@8.4.13:
|
/css-declaration-sorter/6.2.2_postcss@8.4.13:
|
||||||
@ -3614,11 +3645,6 @@ packages:
|
|||||||
{
|
{
|
||||||
integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
||||||
}
|
}
|
||||||
peerDependencies:
|
|
||||||
supports-color: "*"
|
|
||||||
peerDependenciesMeta:
|
|
||||||
supports-color:
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
dependencies:
|
||||||
ms: 2.0.0
|
ms: 2.0.0
|
||||||
dev: true
|
dev: true
|
||||||
@ -3628,11 +3654,6 @@ packages:
|
|||||||
{
|
{
|
||||||
integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
|
integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
|
||||||
}
|
}
|
||||||
peerDependencies:
|
|
||||||
supports-color: "*"
|
|
||||||
peerDependenciesMeta:
|
|
||||||
supports-color:
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
dependencies:
|
||||||
ms: 2.1.3
|
ms: 2.1.3
|
||||||
dev: false
|
dev: false
|
||||||
@ -4742,8 +4763,6 @@ packages:
|
|||||||
parseurl: 1.3.3
|
parseurl: 1.3.3
|
||||||
statuses: 1.5.0
|
statuses: 1.5.0
|
||||||
unpipe: 1.0.0
|
unpipe: 1.0.0
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/find-up/4.1.0:
|
/find-up/4.1.0:
|
||||||
@ -4815,6 +4834,14 @@ packages:
|
|||||||
mime-types: 2.1.35
|
mime-types: 2.1.35
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/frac/1.1.2:
|
||||||
|
resolution:
|
||||||
|
{
|
||||||
|
integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==
|
||||||
|
}
|
||||||
|
engines: { node: ">=0.8" }
|
||||||
|
dev: false
|
||||||
|
|
||||||
/fraction.js/4.2.0:
|
/fraction.js/4.2.0:
|
||||||
resolution:
|
resolution:
|
||||||
{
|
{
|
||||||
@ -7696,6 +7723,16 @@ packages:
|
|||||||
readable-stream: 3.6.0
|
readable-stream: 3.6.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/ssf/0.11.2:
|
||||||
|
resolution:
|
||||||
|
{
|
||||||
|
integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==
|
||||||
|
}
|
||||||
|
engines: { node: ">=0.8" }
|
||||||
|
dependencies:
|
||||||
|
frac: 1.1.2
|
||||||
|
dev: false
|
||||||
|
|
||||||
/ssr-window/3.0.0:
|
/ssr-window/3.0.0:
|
||||||
resolution:
|
resolution:
|
||||||
{
|
{
|
||||||
@ -8779,6 +8816,14 @@ packages:
|
|||||||
resolution: { integrity: sha1-pwIEUwhNjNLv5wup02liY94XEKU= }
|
resolution: { integrity: sha1-pwIEUwhNjNLv5wup02liY94XEKU= }
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/wmf/1.0.2:
|
||||||
|
resolution:
|
||||||
|
{
|
||||||
|
integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==
|
||||||
|
}
|
||||||
|
engines: { node: ">=0.8" }
|
||||||
|
dev: false
|
||||||
|
|
||||||
/word-wrap/1.2.3:
|
/word-wrap/1.2.3:
|
||||||
resolution:
|
resolution:
|
||||||
{
|
{
|
||||||
@ -8787,6 +8832,14 @@ packages:
|
|||||||
engines: { node: ">=0.10.0" }
|
engines: { node: ">=0.10.0" }
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/word/0.3.0:
|
||||||
|
resolution:
|
||||||
|
{
|
||||||
|
integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==
|
||||||
|
}
|
||||||
|
engines: { node: ">=0.8" }
|
||||||
|
dev: false
|
||||||
|
|
||||||
/wrap-ansi/6.2.0:
|
/wrap-ansi/6.2.0:
|
||||||
resolution:
|
resolution:
|
||||||
{
|
{
|
||||||
@ -8859,6 +8912,23 @@ packages:
|
|||||||
xgplayer-subtitles: 1.0.22
|
xgplayer-subtitles: 1.0.22
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/xlsx/0.18.5:
|
||||||
|
resolution:
|
||||||
|
{
|
||||||
|
integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==
|
||||||
|
}
|
||||||
|
engines: { node: ">=0.8" }
|
||||||
|
hasBin: true
|
||||||
|
dependencies:
|
||||||
|
adler-32: 1.3.1
|
||||||
|
cfb: 1.2.2
|
||||||
|
codepage: 1.15.0
|
||||||
|
crc-32: 1.2.2
|
||||||
|
ssf: 0.11.2
|
||||||
|
wmf: 1.0.2
|
||||||
|
word: 0.3.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/y18n/4.0.3:
|
/y18n/4.0.3:
|
||||||
resolution:
|
resolution:
|
||||||
{
|
{
|
||||||
|
@ -138,6 +138,14 @@ const ableRouter = {
|
|||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsPdf")
|
title: $t("menus.hsPdf")
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/able/execl",
|
||||||
|
name: "Execl",
|
||||||
|
component: () => import("/@/views/able/execl.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hsExecl")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
101
src/views/able/execl.vue
Normal file
101
src/views/able/execl.vue
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
<script lang="ts" setup>
|
||||||
|
import { utils, writeFile } from "xlsx";
|
||||||
|
|
||||||
|
defineOptions({
|
||||||
|
name: "Excel"
|
||||||
|
});
|
||||||
|
|
||||||
|
interface DataItem {
|
||||||
|
readonly id: string;
|
||||||
|
[propName: string]: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Columns {
|
||||||
|
dataKey: string;
|
||||||
|
key: string;
|
||||||
|
title: string;
|
||||||
|
width?: number;
|
||||||
|
[propName: string]: string | number;
|
||||||
|
}
|
||||||
|
|
||||||
|
const generateColumns = (length = 10, prefix = "column-", props?: any) =>
|
||||||
|
Array.from({ length }).map((_, columnIndex) => ({
|
||||||
|
...props,
|
||||||
|
key: `${prefix}${columnIndex}`,
|
||||||
|
dataKey: `${prefix}${columnIndex}`,
|
||||||
|
title: `Column ${columnIndex}`,
|
||||||
|
width: 150
|
||||||
|
}));
|
||||||
|
|
||||||
|
const generateData = (
|
||||||
|
columns: ReturnType<typeof generateColumns>,
|
||||||
|
length = 200,
|
||||||
|
prefix = "row-"
|
||||||
|
) =>
|
||||||
|
Array.from({ length }).map((_, rowIndex) => {
|
||||||
|
return columns.reduce(
|
||||||
|
(rowData, column, columnIndex) => {
|
||||||
|
rowData[column.dataKey] = `Row ${rowIndex} - Col ${columnIndex}`;
|
||||||
|
return rowData;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: `${prefix}${rowIndex}`,
|
||||||
|
parentId: null
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
const columns = generateColumns(10);
|
||||||
|
const data = generateData(columns, 1000);
|
||||||
|
|
||||||
|
const exportExcel = () => {
|
||||||
|
const res: string[][] = data.map((item: DataItem) => {
|
||||||
|
const arr = [];
|
||||||
|
columns.forEach((column: Columns) => {
|
||||||
|
arr.push(item[column.dataKey]);
|
||||||
|
});
|
||||||
|
return arr;
|
||||||
|
});
|
||||||
|
const titleList: string[] = [];
|
||||||
|
columns.forEach((column: Columns) => {
|
||||||
|
titleList.push(column.title);
|
||||||
|
});
|
||||||
|
res.unshift(titleList);
|
||||||
|
const workSheet = utils.aoa_to_sheet(res);
|
||||||
|
const workBook = utils.book_new();
|
||||||
|
utils.book_append_sheet(workBook, workSheet, "数据报表");
|
||||||
|
writeFile(workBook, "tale-list.xlsx");
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<el-card>
|
||||||
|
<template #header>
|
||||||
|
<div class="font-medium">
|
||||||
|
导出Execl(
|
||||||
|
<el-link
|
||||||
|
href="https://github.com/SheetJS/sheetjs"
|
||||||
|
target="_blank"
|
||||||
|
style="font-size: 16px; margin: 0 5px 4px 0"
|
||||||
|
>
|
||||||
|
github地址
|
||||||
|
</el-link>
|
||||||
|
)
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<el-button type="primary" @click="exportExcel">导出Excel </el-button>
|
||||||
|
<div class="h-100 mt-3">
|
||||||
|
<el-auto-resizer>
|
||||||
|
<template #default="{ height, width }">
|
||||||
|
<el-table-v2
|
||||||
|
:columns="columns"
|
||||||
|
:data="data"
|
||||||
|
:width="width"
|
||||||
|
:height="height"
|
||||||
|
fixed
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-auto-resizer>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</template>
|
Loading…
x
Reference in New Issue
Block a user