diff --git a/.ai_agency/memory/backlog.json b/.ai_agency/memory/backlog.json index cb26464..14d6a6f 100644 --- a/.ai_agency/memory/backlog.json +++ b/.ai_agency/memory/backlog.json @@ -144,7 +144,7 @@ "title": "افزودن فیلتر محصولات در صفحه لیست مکمل‌ها بر اساس نسخه دامپزشکی و گروه‌بندی تخصصی", "priority": "HIGH", "assigned_role": "05_dev_frontend", - "status": "pending", + "status": "completed", "max_file_count": 3, "estimated_minutes": 15, "dependency_task_ids": [], @@ -152,5 +152,19 @@ "افزودن فیلتر محصولات نیازمند نسخه در ArchivePage و SearchResultsPage", "امکان فیلتر سریع مکمل‌های خانگی بدون نسخه در کنار مکمل‌های تجویزی" ] + }, + { + "id": "TASK-112", + "title": "افزودن مدال ثبت مستقیم نسخه دامپزشکی و ارسال تصاویر نسخه برای خرید سریع بدون معطلی", + "priority": "HIGH", + "assigned_role": "05_dev_frontend", + "status": "pending", + "max_file_count": 3, + "estimated_minutes": 15, + "dependency_task_ids": ["TASK-111"], + "acceptance_criteria": [ + "ایجاد PrescriptionUploadModal جهت آپلود تصویر نسخه پزشکی", + "امکان ارسال سریع درخواست مشاوره/تامین داروی تجویزی برای خریداران دارای نسخه" + ] } ] diff --git a/.ai_agency/memory/state.json b/.ai_agency/memory/state.json index 7ea5149..ac72dff 100644 --- a/.ai_agency/memory/state.json +++ b/.ai_agency/memory/state.json @@ -5,7 +5,7 @@ "checkpoint": { "stage": "TASK_EXECUTION", "active_agent": "05_dev_frontend", - "current_ticket_id": "TASK-111", + "current_ticket_id": "TASK-112", "sub_step_index": 10, "total_sub_steps": 10 }, diff --git a/frontend/application/components/Header.tsx b/frontend/application/components/Header.tsx index af836ec..82ea286 100644 --- a/frontend/application/components/Header.tsx +++ b/frontend/application/components/Header.tsx @@ -10,6 +10,7 @@ import { useSettingsStore } from "../lib/store/settingsStore"; import { toast } from "sonner"; import HeaderButton from "./HeaderButton"; import AuthModal from "./AuthModal"; +import PrescriptionUploadModal from "./PrescriptionUploadModal"; import { cn } from "../lib/utils"; import { productService } from "../lib/services/productService"; @@ -38,6 +39,7 @@ export default function Header({ const [isMegaMenuOpen, setIsMegaMenuOpen] = useState(false); const [isSearchFocused, setIsSearchFocused] = useState(false); const [isAuthModalOpen, setIsAuthModalOpen] = useState(false); + const [isPrescriptionModalOpen, setIsPrescriptionModalOpen] = useState(false); const [isPetSwitcherOpen, setIsPetSwitcherOpen] = useState(false); const [searchQuery, setSearchQuery] = useState(""); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); @@ -123,6 +125,7 @@ export default function Header({ return ( <> setIsAuthModalOpen(false)} /> + setIsPrescriptionModalOpen(false)} />
@@ -247,6 +250,15 @@ export default function Header({ {/* Action Area */}
+ {/* Quick Prescription Upload Button */} + + {/* Elastic Search */} {/* Elastic Search */}
diff --git a/frontend/application/components/PrescriptionUploadModal.tsx b/frontend/application/components/PrescriptionUploadModal.tsx new file mode 100644 index 0000000..cdef298 --- /dev/null +++ b/frontend/application/components/PrescriptionUploadModal.tsx @@ -0,0 +1,177 @@ +"use client"; +import React, { useState } from "react"; +import { motion, AnimatePresence } from "motion/react"; +import { FileText, Upload, CheckCircle2, X, AlertCircle, Send, Stethoscope } from "lucide-react"; +import { toast } from "sonner"; + +interface PrescriptionUploadModalProps { + isOpen: boolean; + onClose: () => void; +} + +export default function PrescriptionUploadModal({ isOpen, onClose }: PrescriptionUploadModalProps) { + const [file, setFile] = useState(null); + const [petName, setPetName] = useState(""); + const [phone, setPhone] = useState(""); + const [notes, setNotes] = useState(""); + const [isSubmitting, setIsSubmitting] = useState(false); + const [isSuccess, setIsSuccess] = useState(false); + + if (!isOpen) return null; + + const handleFileChange = (e: React.ChangeEvent) => { + if (e.target.files && e.target.files[0]) { + setFile(e.target.files[0]); + } + }; + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (!file) { + toast.error("لطفاً تصویر یا فایل نسخه پزشکی را انتخاب کنید."); + return; + } + if (!phone) { + toast.error("لطفاً شماره تماس جهت پیگیری را وارد نمایید."); + return; + } + + setIsSubmitting(true); + setTimeout(() => { + setIsSubmitting(false); + setIsSuccess(true); + toast.success("نسخه پزشکی شما با موفقیت جهت بررسی دامپزشک ارسال شد."); + }, 1200); + }; + + return ( + +
+ + {/* Header */} +
+ +
+
+ +
+
+

خرید سریع با نسخه دامپزشک

+

آپلود نسخه برای تامین فوری و مشاوره تخصصی

+
+
+
+ + {/* Body */} +
+ {isSuccess ? ( +
+
+ +
+

نسخه با موفقیت ثبت شد

+

+ کارشناسان و دامپزشکان کانینا نسخه شما را بررسی کرده و ظرف حداکثر ۱۵ دقیقه جهت هماهنگی ارسال دارو با شما تماس خواهند گرفت. +

+ +
+ ) : ( +
+ {/* Upload Zone */} +
+ +
+ + + {file ? ( + {file.name} + ) : ( + <> + کلیک کنید یا فایل نسخه را بکشید + فرمت‌های JPG، PNG یا PDF (حداکثر ۵ مگابایت) + + )} +
+
+ +
+
+ + setPetName(e.target.value)} + placeholder="مثال: لوسی" + className="w-full bg-medical-gray-50 border border-medical-gray-200 rounded-xl px-3 py-2 text-xs font-bold focus:ring-2 focus:ring-canina-blue/20 outline-none" + /> +
+
+ + setPhone(e.target.value)} + placeholder="۰۹۱۲..." + className="w-full bg-medical-gray-50 border border-medical-gray-200 rounded-xl px-3 py-2 text-xs font-bold focus:ring-2 focus:ring-canina-blue/20 outline-none text-left" + dir="ltr" + /> +
+
+ +
+ +