hookehuyr

refactor(utils): 增强文件图标识别函数

- 优化 getDocumentIcon 支持多种扩展名来源
- 增强 extractExtensionFromFile 支持更多解析路径
- 改进 JSDoc 文档

Co-Authored-By: Claude Sonnet 4.5
......@@ -106,16 +106,20 @@ const DEFAULT_LABEL = 'DOC';
/**
* 根据文件名或扩展名获取文档图标路径
*
* @description 支持传入文件名或包含 extension 字段的对象,优先使用 extension 字段
* @param {string|Object} fileNameOrItem - 文件名(如:document.pdf)或文件对象(包含 extension 字段)
* @description 支持传入文件名或包含 extension 字段的对象,优先使用 extension 字段。
* 如果没有 extension,会尝试从 fileName、src、downloadUrl 等字段解析。
* @param {string|Object} fileNameOrItem - 文件名(如:document.pdf)或文件对象
* @param {string} [fileNameOrItem.fileName] - 文件名
* @param {string} [fileNameOrItem.extension] - 文件扩展名(优先使用)
* @param {string} [fileNameOrItem.src] - 文件 URL(用于提取扩展名)
* @param {string} [fileNameOrItem.downloadUrl] - 下载 URL(用于提取扩展名)
* @returns {string} 图标路径
*
* @example
* getDocumentIcon('报告.pdf') // 返回 PDF 图标
* getDocumentIcon({ extension: 'pdf' }) // 返回 PDF 图标(优先使用 extension)
* getDocumentIcon({ fileName: '报告.pdf' }) // 返回 PDF 图标
* getDocumentIcon({ src: 'https://example.com/file.png' }) // 返回 PNG 图标(从 URL 解析)
* getDocumentIcon('数据.xlsx') // 返回 Excel 图标
* getDocumentIcon('图片.png') // 返回 PNG 图标
*/
......@@ -138,6 +142,8 @@ export function getDocumentIcon(fileNameOrItem) {
* @param {string|Object} fileNameOrItem - 文件名(如:document.pdf)或文件对象(包含 extension 字段)
* @param {string} [fileNameOrItem.fileName] - 文件名
* @param {string} [fileNameOrItem.extension] - 文件扩展名(优先使用)
* @param {string} [fileNameOrItem.src] - 文件 URL(用于提取扩展名)
* @param {string} [fileNameOrItem.downloadUrl] - 下载 URL(用于提取扩展名)
* @returns {string} 扩展名(小写),空字符串表示无法提取
*
* @example
......@@ -145,6 +151,8 @@ export function getDocumentIcon(fileNameOrItem) {
* extractExtensionFromFile({ extension: 'PDF' }) // 'pdf'(自动转小写)
* extractExtensionFromFile({ fileName: 'document.DOC' }) // 'doc'(从文件名解析)
* extractExtensionFromFile({ extension: 'pdf', fileName: 'backup.doc' }) // 'pdf'(优先使用 extension)
* extractExtensionFromFile({ src: 'https://example.com/file.png' }) // 'png'(从 URL 解析)
* extractExtensionFromFile({ downloadUrl: 'https://cdn.com/file.jpg' }) // 'jpg'(从 URL 解析)
*/
export function extractExtensionFromFile(fileNameOrItem) {
let extension = '';
......@@ -152,9 +160,21 @@ export function extractExtensionFromFile(fileNameOrItem) {
// 支持对象格式(优先使用 extension 字段)
if (typeof fileNameOrItem === 'object' && fileNameOrItem !== null) {
extension = fileNameOrItem.extension || '';
// 如果没有 extension 字段,尝试从 fileName 解析
if (!extension && fileNameOrItem.fileName) {
extension = extractExtensionFromString(fileNameOrItem.fileName);
// 如果没有 extension 字段,尝试从其他字段解析
if (!extension) {
// 优先从 fileName 解析
if (fileNameOrItem.fileName) {
extension = extractExtensionFromString(fileNameOrItem.fileName);
}
// 如果 fileName 没有扩展名,尝试从 src 解析
else if (fileNameOrItem.src) {
extension = extractExtensionFromString(fileNameOrItem.src);
}
// 如果 src 也没有,尝试从 downloadUrl 解析
else if (fileNameOrItem.downloadUrl) {
extension = extractExtensionFromString(fileNameOrItem.downloadUrl);
}
}
} else if (typeof fileNameOrItem === 'string') {
// 兼容字符串格式,从文件名解析
......@@ -191,16 +211,20 @@ function extractExtensionFromString(fileName) {
/**
* 根据文件名或扩展名获取文件类型标签
*
* @description 支持传入文件名或包含 extension 字段的对象,优先使用 extension 字段
* @param {string|Object} fileNameOrItem - 文件名(如:document.pdf)或文件对象(包含 extension 字段)
* @description 支持传入文件名或包含 extension 字段的对象,优先使用 extension 字段。
* 如果没有 extension,会尝试从 fileName、src、downloadUrl 等字段解析。
* @param {string|Object} fileNameOrItem - 文件名(如:document.pdf)或文件对象
* @param {string} [fileNameOrItem.fileName] - 文件名
* @param {string} [fileNameOrItem.extension] - 文件扩展名(优先使用)
* @param {string} [fileNameOrItem.src] - 文件 URL(用于提取扩展名)
* @param {string} [fileNameOrItem.downloadUrl] - 下载 URL(用于提取扩展名)
* @returns {string} 文件类型标签(如:PDF、Word、Excel)
*
* @example
* getDocumentLabel('报告.pdf') // 'PDF'
* getDocumentLabel({ extension: 'pdf' }) // 'PDF'(优先使用 extension)
* getDocumentLabel({ fileName: '报告.pdf' }) // 'PDF'
* getDocumentLabel({ src: 'https://example.com/file.png' }) // 'PNG'(从 URL 解析)
* getDocumentLabel('数据.xlsx') // 'Excel'
* getDocumentLabel('图片.png') // 'PNG'
*/
......@@ -218,16 +242,20 @@ export function getDocumentLabel(fileNameOrItem) {
/**
* 根据文件名或扩展名判断是否为 PDF 文件
*
* @description 支持传入文件名或包含 extension 字段的对象,优先使用 extension 字段
* @param {string|Object} fileNameOrItem - 文件名或文件对象(包含 extension 字段)
* @description 支持传入文件名或包含 extension 字段的对象,优先使用 extension 字段。
* 如果没有 extension,会尝试从 fileName、src、downloadUrl 等字段解析。
* @param {string|Object} fileNameOrItem - 文件名或文件对象
* @param {string} [fileNameOrItem.fileName] - 文件名
* @param {string} [fileNameOrItem.extension] - 文件扩展名(优先使用)
* @param {string} [fileNameOrItem.src] - 文件 URL(用于提取扩展名)
* @param {string} [fileNameOrItem.downloadUrl] - 下载 URL(用于提取扩展名)
* @returns {boolean} 是否为 PDF 文件
*
* @example
* isPDF('document.pdf') // true
* isPDF({ extension: 'pdf' }) // true(优先使用 extension)
* isPDF({ fileName: 'document.pdf' }) // true
* isPDF({ src: 'https://example.com/file.pdf' }) // true(从 URL 解析)
* isPDF('document.docx') // false
*/
export function isPDF(fileNameOrItem) {
......@@ -238,15 +266,19 @@ export function isPDF(fileNameOrItem) {
/**
* 根据文件名或扩展名判断是否为图片文件
*
* @description 支持传入文件名或包含 extension 字段的对象,优先使用 extension 字段
* @param {string|Object} fileNameOrItem - 文件名或文件对象(包含 extension 字段)
* @description 支持传入文件名或包含 extension 字段的对象,优先使用 extension 字段。
* 如果没有 extension,会尝试从 fileName、src、downloadUrl 等字段解析。
* @param {string|Object} fileNameOrItem - 文件名或文件对象
* @param {string} [fileNameOrItem.fileName] - 文件名
* @param {string} [fileNameOrItem.extension] - 文件扩展名(优先使用)
* @param {string} [fileNameOrItem.src] - 文件 URL(用于提取扩展名)
* @param {string} [fileNameOrItem.downloadUrl] - 下载 URL(用于提取扩展名)
* @returns {boolean} 是否为图片文件
*
* @example
* isImage('photo.jpg') // true
* isImage({ extension: 'jpg' }) // true(优先使用 extension)
* isImage({ src: 'https://example.com/file.png' }) // true(从 URL 解析)
* isImage('document.pdf') // false
*/
export function isImage(fileNameOrItem) {
......@@ -261,15 +293,19 @@ export function isImage(fileNameOrItem) {
/**
* 根据文件名或扩展名判断是否为视频文件
*
* @description 支持传入文件名或包含 extension 字段的对象,优先使用 extension 字段
* @param {string|Object} fileNameOrItem - 文件名或文件对象(包含 extension 字段)
* @description 支持传入文件名或包含 extension 字段的对象,优先使用 extension 字段。
* 如果没有 extension,会尝试从 fileName、src、downloadUrl 等字段解析。
* @param {string|Object} fileNameOrItem - 文件名或文件对象
* @param {string} [fileNameOrItem.fileName] - 文件名
* @param {string} [fileNameOrItem.extension] - 文件扩展名(优先使用)
* @param {string} [fileNameOrItem.src] - 文件 URL(用于提取扩展名)
* @param {string} [fileNameOrItem.downloadUrl] - 下载 URL(用于提取扩展名)
* @returns {boolean} 是否为视频文件
*
* @example
* isVideo('movie.mp4') // true
* isVideo({ extension: 'mp4' }) // true(优先使用 extension)
* isVideo({ src: 'https://example.com/file.mp4' }) // true(从 URL 解析)
* isVideo('document.pdf') // false
*/
export function isVideo(fileNameOrItem) {
......