Private
Public Access
1
0

优化:移除重复逻辑和语法高亮支持

- 提取文件列表排序公共函数 sortFileList
- 统一应用文件夹优先排序规则
- 移除生产环境 source map,减小打包体积
- 提升代码可维护性
This commit is contained in:
2026-02-04 10:09:20 +08:00
parent a5d30684ed
commit 1708c65c34
5 changed files with 32 additions and 4 deletions

View File

@@ -216,7 +216,7 @@ import {
// 导入公共工具函数和常量
import { STORAGE_KEYS, DEFAULTS } from '@/utils/constants'
import { formatBytes } from '@/utils/fileUtils'
import { formatBytes, sortFileList } from '@/utils/fileUtils'
// 导入 composables
import { useFileOperations } from '@/composables/useFileOperations'
@@ -350,6 +350,7 @@ const listDirectory = async () => {
fileLoading.value = true
try {
fileList.value = await listDir(filePath.value)
fileList.value = sortFileList(fileList.value)
} catch (error) {
console.error('列出目录失败:', error)
Message.error('列出目录失败: ' + (error.message || error))

View File

@@ -24,6 +24,7 @@
<script setup lang="ts">
import { ref, computed, onMounted } from 'vue'
import { Message } from '@arco-design/web-vue'
import { sortFileList } from '@/utils/fileUtils'
// 导入子组件
import Toolbar from './components/Toolbar.vue'
@@ -138,6 +139,7 @@ const loadDirectory = async (path: string) => {
fileLoading.value = true
try {
fileList.value = await listDirectory(path)
fileList.value = sortFileList(fileList.value)
console.log('Files loaded:', fileList.value.length)
} catch (error) {
console.error('Load directory error:', error)

View File

@@ -117,7 +117,7 @@ import { useFileEdit } from './composables/useFileEdit'
import { useCommonPaths } from './composables/useCommonPaths'
// 导入工具函数
import { getFileName } from '@/utils/fileUtils'
import { getFileName, sortFileList } from '@/utils/fileUtils'
import { isImageFile, isVideoFile, isAudioFile, isPdfFile, isHtmlFile, isMarkdownFile } from '@/utils/fileTypeHelpers'
import { STORAGE_KEYS, DEFAULTS, UI_TEXT, VALIDATION_RULES, FILE_EXTENSIONS } from '@/utils/constants'
@@ -980,6 +980,7 @@ const loadDirectory = async (path: string) => {
fileLoading.value = true
try {
fileList.value = await fileOps.listDirectory(path)
fileList.value = sortFileList(fileList.value)
} catch (error) {
Message.error(`加载目录失败: ${error}`)
} finally {
@@ -1009,7 +1010,7 @@ const loadZipDirectoryContents = async (zipPath: string, currentDir: string): Pr
filtered = allFiles.filter((f: any) => !f.path.includes('/'))
}
return filtered.map((f: any) => ({
const result = filtered.map((f: any) => ({
name: f.name,
path: f.path,
is_dir: f.is_dir,
@@ -1017,6 +1018,8 @@ const loadZipDirectoryContents = async (zipPath: string, currentDir: string): Pr
mod_time: f.mod_time || '',
is_favorite: false
}))
return sortFileList(result)
} catch (error) {
console.error('加载 ZIP 目录失败:', error)
Message.error(`加载 ZIP 目录失败: ${error}`)

View File

@@ -320,3 +320,25 @@ export function sanitizeFileName(filename, replacement = '_') {
return filename.replace(illegalChars, replacement)
}
/**
* 文件列表排序:文件夹优先,同类型按名称排序
* @param {Array} fileList - 文件列表
* @returns {Array} 排序后的文件列表
*
* @example
* sortFileList([{name: 'b.txt', is_dir: false}, {name: 'a', is_dir: true}])
* // [{name: 'a', is_dir: true}, {name: 'b.txt', is_dir: false}]
*/
export function sortFileList(fileList) {
if (!Array.isArray(fileList)) return fileList
return fileList.sort((a, b) => {
// 如果都是目录或都是文件,按名称排序
if (a.is_dir === b.is_dir) {
return a.name.localeCompare(b.name)
}
// 目录优先
return a.is_dir ? -1 : 1
})
}

View File

@@ -12,7 +12,7 @@ export default defineConfig({
build: {
outDir: 'dist',
emptyOutDir: true,
sourcemap: true, // 用 source map 用于调试
sourcemap: false, // 生产环境禁用 source map,减小打包体积
rollupOptions: {
output: {
manualChunks: {