明树Git Lab

Commit 485bc38d authored by zhanghan's avatar zhanghan

建设期投资检查开发完毕

parents ada7604b 33a92c02
Pipeline #106419 passed with stage
in 17 seconds
import * as XLSX from "xlsx";
// 导入excel文件显示到前端页面
const importTableFile = async (file) => {
const data = await readFile(file.raw);
// 使用 xlsx 解析
let workbook = XLSX.read(data, {
type: 'array',
cellDates: true,
cellStyles: true
});
console.log(workbook);
};
const readFile = (file) => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (e) => resolve(e.target.result);
reader.onerror = reject;
reader.readAsArrayBuffer(file);
});
};
// 导出页面数据,生成excel文件
const exportTableFile = (tableData, tableColumns, title, fileName) => {
const wb = XLSX.utils.book_new()
// 2. 准备数据
let wsData = [[title], []]
// 添加表头
if (tableColumns && tableColumns.length > 0) {
const headerRow = tableColumns.map(h => h.label || h)
wsData.push(headerRow)
}
// 添加数据行
tableData.forEach(item => {
if (tableColumns) {
// 按表头配置提取数据
const row = tableColumns.map(header => {
const value = getNestedValue(item, header.prop || header)
return formatCellValue(value, header.formatter)
})
wsData.push(row)
} else {
// 如果没有表头配置,直接使用对象值
const row = Object.values(item)
wsData.push(row)
}
})
// 3. 创建工作表
const ws = XLSX.utils.aoa_to_sheet(wsData)
// 4. 设置列宽(可选)
if (tableColumns) {
const colWidths = tableColumns.map(header => ({
wch: header.width || Math.max(
(header.label || header).length,
...tableData.map(item => {
const value = getNestedValue(item, header.prop || header)
return String(value || '').length
})
) * 2
}))
ws['!cols'] = colWidths
}
// 合并标题单元格
ws['!merges'] = [
XLSX.utils.decode_range('A1:Q1') // 合并第一行的 A-E 列
]
// 5. 将工作表添加到工作簿
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1')
// 6. 生成 Excel 文件并下载
XLSX.writeFile(wb, fileName + ".xlsx");
};
// 辅助函数:获取嵌套对象的值
const getNestedValue = (obj, path) => {
return path.split('.').reduce((prev, curr) => {
return prev ? prev[curr] : null
}, obj)
}
// 辅助函数:格式化单元格值
const formatCellValue = (value, formatter) => {
if (formatter && typeof formatter === 'function') {
return formatter(value)
}
return value
}
export{
importTableFile,
exportTableFile
}
\ No newline at end of file
......@@ -235,7 +235,7 @@
v-model="scope.row.yjwcsj"
type="datetime"
placeholder="请选择"
value-format="YYYY-MM-DD HH:mm:SS"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</template>
</el-table-column>
......
This diff is collapsed.
......@@ -208,6 +208,7 @@
v-model="scope.row.lssj"
type="datetime"
placeholder="请选择"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</template>
</el-table-column>
......
......@@ -101,7 +101,7 @@
router.push({
name: "addRisk",
query: {
controlId: item.id
riskId: item.id
}
});
};
......
......@@ -31,7 +31,7 @@
<script setup>
import { reactive, ref } from "vue";
import * as XLSX from "xlsx";
import { exportTableFile } from "../../common/tableFileHandle";
const tableColumns = reactive([
{
prop: "projectName",
......@@ -116,74 +116,8 @@
}).catch(() => {});
};
const exportData = () => {
// 1. 创建工作簿
const wb = XLSX.utils.book_new()
// 2. 准备数据
let wsData = [["投资项目批复意见落实情况统计表"], []]
// 添加表头
if (tableColumns && tableColumns.length > 0) {
const headerRow = tableColumns.map(h => h.label || h)
wsData.push(headerRow)
}
// 添加数据行
tableData.value.forEach(item => {
if (tableColumns) {
// 按表头配置提取数据
const row = tableColumns.map(header => {
const value = getNestedValue(item, header.prop || header)
return formatCellValue(value, header.formatter)
})
wsData.push(row)
} else {
// 如果没有表头配置,直接使用对象值
const row = Object.values(item)
wsData.push(row)
}
})
// 3. 创建工作表
const ws = XLSX.utils.aoa_to_sheet(wsData)
// 4. 设置列宽(可选)
if (tableColumns) {
const colWidths = tableColumns.map(header => ({
wch: header.width || Math.max(
(header.label || header).length,
...tableData.value.map(item => {
const value = getNestedValue(item, header.prop || header)
return String(value || '').length
})
) * 2
}))
ws['!cols'] = colWidths
}
// 合并标题单元格
ws['!merges'] = [
XLSX.utils.decode_range('A1:Q1') // 合并第一行的 A-E 列
]
// 5. 将工作表添加到工作簿
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1')
// 6. 生成 Excel 文件并下载
XLSX.writeFile(wb, "导出文件.xlsx");
exportTableFile(tableData.value, tableColumns, "投资项目批复意见落实情况统计表", "导出文件")
};
// 辅助函数:获取嵌套对象的值
function getNestedValue(obj, path) {
return path.split('.').reduce((prev, curr) => {
return prev ? prev[curr] : null
}, obj)
}
// 辅助函数:格式化单元格值
function formatCellValue(value, formatter) {
if (formatter && typeof formatter === 'function') {
return formatter(value)
}
return value
}
</script>
<style lang="less">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment