'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { useAuth } from '@/lib/auth'; import ProtectedRoute from '@/app/components/ProtectedRoute'; import { limqRequest } from '@/lib/api'; import { TeamSelector } from '@/app/components/ui/TeamSelector'; import { ProjectSelector } from '@/app/components/ui/ProjectSelector'; interface ShortUrlData { originalUrl: string; customSlug?: string; title: string; description?: string; tags?: string[]; teamId: string; projectId: string; domain: string; } export default function CreateShortUrlPage() { return ( ); } function CreateShortUrlForm() { const router = useRouter(); const { user } = useAuth(); const [formData, setFormData] = useState({ originalUrl: '', customSlug: '', title: '', description: '', tags: [], teamId: '', projectId: '', domain: 'googleads.link', }); const [tagInput, setTagInput] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); // 使用 useEffect 在加载时添加用户信息到表单数据中 useEffect(() => { if (user) { console.log('当前用户:', user.email); // 可以在这里添加用户相关数据到表单中 } }, [user]); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleTagKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && tagInput.trim()) { e.preventDefault(); addTag(); } }; const addTag = () => { if (tagInput.trim() && !formData.tags?.includes(tagInput.trim())) { setFormData(prev => ({ ...prev, tags: [...(prev.tags || []), tagInput.trim()] })); setTagInput(''); } }; const removeTag = (tagToRemove: string) => { setFormData(prev => ({ ...prev, tags: prev.tags?.filter(tag => tag !== tagToRemove) })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsSubmitting(true); setError(null); try { // 验证必填字段 if (!formData.originalUrl) { throw new Error('原始 URL 是必填项'); } if (!formData.title) { throw new Error('标题是必填项'); } if (!formData.teamId) { throw new Error('团队是必填项'); } if (!formData.projectId) { throw new Error('项目是必填项'); } if (!formData.domain) { throw new Error('域名是必填项'); } // 按照API要求构建请求数据 const requestData = { type: "shorturl", attributes: { // 可以添加任何额外属性,但attributes不能为空 icon: "" }, shortUrl: { url: formData.originalUrl, slug: formData.customSlug || undefined, title: formData.title, name: formData.title, description: formData.description || "", domain: formData.domain }, teamId: formData.teamId, projectId: formData.projectId, tagIds: formData.tags && formData.tags.length > 0 ? formData.tags : undefined }; // 调用 API 创建 shorturl 资源 const response = await limqRequest('resource/shorturl', 'POST', requestData as unknown as Record); console.log('创建成功:', response); setSuccess(true); // 2秒后跳转到链接列表页面 setTimeout(() => { router.push('/links'); }, 2000); } catch (err) { console.error('创建短链接失败:', err); setError(err instanceof Error ? err.message : '创建短链接失败,请稍后重试'); } finally { setIsSubmitting(false); } }; return (

Create Short URL

Create a new short URL resource for tracking and analytics

{error && (

{error}

)} {success && (

短链接创建成功!正在跳转...

)}
{/* 标题 */}
{/* 原始 URL */}
{/* 自定义短链接 */}
{formData.domain}/

留空将生成随机短链接

{/* 域名 */}
{/* 团队选择 */}
{ setFormData(prev => ({ ...prev, teamId: teamId as string, // 当团队变更时清除已选项目 projectId: '' })); }} />
{/* 项目选择 */}
{ setFormData(prev => ({ ...prev, projectId: projectId as string })); }} />
{/* 描述 */}