nav-next/components/tools/hash-random/RandomSeed.tsx
2024-12-27 19:27:49 +08:00

69 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { ChangeEvent, useState } from 'react'
interface RandomSeedProps {
salt: string
setSalt: (salt: string) => void
count: number
setCount: (count: number) => void
}
export default function RandomSeed({ salt, setSalt, count, setCount }: RandomSeedProps) {
const [errors, setErrors] = useState({ salt: '', count: '' })
const validateSalt = (value: string) => {
if (value.trim() === '') {
setErrors(prev => ({ ...prev, salt: '请输入随机种子' }))
} else {
setErrors(prev => ({ ...prev, salt: '' }))
}
setSalt(value)
}
const validateCount = (value: number) => {
if (value < 1) {
setErrors(prev => ({ ...prev, count: '抽取数量必须大于0' }))
} else {
setErrors(prev => ({ ...prev, count: '' }))
}
setCount(value)
}
return (
<div className="bg-white dark:bg-gray-800 rounded-lg shadow-md p-6 transition-colors duration-200">
<h2 className="text-2xl font-bold mb-4 text-indigo-800 dark:text-indigo-200"></h2>
<p className="mb-4 text-gray-600 dark:text-gray-300">
</p>
<div className="space-y-4">
<div>
<label htmlFor="salt" className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
</label>
<input
id="salt"
type="text"
value={salt}
onChange={(e: ChangeEvent<HTMLInputElement>) => validateSalt(e.target.value)}
className="w-full border-gray-300 rounded-md shadow-sm focus:ring-indigo-500 focus:border-indigo-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white"
/>
{errors.salt && <p className="mt-1 text-sm text-red-600 dark:text-red-400">{errors.salt}</p>}
</div>
<div>
<label htmlFor="count" className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">
</label>
<input
id="count"
type="number"
value={count}
onChange={(e: ChangeEvent<HTMLInputElement>) => validateCount(Number(e.target.value))}
className="w-24 border-gray-300 rounded-md shadow-sm focus:ring-indigo-500 focus:border-indigo-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white"
/>
{errors.count && <p className="mt-1 text-sm text-red-600 dark:text-red-400">{errors.count}</p>}
</div>
</div>
</div>
)
}