refactor: 将 WebUI 源码纳入仓库,移除打包产物

- 新增 webui/ 前端源码目录(React+Vite+TypeScript+Tailwind)
- 删除 api/webui/ 中旧的打包静态资源
- 更新 .gitignore 忽略 api/webui/ 构建输出和 webui/node_modules
- 更新 README 增加前端构建说明
This commit is contained in:
程序员阿江(Relakkes)
2026-07-01 23:05:03 +08:00
parent 2ac0716c41
commit 65ddaa8828
68 changed files with 9064 additions and 356 deletions
@@ -0,0 +1,36 @@
import { Globe } from 'lucide-react'
import { useTranslation } from 'react-i18next'
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '@/components/ui/select'
const languages = [
{ code: 'zh-CN', label: '中文' },
{ code: 'en-US', label: 'EN' },
]
export function LanguageSwitch() {
const { i18n } = useTranslation()
const currentLang = languages.find(l => l.code === i18n.language) || languages[0]
return (
<Select value={i18n.language} onValueChange={(lang) => i18n.changeLanguage(lang)}>
<SelectTrigger className="w-20 h-7 text-xs font-mono border-cyber-border-subtle bg-cyber-bg-tertiary/50 hover:border-cyber-neon-cyan/50 transition-colors">
<Globe className="w-3 h-3 mr-1 text-cyber-text-secondary" />
<SelectValue>{currentLang.label}</SelectValue>
</SelectTrigger>
<SelectContent>
{languages.map((lang) => (
<SelectItem key={lang.code} value={lang.code} className="text-xs font-mono">
{lang.label}
</SelectItem>
))}
</SelectContent>
</Select>
)
}