fix: 文件图标按类型区分,统一两个组件的图标映射
This commit is contained in:
+18
-10
@@ -11,24 +11,32 @@ let chatAreaEl, messagesContainerEl, emptyStateEl;
|
||||
|
||||
/** 根据文件名返回合适的图标 */
|
||||
function getFileIcon(filename) {
|
||||
const name = filename.toLowerCase();
|
||||
if (name === 'dockerfile') return '🐳';
|
||||
if (name === 'makefile' || name === 'gnumakefile') return '🔨';
|
||||
const ext = filename.split('.').pop().toLowerCase();
|
||||
const iconMap = {
|
||||
const map = {
|
||||
py: '🐍', pyw: '🐍', pyi: '🐍',
|
||||
js: '💛', mjs: '💛', cjs: '💛',
|
||||
ts: '🔷', tsx: '⚛️', jsx: '⚛️',
|
||||
java: '☕', go: '🐹', rs: '🦀', rb: '💎',
|
||||
php: '🐘', sh: '🐚', bash: '🐚', zsh: '🐚',
|
||||
php: '🐘', swift: '🍎', kt: '🤖', scala: '🔴',
|
||||
lua: '🌙', pl: '🐪', r: '📐', m: '📐',
|
||||
cs: '🟪', fs: '🔵', vb: '🔷',
|
||||
ex: '💧', exs: '💧', erl: '📞', hs: '🟣',
|
||||
clj: '🟢', lisp: '🟢',
|
||||
cpp: '⚙️', cc: '⚙️', cxx: '⚙️', hpp: '⚙️',
|
||||
c: '⚙️', h: '⚙️',
|
||||
sh: '🐚', bash: '🐚', zsh: '🐚', fish: '🐚',
|
||||
html: '🌐', htm: '🌐', css: '🎨', svg: '🎨',
|
||||
json: '📋', yaml: '📋', yml: '📋', toml: '📋',
|
||||
xml: '📰', sql: '🗃️', md: '📝', markdown: '📝',
|
||||
txt: '📄', log: '📜', csv: '📊', tsv: '📊',
|
||||
cpp: '⚙️', c: '⚙️', h: '⚙️', hpp: '⚙️',
|
||||
swift: '🍎', kt: '🤖', lua: '🌙',
|
||||
dockerfile: '🐳', makefile: '🔨',
|
||||
ini: '📋', cfg: '📋', conf: '📋',
|
||||
xml: '📰', sql: '🗃️',
|
||||
md: '📝', markdown: '📝', rst: '📝', txt: '📄',
|
||||
log: '📜', csv: '📊', tsv: '📊',
|
||||
diff: '🔀', patch: '🔀',
|
||||
};
|
||||
if (filename.toLowerCase() === 'dockerfile') return '🐳';
|
||||
if (filename.toLowerCase() === 'makefile') return '🔨';
|
||||
return iconMap[ext] || '📄';
|
||||
return map[ext] || '📄';
|
||||
}
|
||||
|
||||
export function initChatArea() {
|
||||
|
||||
@@ -32,6 +32,36 @@ const TEXT_EXTENSIONS = new Set([
|
||||
/** 最大文件大小 500KB */
|
||||
const MAX_FILE_SIZE = 500 * 1024;
|
||||
|
||||
/** 根据文件名返回图标 */
|
||||
function getFileIcon(filename) {
|
||||
const name = filename.toLowerCase();
|
||||
if (name === 'dockerfile') return '🐳';
|
||||
if (name === 'makefile' || name === 'gnumakefile') return '🔨';
|
||||
const ext = filename.split('.').pop().toLowerCase();
|
||||
const map = {
|
||||
py: '🐍', pyw: '🐍', pyi: '🐍',
|
||||
js: '💛', mjs: '💛', cjs: '💛',
|
||||
ts: '🔷', tsx: '⚛️', jsx: '⚛️',
|
||||
java: '☕', go: '🐹', rs: '🦀', rb: '💎',
|
||||
php: '🐘', swift: '🍎', kt: '🤖', scala: '🔴',
|
||||
lua: '🌙', pl: '🐪', r: '📐', m: '📐',
|
||||
cs: '🟪', fs: '🔵', vb: '🔷',
|
||||
ex: '💧', exs: '💧', erl: '📞', hs: '🟣',
|
||||
clj: '🟢', lisp: '🟢',
|
||||
cpp: '⚙️', cc: '⚙️', cxx: '⚙️', hpp: '⚙️',
|
||||
c: '⚙️', h: '⚙️',
|
||||
sh: '🐚', bash: '🐚', zsh: '🐚', fish: '🐚',
|
||||
html: '🌐', htm: '🌐', css: '🎨', svg: '🎨',
|
||||
json: '📋', yaml: '📋', yml: '📋', toml: '📋',
|
||||
ini: '📋', cfg: '📋', conf: '📋',
|
||||
xml: '📰', sql: '🗃️',
|
||||
md: '📝', markdown: '📝', rst: '📝', txt: '📄',
|
||||
log: '📜', csv: '📊', tsv: '📊',
|
||||
diff: '🔀', patch: '🔀',
|
||||
};
|
||||
return map[ext] || '📄';
|
||||
}
|
||||
|
||||
/** 判断是否为文本/代码文件 */
|
||||
function isTextFile(file) {
|
||||
// 无扩展名的特殊文件名
|
||||
@@ -182,7 +212,7 @@ function renderFilePreviews() {
|
||||
filePreviewEl.style.display = '';
|
||||
filePreviewEl.innerHTML = pendingFiles.map((f, i) => `
|
||||
<div class="file-chip">
|
||||
<span class="file-icon">📄</span>
|
||||
<span class="file-icon">${getFileIcon(f.name)}</span>
|
||||
<span class="file-name">${escapeHtml(f.name)}</span>
|
||||
<span class="file-size">${formatSize(f.size)}</span>
|
||||
<button class="remove-file" data-index="${i}" title="移除">×</button>
|
||||
|
||||
Reference in New Issue
Block a user