This commit is contained in:
@@ -116,6 +116,11 @@ function UploadPanel() {
|
|||||||
const [error, setError] = useState('')
|
const [error, setError] = useState('')
|
||||||
const [result, setResult] = useState(null)
|
const [result, setResult] = useState(null)
|
||||||
const allowed = user.canUpload || user.canAdvancedUpload
|
const allowed = user.canUpload || user.canAdvancedUpload
|
||||||
|
const generatePickupCode = () => {
|
||||||
|
const value = new Uint32Array(1)
|
||||||
|
crypto.getRandomValues(value)
|
||||||
|
setPickupCode(String(value[0] % 1000000).padStart(6, '0'))
|
||||||
|
}
|
||||||
const submit = async (event) => {
|
const submit = async (event) => {
|
||||||
event.preventDefault(); if (!file) return
|
event.preventDefault(); if (!file) return
|
||||||
setBusy(true); setError('')
|
setBusy(true); setError('')
|
||||||
@@ -137,7 +142,7 @@ function UploadPanel() {
|
|||||||
<div><label className="label">保留时间</label><select className="field" value={retention} onChange={(e) => setRetention(e.target.value)}><option value="1h">1 小时</option><option value="8h">8 小时</option><option value="1d">1 天</option><option value="3d">3 天</option>{user.canAdvancedUpload && <option value="forever">永久</option>}</select></div>
|
<div><label className="label">保留时间</label><select className="field" value={retention} onChange={(e) => setRetention(e.target.value)}><option value="1h">1 小时</option><option value="8h">8 小时</option><option value="1d">1 天</option><option value="3d">3 天</option>{user.canAdvancedUpload && <option value="forever">永久</option>}</select></div>
|
||||||
<div><label className="label">可访问次数</label><select className="field" value={downloads} onChange={(e) => setDownloads(e.target.value)}><option value="1">1 次</option><option value="3">3 次</option><option value="5">5 次</option><option value="10">10 次</option><option value="custom">自定义</option>{user.canAdvancedUpload && <option value="unlimited">无限</option>}</select></div>
|
<div><label className="label">可访问次数</label><select className="field" value={downloads} onChange={(e) => setDownloads(e.target.value)}><option value="1">1 次</option><option value="3">3 次</option><option value="5">5 次</option><option value="10">10 次</option><option value="custom">自定义</option>{user.canAdvancedUpload && <option value="unlimited">无限</option>}</select></div>
|
||||||
{downloads === 'custom' && <div><label className="label">自定义次数(1–99)</label><input className="field" type="number" min="1" max="99" required value={customDownloads} onChange={(e) => setCustomDownloads(e.target.value)} /></div>}
|
{downloads === 'custom' && <div><label className="label">自定义次数(1–99)</label><input className="field" type="number" min="1" max="99" required value={customDownloads} onChange={(e) => setCustomDownloads(e.target.value)} /></div>}
|
||||||
<div className={downloads === 'custom' ? '' : 'sm:col-span-2'}><label className="label">6 位数字取件码(可选)</label><input className="field" inputMode="numeric" pattern="[0-9]{6}" maxLength={6} placeholder="留空则无需取件码" value={pickupCode} onChange={(e) => setPickupCode(e.target.value.replace(/\D/g, ''))} /></div>
|
<div className={downloads === 'custom' ? '' : 'sm:col-span-2'}><label className="label">6 位数字取件码(可选)</label><div className="flex gap-2"><input className="field" inputMode="numeric" pattern="[0-9]{6}" maxLength={6} placeholder="留空则无需取件码" value={pickupCode} onChange={(e) => setPickupCode(e.target.value.replace(/\D/g, ''))} /><button className="btn-secondary shrink-0" type="button" onClick={generatePickupCode}>随机生成</button></div><p className={`mt-2 text-xs ${pickupCode ? 'text-leaf' : 'text-amber-700'}`}>{pickupCode ? '已启用取件码保护' : '强烈建议生成取件码;仅在确认文件无需保护时留空。'}</p></div>
|
||||||
</div>
|
</div>
|
||||||
{error && <p className="mt-4 text-sm text-red-600">{error}</p>}
|
{error && <p className="mt-4 text-sm text-red-600">{error}</p>}
|
||||||
<button className="btn-primary mt-5 w-full" disabled={!file || busy}>{busy ? <><LoaderCircle className="animate-spin" size={18} />正在上传</> : <><UploadCloud size={18} />上传并生成链接</>}</button>
|
<button className="btn-primary mt-5 w-full" disabled={!file || busy}>{busy ? <><LoaderCircle className="animate-spin" size={18} />正在上传</> : <><UploadCloud size={18} />上传并生成链接</>}</button>
|
||||||
|
|||||||
Reference in New Issue
Block a user