import React, { useState } from 'react'; import { Calendar, MapPin, Users, Info, CheckCircle, Copy, Plane, Coffee, Hotel, Phone, Mail, FileText, Upload, Heart, UserPlus, Shield, AlertCircle, ChevronRight, Printer } from 'lucide-react'; const XiangqingOfficialForm = () => { const [activeTab, setActiveTab] = useState('itinerary'); // 'itinerary' or 'form' const [formData, setFormData] = useState({ // 基本資料 chineseName: '', englishName: '', gender: 'M', birthDate: '', lineId: '', phone: '', email: '', // 護照 passportNumber: '', passportExpiry: '', hasPassportUpload: false, // 模擬上傳狀態 // 需求 roomType: 'twin', roommateName: '', // 指定同房 dietary: 'none', dietaryNote: '', // 安全 emergencyContact: '', emergencyPhone: '', emergencyRelation: '', healthIssues: '', agreeTerms: false }); const [showModal, setShowModal] = useState(false); const [submittedData, setSubmittedData] = useState(''); // 翔慶旅行社官方資訊 (Updated from oeoeo.com.tw) const agencyInfo = { fullName: "翔慶旅行社股份有限公司", shortName: "翔慶旅行社", license: "交觀甲字第7022號", qualityAssurance: "品保北1661", phone: "(02)2397-1277", phone2: "(02)6605-8155", fax: "(02)2393-3699", address: "10058台北市中正區新生南路一段6號10樓之2", email: "service@oeoeo.com.tw", representative: "古明正" }; const tripDetails = { title: "宮城偶來(含鳴子溫泉步道)+磐梯朝日國家公園 6日", subTitle: "翔慶旅行社|客製化團體旅遊專家", date: "2025年4月下旬 (暫定 4/18~4/25)", airline: "長榮航空 (BR) 或 星宇航空 (JX)", highlights: [ "鳴子溫泉路線:峽谷地形、稜線展望、絕美新綠", "奧松島路線:海岸、港灣、田園漁村風光", "五色沼自然探勝路:夢幻翡翠色湖水", "仙台市區購物與牛舌美食" ], pricing: [ { range: "15-20 人", price: "NT$ 73,800" }, { range: "21-25 人", price: "NT$ 69,800" }, { range: "26-30 人", price: "NT$ 67,800" } ], supplements: { singleRoom: "NT$ 15,000", childNoBed: "扣 NT$ 4,000", tips: "NT$ 300 / 人 / 天" } }; const itinerary = [ { day: 1, title: "台北 / 仙台 - 市區散策", desc: "抵達仙台後,若時間許可前往榴岡公園賞晚櫻或仙台城跡。", stay: "仙台國際飯店 或同級", meals: "早:溫暖的家 / 午:機上 / 晚:燒肉吃到飽" }, { day: 2, title: "鳴子溫泉 → 宮城偶來", desc: "重點步道!峽谷地形與山村景色,4月下旬新綠非常美。距離約10km。", stay: "鳴子溫泉", meals: "早:飯店 / 午:¥3000 / 晚:飯店會席料理" }, { day: 3, title: "奧松島路線 → 瑞巖寺", desc: "海岸線經典路線,適合健行後的輕鬆步道。距離約9km。", stay: "松島 或 鹽竈", meals: "早:飯店 / 午:¥3000 / 晚:飯店會席料理" }, { day: 4, title: "五色沼 → 裏磐梯溫泉", desc: "五色沼自然探勝路,湖水呈現強烈青藍/翡翠色。距離約4km。", stay: "裏磐梯", meals: "早:飯店 / 午:¥3000 / 晚:飯店會席料理" }, { day: 5, title: "中瀬沼展望 → 仙台購物", desc: "眺望磐梯山與湖群。下午返回仙台市區自由購物。", stay: "仙台國際飯店 或同級", meals: "早:飯店 / 午:東北風味餐 / 晚:自理 (發代金¥2000)" }, { day: 6, title: "仙台 / 台北", desc: "免稅店與一番町商店街最後採買,搭機返台。", stay: "溫暖的家", meals: "早:飯店 / 午:自理 / 晚:機上" } ]; const handleInputChange = (e) => { const { name, value, type, checked } = e.target; setFormData(prev => ({ ...prev, [name]: type === 'checkbox' ? checked : value })); }; const handleFileUpload = () => { setFormData(prev => ({ ...prev, hasPassportUpload: true })); alert("已模擬圖片上傳成功!"); }; const isPassportValid = () => { if (!formData.passportExpiry) return true; const expiry = new Date(formData.passportExpiry); const today = new Date(); const sixMonthsLater = new Date(today.setMonth(today.getMonth() + 6)); return expiry > sixMonthsLater; }; const handleSubmit = (e) => { e.preventDefault(); if (!formData.agreeTerms) { alert("請勾選同意報名條款"); return; } const summary = ` 【${agencyInfo.shortName} 報名表】 行程:${tripDetails.title} -------------------------------- [基本資料] 中文姓名: ${formData.chineseName} 英文姓名: ${formData.englishName} 性別: ${formData.gender === 'M' ? '男' : '女'} 生日: ${formData.birthDate} Line ID: ${formData.lineId} 電話: ${formData.phone} Email: ${formData.email} [證件] 護照號碼: ${formData.passportNumber} 護照效期: ${formData.passportExpiry} ${!isPassportValid() ? '(注意:效期不足6個月)' : ''} *護照照片: ${formData.hasPassportUpload ? '已附檔' : '未上傳'} [需求] 房型: ${formData.roomType === 'single' ? '單人房 (補差價)' : formData.roomType === 'triple' ? '三人房' : '雙人房'} 同房親友: ${formData.roommateName || '無'} 飲食: ${formData.dietary} ${formData.dietaryNote ? `(${formData.dietaryNote})` : ''} [安全資訊] 緊急聯絡人: ${formData.emergencyContact} (${formData.emergencyRelation}) 緊急聯絡電話: ${formData.emergencyPhone} 健康狀況: ${formData.healthIssues || '良好'} -------------------------------- `.trim(); setSubmittedData(summary); setShowModal(true); }; const copyToClipboard = () => { const textArea = document.createElement("textarea"); textArea.value = submittedData; document.body.appendChild(textArea); textArea.select(); try { document.execCommand('copy'); alert(`資料已複製!請傳送給${agencyInfo.shortName}業務專員。`); } catch (err) { console.error('Unable to copy', err); } document.body.removeChild(textArea); }; const handlePrint = () => { window.print(); }; return (
{/* Brand Header */} {/* Hero */}
{/* Background Pattern */}
{tripDetails.subTitle}

{tripDetails.title}

{tripDetails.date} {tripDetails.airline}
{/* Main Content Area with Tabs */}
{/* Tabs - Hidden in Print */}
{/* TAB 1: Itinerary */} {(activeTab === 'itinerary' || typeof window !== 'undefined' && window.matchMedia && window.matchMedia('print').matches) && (
{/* Highlights */}

行程亮點

{tripDetails.highlights.map((h, i) => (
{h}
))}
{/* Pricing */}

團費參考

每車人數
團費 (NET)
{tripDetails.pricing.map((p, i) => (
{p.range}
{p.price}
))}

費用備註:

  • 單人房差:{tripDetails.supplements.singleRoom}
  • 司導小費:{tripDetails.supplements.tips}
  • 小孩不佔床:{tripDetails.supplements.childNoBed}
{/* Day by Day */}

每日行程概要

{itinerary.map((day, idx) => (
{/* Timeline Line */} {idx !== itinerary.length - 1 && (
)}
{day.day}

{day.title}

{day.desc}

{day.stay} {day.meals}
))}
)} {/* TAB 2: Form */} {activeTab === 'form' && (
{/* Section 1: Basic Info */}

個人基本資料

{/* Section 2: Passport */}

護照與證件

{!isPassportValid() &&

效期可能不足

}
{formData.hasPassportUpload ? ( <> 已模擬上傳成功 ) : ( <> 點擊此處上傳圖片 (模擬) 支援 JPG, PNG, PDF 檔案 )}
{/* Section 3: Preferences */}

住宿與飲食需求

{/* Section 4: Emergency & Health */}

安全與緊急聯絡人

{/* Terms */}
)}
{/* Footer */} {/* Modal */} {showModal && (

報名資料彙整成功

請複製下方內容,透過 Line 或 Email 傳送給您的業務窗口。

{submittedData}
)} {/* Global Styles */}
); }; export default XiangqingOfficialForm;