import { useMutation, useQueryClient, useSuspenseQuery, } from '@tanstack/react-query' import { createFileRoute } from '@tanstack/react-router' import { useState } from 'react' import { orpc } from '@/client/query-client' export const Route = createFileRoute('/license')({ component: License, }) function License() { const [licenseInput, setLicenseInput] = useState('') const [copySuccess, setCopySuccess] = useState(false) const queryClient = useQueryClient() // 获取激活状态 const { data } = useSuspenseQuery(orpc.license.getActivation.queryOptions()) // 激活 mutation const activateMutation = useMutation({ ...orpc.license.activate.mutationOptions(), onSuccess: () => { // 刷新数据 queryClient.invalidateQueries({ queryKey: orpc.license.getActivation.key(), }) // 清空输入 setLicenseInput('') }, }) const handleActivate = () => { if (!licenseInput.trim()) return activateMutation.mutate({ license: licenseInput.trim() }) } const handleCopyFingerprint = async () => { try { await navigator.clipboard.writeText(data.fingerprint) setCopySuccess(true) setTimeout(() => setCopySuccess(false), 2000) } catch (err) { console.error('Failed to copy fingerprint:', err) } } const isActivated = !!data.license return (
{/* 页面标题 */}

License 激活管理

管理您的设备授权与激活状态

{/* 设备信息卡片 */}

设备信息

设备指纹 (Device Fingerprint)

{data.fingerprint}
{/* License 激活卡片 */}

License 激活

setLicenseInput(e.target.value)} disabled={isActivated || activateMutation.isPending} placeholder={ isActivated ? '已激活,无需输入' : '请输入您的 License Key' } className="w-full px-4 py-2.5 bg-white border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500/20 focus:border-purple-500 outline-none transition-all disabled:bg-gray-100 disabled:text-gray-500 placeholder:text-gray-400" />
{activateMutation.isError && (
激活失败: 请检查 License 是否正确或稍后重试
)}
{/* 激活状态卡片 */}

激活状态

{isActivated ? (
License 已激活

当前 License:{' '} {data.license}

{data.licenseActivatedAt && (

激活时间:{' '} {new Date(data.licenseActivatedAt).toLocaleString( 'zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', }, )}

)}
) : (

未激活

您的设备尚未激活。请在上方输入 License Key 进行激活以解锁全部功能。

)}
) }