Private
Public Access
1
0

重构:Wails升级/mermaid主题切换/代码高亮修复/文件系统UI重构

- Wails v2.12.0升级(App绑定新增API、runtime类型扩展)
- 修复mermaid暗色主题切换渲染失败(SVG textContent污染→data-mermaid-src保存源码)
- 修复代码高亮全语言失效(languageMap静态白名单替代运行时hljs检查)
- 文件系统:FileListPanel重写、FileItemRow合并删除、Toolbar简化
- 新增剪贴板图片粘贴(Ctrl+V粘贴图片到当前目录)
- 死代码清理:DeviceTest/errorHandler/useLocalStorage移除
- MarkdownEditor优化、theme store增强、CodeMirror加载器精简
This commit is contained in:
2026-04-11 16:46:43 +08:00
parent efc042fcd3
commit 7dbd57a8b6
40 changed files with 1274 additions and 1404 deletions

View File

@@ -321,22 +321,58 @@ export function sanitizeFileName(filename, replacement = '_') {
}
/**
* 文件列表排序:文件夹优先,同类型按名称排序
* 文件列表排序:文件夹优先,支持多字段排序
* @param {Array} fileList - 文件列表
* @param {Object} options - 排序选项 { sortBy, sortOrder }
* @returns {Array} 排序后的文件列表
*
* @example
* sortFileList([{name: 'b.txt', isDir: false}, {name: 'a', isDir: true}])
* // [{name: 'a', isDir: true}, {name: 'b.txt', isDir: false}]
* sortFileList(fileList, { sortBy: 'name', sortOrder: 'asc' })
*/
export function sortFileList(fileList) {
/**
* 格式化文件修改时间
* @param {string} t - 时间字符串
* @returns {string} 格式化后的时间,如 2026/04/11 14:30
*/
export function formatFileTime(t) {
if (!t) return ''
const d = new Date(t)
if (isNaN(d.getTime())) return t
const pad = n => String(n).padStart(2, '0')
return `${d.getFullYear()}/${pad(d.getMonth()+1)}/${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`
}
export function sortFileList(fileList, options = {}) {
if (!Array.isArray(fileList)) return fileList
const { sortBy = 'name', sortOrder = 'asc' } = options
const dir = sortOrder === 'desc' ? 1 : -1
return fileList.sort((a, b) => {
// API 层已转换,直接使用 isDir
if (a.isDir === b.isDir) {
return a.name.localeCompare(b.name)
// 文件夹始终排在前面
if (a.isDir !== b.isDir) {
return a.isDir ? -1 : 1
}
return a.isDir ? -1 : 1
let cmp = 0
switch (sortBy) {
case 'size':
cmp = (a.size || 0) - (b.size || 0)
break
case 'type': {
cmp = getExt(a.name).localeCompare(getExt(b.name))
break
}
case 'modified_time': {
const ta = a.modified_time ? new Date(a.modified_time).getTime() : 0
const tb = b.modified_time ? new Date(b.modified_time).getTime() : 0
cmp = ta - tb
break
}
default: // name
cmp = a.name.localeCompare(b.name)
}
return cmp * dir
})
}