From f56e474c81bb25845b46cf99c85bd313dbfcd3b5 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期六, 31 一月 2026 19:26:25 +0800
Subject: [PATCH] 项目初始化+首页+公告详情页面
---
src/utils/export/excel.js | 80 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 80 insertions(+), 0 deletions(-)
diff --git a/src/utils/export/excel.js b/src/utils/export/excel.js
new file mode 100644
index 0000000..126eac7
--- /dev/null
+++ b/src/utils/export/excel.js
@@ -0,0 +1,80 @@
+import * as XLSX from 'xlsx-js-style'; // 鍙︿竴绉嶅父瑙佺殑瀵煎叆鏂瑰紡
+export const exportToExcel = (headers, list, fileName) => {
+ // 瀹氫箟鑷畾涔夎〃澶村拰鏁版嵁鏄犲皠
+ const headerData = headers.filter(item => !item.noExport).map(item => item.label);
+ const bodyData = list.map(item => {
+ let itemList = []
+ headers.forEach(header => {
+ if (header.noExport) return
+ itemList.push(item[header.value])
+ })
+ return itemList
+ });
+
+ // 灏嗚〃澶村拰鏁版嵁浣撶粍鍚堟垚涓�涓簩缁存暟缁�
+ const allData = [headerData, ...bodyData];
+
+ // 浣跨敤 aoa_to_sheet 鏂规硶锛屽畠鎺ュ彈浜岀淮鏁扮粍
+ const ws = XLSX.utils.aoa_to_sheet(allData);
+
+ const headerStyle = {
+ font: { bold: true, sz: 12 },
+ alignment: { horizontal: 'center', vertical: 'center' },
+ }
+
+ // 鏁版嵁鍗曞厓鏍兼牱寮忥細灞呬腑
+ const cellStyle = {
+ alignment: { horizontal: 'center', vertical: 'center' }
+ }
+
+ // 3. 璁$畻骞惰缃垪瀹斤紙鏍稿績锛氭渶澶у搴﹂檺鍒朵笅鐨勮嚜閫傚簲锛�
+ const maxWidth = 30 // 璁剧疆鏈�澶у垪瀹斤紙鍗曚綅锛氬瓧绗︽暟锛�
+ const colWidths = []
+
+ // 閬嶅巻姣忎竴鍒楄绠楁渶澶у搴�
+ for (let col = 0; col < allData[0].length; col++) {
+ let maxLen = 10 // 榛樿鏈�灏忓搴�
+ for (let row = 0; row < allData.length; row++) {
+ const value = allData[row][col]
+ if (value != null) {
+ // 璁$畻鍗曞厓鏍煎唴瀹归暱搴︼紙涓枃鎸�2涓瓧绗︾畻锛�
+ let len = 0
+ const str = value.toString()
+ for (let i = 0; i < str.length; i++) {
+ const charCode = str.charCodeAt(i)
+ len += (charCode > 255) ? 2 : 1 // 涓枃瀛楃绠�2涓搴�
+ }
+ if (len > maxLen) maxLen = len
+ }
+ }
+ // 搴旂敤鏈�澶у搴﹂檺鍒�
+ colWidths.push({ wch: Math.min(maxLen + 2, maxWidth) })
+ }
+ ws['!cols'] = colWidths
+
+ // 4. 搴旂敤鏍峰紡鍒版墍鏈夊崟鍏冩牸
+ const range = XLSX.utils.decode_range(ws['!ref'])
+ for (let R = range.s.r; R <= range.e.r; R++) {
+ for (let C = range.s.c; C <= range.e.c; C++) {
+ const cellAddress = { c: C, r: R }
+ const cellRef = XLSX.utils.encode_cell(cellAddress)
+
+ if (!ws[cellRef]) ws[cellRef] = {} // 纭繚鍗曞厓鏍煎瓨鍦�
+ if (!ws[cellRef].s) ws[cellRef].s = {} // 纭繚鏍峰紡瀵硅薄瀛樺湪
+
+ // 绗竴琛岋紙琛ㄥご锛夊簲鐢╤eaderStyle锛屽叾浠栬搴旂敤cellStyle
+ ws[cellRef].s = R === 0 ?
+ { ...ws[cellRef].s, ...headerStyle } :
+ { ...ws[cellRef].s, ...cellStyle }
+ }
+ }
+
+ // ... 鍚庣画鍒涘缓宸ヤ綔绨垮拰瀵煎嚭鐨勬楠ゅ悓涓�
+
+ const workbook = XLSX.utils.book_new();
+ XLSX.utils.book_append_sheet(workbook, ws, 'Sheet1');
+
+ // 3. 鐢熸垚Excel鏂囦欢骞朵繚瀛�
+ XLSX.writeFile(workbook, `${fileName || '瀵煎嚭鏁版嵁'}.xlsx`); // 浣跨敤xlsx搴撶殑writeFile鏂规硶
+
+};
--
Gitblit v1.8.0