import * as Common from "@/utils/common"; export const DEFAULT_PRINT_PREVIEW_FETCH_PAGE_SIZE = 100; export const downloadBlobFile = (response, filename) => { const blob = new Blob([response.data], { type: response.headers["content-type"] }); const url = window.URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; link.setAttribute("download", filename); document.body.appendChild(link); link.click(); link.remove(); window.URL.revokeObjectURL(url); }; export const buildDefaultReportMeta = title => { let user = null; try { const persistedUser = localStorage.getItem("user"); user = persistedUser ? JSON.parse(persistedUser) : null; } catch (error) { console.warn("Failed to parse persisted user", error); } const tenant = user?.tenant || {}; const now = new Date(); const year = now.getFullYear(); const month = `${now.getMonth() + 1}`.padStart(2, "0"); const day = `${now.getDate()}`.padStart(2, "0"); return { companyName: tenant?.name || tenant?.tenantName || tenant?.label || user?.fullName || "RSF", printedBy: user?.fullName || user?.username || "系统用户", reportDate: `${year}年${month}月${day}日`, reportDateValue: `${year}-${month}-${day}`, title, }; }; export const buildListReportRequestPayload = ({ filter, filterValues, sort, ids, columns, reportMeta, extraPayload = {}, }) => ({ ...Common.integrateParams({ sort, filter: filter ? { ...filterValues, ...filter } : filterValues, }), ids: ids?.length ? ids : undefined, columns, reportMeta, ...extraPayload, }); const getColumnToken = column => column?.key || column?.source; const resolveColumnByToken = (columnDefs, token) => { if (typeof token === "number" || /^\d+$/.test(String(token))) { return columnDefs[Number(token)]; } if (typeof token === "string") { return columnDefs.find(column => column.key === token || column.source === token); } if (token && typeof token === "object") { if ("index" in token) { return columnDefs[Number(token.index)]; } if ("source" in token) { return columnDefs.find(column => column.source === token.source); } if ("key" in token) { return columnDefs.find(column => column.key === token.key); } if ("id" in token) { return columnDefs.find(column => column.key === token.id || column.source === token.id); } } return undefined; }; const buildDefaultVisibleColumns = (columnDefs, omitSet) => columnDefs.filter(column => !omitSet.has(column.source) && !omitSet.has(column.key)); export const resolveVisibleColumns = ({ columnDefs = [], storedColumns = [], availableColumns = [], storedOmit = [], omit = [], }) => { if (!Array.isArray(columnDefs) || columnDefs.length === 0) { return []; } const omitSet = new Set([...(omit || []), ...(storedOmit || [])]); const fallbackColumns = buildDefaultVisibleColumns(columnDefs, omitSet); const storedOrder = Array.isArray(storedColumns) && storedColumns.length > 0 ? storedColumns : Array.isArray(availableColumns) && availableColumns.length > 0 ? availableColumns : []; const resolvedColumns = storedOrder .map(token => resolveColumnByToken(columnDefs, token)) .filter(Boolean) .filter(column => !omitSet.has(column.source) && !omitSet.has(column.key)); const visibleColumns = resolvedColumns.length > 0 ? resolvedColumns : fallbackColumns; return visibleColumns.map(column => ({ key: column.key, source: column.source, label: column.label, isExtendField: Boolean(column.isExtendField), })); }; const getNestedValue = (record, source) => source.split(".").reduce((accumulator, segment) => { if (accumulator == null) { return undefined; } return accumulator[segment]; }, record); export const getListReportCellValue = (record, source) => { if (!record || !source) { return ""; } const extendFieldMatch = source.match(/^extendFields\.\[(.+)\]$/); if (extendFieldMatch) { return record?.extendFields?.[extendFieldMatch[1]] ?? ""; } if (Object.prototype.hasOwnProperty.call(record, source)) { return record[source] ?? ""; } const value = source.includes(".") ? getNestedValue(record, source) : record[source]; return value ?? ""; }; export const resolveReportMeta = (reportConfig, params) => { if (typeof reportConfig?.buildReportMeta === "function") { return reportConfig.buildReportMeta(params); } return reportConfig?.reportMeta || null; };