| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 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<string, any>) => {
- 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<Record<string, any>> = [source as Record<string, any>];
- const visited = new Set<Record<string, any>>();
- 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<string, any>);
- }
- });
- }
- 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);
|