chore: initial commit - maqt-desktop v0.2

- Phase 1-5: UI framework, auth, weapon schemes, color filters, system optimization
- Industrial/tech design style with Chinese localization
- Points to gch3n.online/delta backend API
- Hardware monitor, filter editor, and all module pages
This commit is contained in:
Chen Gu
2026-05-09 00:31:09 +08:00
commit 5bd314deb2
80 changed files with 12217 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
import React from 'react';
import Button from '../ui/Button';
import Card from '../ui/Card';
export interface SchemeData {
id: string;
title: string | null;
weaponName: string | null;
category: string | null;
viewsCount: number;
downloadsCount: number;
likesCount: number;
favoritesCount: number;
price: number;
isOfficial: boolean;
user?: { username: string };
}
interface SchemeCardProps {
scheme: SchemeData;
isFavorited?: boolean;
onFavorite?: (id: string) => void;
onUse?: (id: string) => void;
onClick?: (id: string) => void;
className?: string;
}
export default function SchemeCard({ scheme, isFavorited, onFavorite, onUse, onClick, className = '' }: SchemeCardProps) {
return (
<Card
hoverable
onClick={() => onClick?.(scheme.id)}
className={`flex flex-col p-3 gap-2 ${className}`}
serial={scheme.isOfficial ? 'OFFICIAL' : undefined}
>
{/* 标题 */}
<div className="flex items-start justify-between gap-2">
<div className="min-w-0 flex-1">
<h3 className="text-[10px] font-bold tracking-[0.08em] uppercase text-[#e0e0e0] truncate">
{scheme.title || '未命名方案'}
</h3>
<p className="text-[8px] font-mono text-[#555] mt-0.5">{scheme.weaponName || scheme.category || '通用'}</p>
</div>
{scheme.isOfficial && (
<span className="text-[7px] font-semibold tracking-[0.1em] uppercase text-[#ff4500] border border-[#ff4500]/30 px-1 py-0.5">
</span>
)}
</div>
{/* 作者 */}
{scheme.user?.username && (
<p className="text-[8px] font-mono text-[#555]">: {scheme.user.username}</p>
)}
{/* 价格 */}
{scheme.price > 0 && (
<p className="text-[8px] font-mono text-[#555]">💰 {scheme.price}</p>
)}
{/* 操作按钮 */}
<div className="flex items-center gap-2 mt-auto pt-1 border-t border-[#333]">
<button
onClick={e => { e.stopPropagation(); onFavorite?.(scheme.id); }}
className={`text-[8px] font-mono px-1.5 py-1 border transition-colors duration-75
${isFavorited
? 'border-[#ff4500] text-[#ff4500]'
: 'border-[#333] text-[#555] hover:border-[#555]'}`}
>
{isFavorited ? '★' : '☆'} {scheme.favoritesCount}
</button>
<button
onClick={e => { e.stopPropagation(); onUse?.(scheme.id); }}
className="ml-auto text-[8px] font-semibold tracking-[0.1em] uppercase text-[#888] border border-[#333] px-1.5 py-1
hover:border-[#ff4500] hover:text-[#ff4500] transition-colors duration-75"
>
使
</button>
</div>
{/* 统计数据 */}
<div className="flex items-center gap-3 text-[7px] font-mono text-[#555]">
<span>👁 {scheme.viewsCount}</span>
<span> {scheme.downloadsCount}</span>
<span>👍 {scheme.likesCount}</span>
</div>
</Card>
);
}