"use client" import type React from "react" import { useState, useEffect } from "react" import Link from "next/link" import { useRouter } from "next/navigation" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" import { Checkbox } from "@/components/ui/checkbox" import { Sparkles, ArrowLeft, Send, BarChart3, Eye, EyeOff, Shield, Info, Mail, ImageIcon } from "lucide-react" import { useToast } from "@/hooks/use-toast" import { soundManager } from "@/lib/sound-effects" import HeaderMusicControl from "@/components/header-music-control" import { moderateWishForm, type ModerationResult } from "@/lib/content-moderation" import ContentModerationFeedback from "@/components/content-moderation-feedback" import ImageUpload from "@/components/image-upload" import type { ImageFile } from "@/lib/image-utils" import { WishService } from "@/lib/supabase-service" export default function SubmitPage() { const [formData, setFormData] = useState({ title: "", currentPain: "", expectedSolution: "", expectedEffect: "", isPublic: true, email: "", }) const [images, setImages] = useState([]) const [isSubmitting, setIsSubmitting] = useState(false) const { toast } = useToast() const router = useRouter() const [moderationResult, setModerationResult] = useState(null) const [showModerationFeedback, setShowModerationFeedback] = useState(false) // 初始化音效系統 useEffect(() => { const initSound = async () => { // 用戶首次點擊時啟動音頻上下文 const handleFirstInteraction = async () => { await soundManager.play("hover") // 測試音效 document.removeEventListener("click", handleFirstInteraction) } document.addEventListener("click", handleFirstInteraction) } initSound() }, []) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() // 先進行內容審核 const moderation = moderateWishForm(formData) setModerationResult(moderation) if (!moderation.isAppropriate) { setShowModerationFeedback(true) await soundManager.play("click") // 播放提示音效 toast({ title: "內容需要修改", description: "請根據建議修改內容後再次提交", variant: "destructive", }) return } setIsSubmitting(true) setShowModerationFeedback(false) // 播放提交音效 await soundManager.play("submit") try { // 創建困擾案例到 Supabase 數據庫 await WishService.createWish({ title: formData.title, currentPain: formData.currentPain, expectedSolution: formData.expectedSolution, expectedEffect: formData.expectedEffect, isPublic: formData.isPublic, email: formData.email, images: images, // 直接傳遞 ImageFile 數組 }) // 播放成功音效 await soundManager.play("success") toast({ title: "你的困擾已成功提交", description: formData.isPublic ? "正在為你準備專業的回饋,其他人也能看到你的分享..." : "正在為你準備專業的回饋,你的分享將保持私密...", }) } catch (error) { console.error("提交困擾失敗:", error) // 播放錯誤音效 await soundManager.play("click") toast({ title: "提交失敗", description: "請稍後再試或檢查網路連接", variant: "destructive", }) setIsSubmitting(false) return } setFormData({ title: "", currentPain: "", expectedSolution: "", expectedEffect: "", isPublic: true, email: "", }) setImages([]) setIsSubmitting(false) setModerationResult(null) // 跳轉到感謝頁面 setTimeout(() => { router.push("/thank-you") }, 1000) } const handleChange = (field: string, value: string | boolean) => { setFormData((prev) => ({ ...prev, [field]: value })) } const handleButtonClick = async () => { await soundManager.play("click") } return (
{/* 星空背景 - 手機優化 */}
{[...Array(25)].map((_, i) => (
))}
{/* Header - 修復跑版問題 */}
{/* Logo 區域 - 防止文字換行 */}

強茂.心願星河

{/* 導航區域 */}
{/* Main Content - 手機優化 */}
{/* 小許願瓶 - 添加呼吸動畫 */}
{/* 小星光粒子 */}
{/* 呼吸光暈 */}

分享你的工作困擾

每一個困擾都是改善的起點,我們會用專業的角度為你分析和建議

困擾分享
請詳細描述你的工作困擾,我們會認真分析並提供專業建議
handleChange("title", e.target.value)} required className="bg-slate-700/50 border-blue-600/50 text-white placeholder:text-blue-300 focus:border-cyan-400 text-sm md:text-base" />