'use client' import { useState } from 'react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Switch } from '@/components/ui/switch' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table' import type { URLReplaceRule, APIEndpoint } from '@/types/admin' interface URLRulesTabProps { rules: URLReplaceRule[] endpoints: APIEndpoint[] onCreateRule?: (data: Partial) => void onUpdateRule?: (id: number, data: Partial) => void onDeleteRule?: (id: number) => void } export default function URLRulesTab({ rules, endpoints, onCreateRule, onUpdateRule, onDeleteRule }: URLRulesTabProps) { const [showCreateForm, setShowCreateForm] = useState(false) const [editingRule, setEditingRule] = useState(null) const [formData, setFormData] = useState({ name: '', from_url: '', to_url: '', endpoint_id: undefined as number | undefined, is_active: true }) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() if (editingRule) { // 更新规则 if (onUpdateRule) { onUpdateRule(editingRule.id, formData) setEditingRule(null) } } else { // 创建规则 if (onCreateRule) { onCreateRule(formData) } } setFormData({ name: '', from_url: '', to_url: '', endpoint_id: undefined, is_active: true }) setShowCreateForm(false) } const handleEdit = (rule: URLReplaceRule) => { setEditingRule(rule) setFormData({ name: rule.name, from_url: rule.from_url, to_url: rule.to_url, endpoint_id: rule.endpoint_id, is_active: rule.is_active }) setShowCreateForm(true) } const handleCancelEdit = () => { setEditingRule(null) setFormData({ name: '', from_url: '', to_url: '', endpoint_id: undefined, is_active: true }) setShowCreateForm(false) } const handleDelete = (ruleId: number) => { if (confirm('确定要删除这个URL替换规则吗?')) { if (onDeleteRule) { onDeleteRule(ruleId) } } } const toggleRuleStatus = (rule: URLReplaceRule) => { if (onUpdateRule) { onUpdateRule(rule.id, { is_active: !rule.is_active }) } } const getEndpointName = (endpointId?: number) => { if (!endpointId) return '全局规则' const endpoint = endpoints.find(ep => ep.id === endpointId) return endpoint ? endpoint.name : `端点 ${endpointId}` } return (

URL替换规则

{showCreateForm && (

{editingRule ? '编辑规则' : '创建新规则'}

setFormData({ ...formData, name: e.target.value })} placeholder="例如: 替换图床域名" required />

选择特定端点或设为全局规则应用于所有端点

setFormData({ ...formData, from_url: e.target.value })} placeholder="例如: a.com" required />

支持域名或URL片段匹配

setFormData({ ...formData, to_url: e.target.value })} placeholder="例如: b.com" required />

替换后的域名或URL片段

setFormData({ ...formData, is_active: checked })} />
)}
规则名称 应用端点 源URL 目标URL 状态 创建时间 操作 {rules.length > 0 ? ( rules.map((rule) => ( {rule.name} {getEndpointName(rule.endpoint_id)} {rule.from_url} {rule.to_url} {rule.is_active ? '启用' : '禁用'} {new Date(rule.created_at).toLocaleDateString()}
)) ) : ( 暂无URL替换规则,点击"创建规则"开始配置 )}
) }