import { useSuspenseQuery } from '@tanstack/react-query' import { createFileRoute } from '@tanstack/react-router' import { useEffect, useState } from 'react' import { orpc } from '@/client/query-client' export const Route = createFileRoute('/fingerprint')({ component: FingerprintPage, loader: async ({ context }) => { await context.queryClient.ensureQueryData( orpc.fingerprint.get.queryOptions(), ) }, }) function FingerprintPage() { const query = useSuspenseQuery(orpc.fingerprint.get.queryOptions()) const [copied, setCopied] = useState(false) const data = query.data useEffect(() => { if (copied) { const timer = setTimeout(() => setCopied(false), 2000) return () => clearTimeout(timer) } }, [copied]) const handleCopy = async () => { await navigator.clipboard.writeText(data.fingerprint) setCopied(true) } const qualityConfig = { strong: { label: '强', color: 'text-green-600', bg: 'bg-green-50', border: 'border-green-200', icon: '✓', description: '推荐用于生产授权', }, medium: { label: '中', color: 'text-yellow-600', bg: 'bg-yellow-50', border: 'border-yellow-200', icon: '!', description: '可用但不理想', }, weak: { label: '弱', color: 'text-red-600', bg: 'bg-red-50', border: 'border-red-200', icon: '×', description: '仅适合开发/测试', }, } const config = qualityConfig[data.quality] return (
用于软件授权和机器码识别
{config.description}
使用 HMAC-SHA256 加密,无法反推原始硬件信息
基于系统 UUID、序列号等不易变更的标识符
自动缓存,减少系统调用开销