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 [showDeactivateConfirm, setShowDeactivateConfirm] = 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('') }, }) // 反激活 mutation const deactivateMutation = useMutation({ ...orpc.license.deactivate.mutationOptions(), onSuccess: () => { queryClient.invalidateQueries({ queryKey: orpc.license.getActivation.key(), }) setShowDeactivateConfirm(false) }, }) const handleActivate = () => { if (!licenseInput.trim()) return activateMutation.mutate({ license: licenseInput.trim() }) } const handleDeactivate = () => { deactivateMutation.mutate() } 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 (
管理您的设备授权与激活状态
设备指纹 (Device Fingerprint)
{data.fingerprint}
当前 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。
反激活失败,请重试
)}未激活
您的设备尚未激活。请在上方输入 License Key 进行激活以解锁全部功能。