| | |
| | | <script setup> |
| | | import { ref, reactive, onMounted, computed, watch, nextTick } from "vue"; |
| | | import { ElMessage } from "element-plus"; |
| | | import { saveAs } from "file-saver"; |
| | | import { listAccountSubject } from "@/api/financialManagement/accountSubject"; |
| | | import { getDetailLedger } from "@/api/financialManagement/ledger"; |
| | | |
| | |
| | | ElMessage.info("打印功能"); |
| | | }; |
| | | |
| | | const csvCell = (value) => { |
| | | const text = value === undefined || value === null ? "" : String(value); |
| | | return `"${text.replace(/"/g, '""').replace(/\r?\n/g, " ")}"`; |
| | | }; |
| | | |
| | | const handleOut = () => { |
| | | if (!currentSubject.value) { |
| | | ElMessage.warning("请先选择会计科目"); |
| | | return; |
| | | } |
| | | if (dataList.value.length === 0) { |
| | | ElMessage.warning("当前没有可导出的数据"); |
| | | return; |
| | | } |
| | | const header = ["日期", "凭证字号", "摘要", "借方", "贷方", "方向", "余额"]; |
| | | const rows = dataList.value.map((row) => [ |
| | | row.date || "", |
| | | row.voucherNo || "", |
| | | row.summary || "", |
| | | Number(row.debit || 0).toFixed(2), |
| | | Number(row.credit || 0).toFixed(2), |
| | | row.direction || "", |
| | | Math.abs(Number(row.balance || 0)).toFixed(2), |
| | | ]); |
| | | const content = [header, ...rows].map((line) => line.map(csvCell).join(",")).join("\r\n"); |
| | | // 带 BOM,避免 Excel 打开中文乱码 |
| | | const blob = new Blob(["\ufeff" + content], { type: "text/csv;charset=utf-8;" }); |
| | | const period = [filters.startMonth, filters.endMonth].filter(Boolean).join("_"); |
| | | const name = `明细账_${currentSubject.value.code}_${currentSubject.value.name}${period ? `_${period}` : ""}.csv`; |
| | | saveAs(blob, name); |
| | | ElMessage.success("导出成功"); |
| | | }; |
| | | |