import { openOfficeFileApi } from '@jeesite/core/api/sys/login'; const normalizeOfficeFileKey = (value: string) => value.trim().toLowerCase().replace(/[_\-\s]/g, ''); const OFFICE_FILE_ID_KEY_SET = new Set(['fileid']); export const normalizeOfficeFileId = (value: unknown) => { const text = String(value ?? '').trim(); if (!text || text === '-' || text === 'null' || text === 'undefined') return undefined; return text; }; const readOfficeFileIdFromRecord = (record: Record) => { for (const [key, value] of Object.entries(record)) { if (OFFICE_FILE_ID_KEY_SET.has(normalizeOfficeFileKey(key))) { const fileId = normalizeOfficeFileId(value); if (fileId) return fileId; } } return undefined; }; export const resolveOfficeFileId = (source: unknown): string | undefined => { if (!source || typeof source !== 'object') return undefined; const queue: Array> = [source as Record]; const visited = new Set>(); while (queue.length) { const current = queue.shift(); if (!current || visited.has(current)) continue; visited.add(current); const directFileId = readOfficeFileIdFromRecord(current); if (directFileId) return directFileId; ['raw', 'record', 'source', 'data'].forEach((key) => { const nested = current[key]; if (nested && typeof nested === 'object' && !Array.isArray(nested)) { queue.push(nested as Record); } }); } return undefined; }; export const isOpenOfficeFileSuccess = (response: any) => { const result = String(response?.result ?? '').toLowerCase(); const code = String(response?.code ?? '').toLowerCase(); return result === 'true' || result === 'success' || code === '200' || code === '0'; }; export const getOpenOfficeFileErrorMessage = (error: any, fallback = '打开文件失败') => error?.response?.data?.message || error?.message || fallback; export const openOfficeFileById = (fileId: string | number) => openOfficeFileApi(fileId);