diff --git a/backend/prisma/seed-home.ts b/backend/prisma/seed-home.ts index a6aa882..b1157d1 100644 --- a/backend/prisma/seed-home.ts +++ b/backend/prisma/seed-home.ts @@ -1,4 +1,4 @@ -import { PrismaClient } from '@prisma/client'; +import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); @@ -10,7 +10,7 @@ async function main() { { title: 'محصولات تخصصی مراقبت از مفاصل', subtitle: 'برای سگ‌های مسن و پرتحرک، تضمین سلامت و شادابی با کلاژن فعال', - imageUrl: '/images/slider/slide1.webp', // Assuming we have these in public/images + imageUrl: '/assets/images/hero-section-image.png', buttonText: 'مشاهده محصولات مفاصل', buttonLink: '/shop/joints', order: 1, @@ -19,7 +19,7 @@ async function main() { { title: 'ویتامین‌های ضروری برای رشد توله سگ‌ها', subtitle: 'رشد کامل استخوان‌ها و تقویت سیستم ایمنی از ماه اول', - imageUrl: '/images/slider/slide2.webp', + imageUrl: '/assets/images/regenerated_image_1779109861747.png', buttonText: 'خرید ویتامین توله', buttonLink: '/shop/puppy', order: 2, @@ -38,7 +38,7 @@ async function main() { { vetName: 'دکتر علیرضا رضایی', clinicName: 'کلینیک دامپزشکی پایتخت', - imageUrl: '/images/vets/vet1.webp', + imageUrl: '/assets/images/regenerated_image_1779109861747.png', quote: 'مکمل‌های مفصلی کانینا از نظر سرعت جذب و اثربخشی در سگ‌های نژاد بزرگ بی‌نظیر هستند. ما نتایج فوق‌العاده‌ای روی دیسپلازی هیپ مشاهده کردیم.', rating: 5, order: 1, @@ -47,7 +47,7 @@ async function main() { { vetName: 'دکتر سارا شمس', clinicName: 'بیمارستان دامپزشکی تهران', - imageUrl: '/images/vets/vet2.webp', + imageUrl: '/assets/images/regenerated_image_1779109861747.png', quote: 'من همیشه برای ریزش مو و مشکلات پوستی گربه‌ها، قرص‌های مخمر و بیوتین کانینا را تجویز می‌کنم. نتایج معمولاً در کمتر از ۳ هفته قابل مشاهده است.', rating: 5, order: 2, diff --git a/backend/prisma/seed-products.ts b/backend/prisma/seed-products.ts index 260f787..653ffbf 100644 --- a/backend/prisma/seed-products.ts +++ b/backend/prisma/seed-products.ts @@ -88,7 +88,7 @@ async function main() { // Build display name with size const displayName = `${baseName} - ${sizeLabel}`; - const priceDisplay = `${sellPrice.toLocaleString()} T`; + const priceDisplay = `${sellPrice.toLocaleString()} تومان`; const product = await prisma.product.upsert({ where: { artNo }, diff --git a/backend/prisma/seed.ts b/backend/prisma/seed.ts index 15a7eba..f0b21d9 100644 --- a/backend/prisma/seed.ts +++ b/backend/prisma/seed.ts @@ -1,4 +1,4 @@ -import { PrismaClient } from '@prisma/client'; +import { PrismaClient } from '@prisma/client'; import * as fs from 'fs'; import * as path from 'path'; import * as ts from 'typescript'; @@ -84,7 +84,7 @@ async function main() { }, { id: "silver", - name: "نقره میکروسیلور (Microsilver)", + name: "نقره میکروسیلور (Microsilver BG)", description: "ذرات نقره خالص با ساختار اسفنجی که به دلیل اندازه ذرات درشت، جذب خون نمی‌شوند اما اثر آنتی‌باکتریال پایداری بر سطح غشاها دارند. بر خلاف نقره کلوئیدی معمولی، میکروسیلور رسوب سطحی طولانی‌مدت ایجاد کرده و فلور طبیعی را تخریب نمی‌کند.", benefits: [ "مبارزه با باکتری‌های مقاوم در دهان و پوست", @@ -95,7 +95,7 @@ async function main() { { id: "colostrum", name: "آغوز (Colostrum)", - description: "اولین شیر پستانداران که حاوی دوز بالایی از ایمونوگلوبولین‌ها (IgG, IgA, IgM)، لاکتوفرین و سایتوکاین‌ها برای فعال‌سازی فوری سیستم ایمنی است. سد دفاعی روده را تقویت کرده و از نفوذ پاتوژن‌ها جلوگیری می‌کند.", + description: "اولین شیر پستانداران پس از زایمان که حاوی دوز بالایی از ایمونوگلوبولین‌ها (IgG, IgA, IgM)، لاکتوفرین و سایتوکاین‌ها برای فعال‌سازی فوری سیستم ایمنی است. سد دفاعی روده را تقویت کرده و از نفوذ پاتوژن‌ها جلوگیری می‌کند.", benefits: [ "تقویت سد دفاعی روده", "انتقال مستقیم آنتی‌بادی به نوزادان", @@ -104,7 +104,7 @@ async function main() { }, { id: "peat-extract", - name: "عصاره پیت (Peat Extract)", + name: "عصاره پیت (Peat Extract / Moor)", description: "ماده‌ای کاملاً طبیعی حاصل از تجزیه گیاهان در طول هزاران سال که غنی از اسیدهای هومیک با ساختار پلیمری دارای بار منفی است. سموم، قارچ‌ها و باکتری‌های مضر را در روده به دام انداخته و دفع می‌کند.", benefits: [ "جذب سموم و فلزات سنگین در دستگاه گوارش", @@ -115,31 +115,121 @@ async function main() { { id: "collagen", name: "کلاژن هیدرولیز شده", - description: "پپتیدهای کلاژن نوع I و II با وزن مولکولی پایین که مستقیماً در ماتریکس غضروف مفصلی جذب شده و سنتز کلاژن را تحریک می‌کنند. پروتئین خالص ۹۴٪.", + description: "پپتیدهای کلاژن نوع I و II با وزن مولکولی پایین که مستقیماً در ماتریکس غضروف مفصلی جذب شده و ساختار استخوان‌ها و تاندون‌ها را تقویت کرده و تحرک مفاصل را بهبود می‌بخشند.", benefits: [ "بازسازی غضروف مفصلی", - "تقویت بافت همبند", + "تقویت بافت همبند و تاندون‌ها", "بهبود خاصیت ارتجاعی مفاصل" ] }, { id: "biotin", - name: "بیوتین (ویتامین H / B7)", - description: "کوآنزیم کربوکسیلازهای مسئول سنتز اسیدهای چرب و گلوکونئوژنز. با دوز ۱,۰۰۰,۰۰۰ میکروگرم در کیلوگرم در محصولات کانینا، قوی‌ترین دوز موجود در بازار مکمل‌های دامپزشکی.", + name: "بیوتین (Biotin / Vitamin H)", + description: "ویتامین ضروری از گروه B که به عنوان کوآنزیم در مسیرهای سنتز کراتین و چربی‌ها عمل می‌کند. کمبود آن باعث ریزش مو، کدر شدن پوشش و شکنندگی پنجه‌ها می‌شود.", benefits: [ - "جلوگیری از ریزش مو", - "تقویت رنگدانه پوشش", - "محکم‌سازی پنجه و ناخن" + "جلوگیری از ریزش مو و بازسازی پوشش مویی", + "تقویت رنگدانه طبیعی مو و بینی", + "محکم‌سازی پنجه، ناخن و سم‌ها" ] }, { id: "taurin", - name: "تورین", - description: "اسید آمینه ضروری شرطی برای گربه‌ها. بدن گربه قادر به سنتز تورین نیست و کمبود آن منجر به دژنراسیون مرکزی شبکیه (نابینایی) و کاردیومیوپاتی متسع می‌شود.", + name: "تورین (Taurine)", + description: "اسید آمینه بسیار حیاتی برای گربه‌ها. بدن گربه قادر به سنتز تورین نیست و کمبود آن در رژیم غذایی می‌تواند به تخریب تدریجی شبکیه چشم (نابینایی) و بیماری قلبی منجر گردد.", benefits: [ - "سلامت بینایی و شبکیه چشم", - "تقویت عضله قلب", - "سیستم ایمنی گربه" + "سلامت بینایی و شبکیه چشم گربه‌ها", + "تقویت عضله قلب و عملکرد پمپاژ خون", + "پشتیبانی از سیستم ایمنی و تولید مثل" + ] + }, + { + id: "salmon-oil", + name: "روغن ماهی سالمون (Salmon Oil)", + description: "روغن ماهی سالمون خالص، سرشار از اسیدهای چرب امگا ۳ (DHA و EPA) که به کاهش پاسخ‌های التهابی، سلامت سیستم قلبی عروقی و پوست و مو کمک شایانی می‌کند.", + benefits: [ + "بهبود براقیت و لطافت پوست و مو", + "خواص ضدالتهابی قوی در مفاصل", + "تقویت سیستم ایمنی و عملکردهای شناختی" + ] + }, + { + id: "black-cumin", + name: "سیاه دانه (Black Cumin)", + description: "دانه‌های سیاه دانه مصری غنی از اسیدهای چرب غیراشباع و روغن‌های فرار گیاهی با عطر آجیلی قوی که عملکرد گوارش و متابولیسم را بهبود می‌بخشند.", + benefits: [ + "تنظیم متابولیسم عمومی و هضم بهتر", + "تقویت سیستم دفاعی طبیعی بدن", + "خواص طبیعی ضد باکتری و ضدقارچ" + ] + }, + { + id: "eggshell", + name: "پودر پوسته تخم مرغ (Eggshell Powder)", + description: "منبع طبیعی کلسیم ارگانیک با غلظت کلسیم بالا (۳۶٪) و مقدار ناچیز فسفر (۰.۱٪) جهت تنظیم نسبت کلسیم به فسفر در غذاهای گوشتی پخته یا خام.", + benefits: [ + "تامین کلسیم بدون افزایش ناخواسته فسفر", + "جایگزین عالی برای حیوانات دارای آلرژی به استخوان", + "پشتیبانی از سلامت استخوان و دندان" + ] + }, + { + id: "hawthorn", + name: "زالزالک (Hawthorn)", + description: "عصاره گیاهی دارویی با سابقه مصرف طولانی جهت مهار طبیعی آنزیم‌های آسیب‌رسان و بهبود خون‌رسانی و کارایی کلی عضله قلب.", + benefits: [ + "تقویت انقباضات ماهیچه قلب", + "بهبود جریان خون در رگ‌های کرونری", + "افزایش نشاط در سگ و گربه‌های مسن" + ] + }, + { + id: "l-carnitine", + name: "ال-کارنیتین (L-Carnitine)", + description: "ترکیب شبه‌آمینه که با تسهیل انتقال اسیدهای چرب به درون میتوکندری، به تولید انرژی سلولی کمک کرده و از خستگی عضلانی جلوگیری می‌نماید.", + benefits: [ + "تولید انرژی از چربی‌ها در ماهیچه قلب", + "بهبود قدرت بدنی و کاهش خستگی عضلات", + "حمایت از متابولیسم سالم چربی‌ها" + ] + }, + { + id: "seaweed", + name: "جلبک دریایی (Seaweed)", + description: "جلبک قهوه‌ای اقیانوسی ارگانیک حاوی اسیدهای آمینه، ویتامین‌ها و ید طبیعی جهت کمک به تنظیم غده تیروئید و تقویت پیگمنت‌های تیره حیوان.", + benefits: [ + "تقویت رنگدانه بینی، پنجه و پوشش مویی", + "بهبود هضم و جذب مواد مغذی", + "پشتیبانی عمومی از سلامت غده تیروئید" + ] + }, + { + id: "hyaluronic", + name: "هیالورونات سدیم (Sodium Hyaluronate)", + description: "ماده‌ای فوق‌العاده با خاصیت اتصال به آب بالا که روان‌کننده و مرطوب‌کننده قرنیه چشم بوده و از خشکی و خارش چشم‌ها جلوگیری می‌کند.", + benefits: [ + "شستشو و تسکین چشم‌های تحریک‌شده و قرمز", + "رطوبت‌رسانی ماندگار به سطح خارجی قرنیه", + "کمک به رفع چسبندگی و قی کردن چشم" + ] + }, + { + id: "calendula-sea-buckthorn", + name: "روغن کالاندولا و سنجد دریایی", + description: "روغن‌های طبیعی گیاهی با اثرات ضدالتهابی، بازسازی‌کننده و تسکین‌دهنده پوست که یک سد دفاعی فیزیکی و بیولوژیکی ایجاد می‌کنند.", + benefits: [ + "ترمیم خشکی، ترک خوردگی و آسیب‌های پنجه", + "تسکین التهاب و قرمزی ناشی از گزش حشرات", + "کمک به بازسازی سریع‌تر لایه‌های آسیب‌دیده پوست" + ] + }, + { + id: "dodecanoic", + name: "اسید دودکانوئیک و مارگوسا", + description: "عوامل فعال طبیعی و گیاهی بدون مواد حشره‌کش شیمیایی با خواص دورکننده قوی در برابر انگل‌های خارجی نظیر کک، کنه و شپش.", + benefits: [ + "دفع موثر کنه‌ها، کک‌ها و شپش‌های گزنده", + "جلوگیری از مستقر شدن انگل‌ها و تخم آنها در محیط", + "ایمن برای حیوان و اعضای خانواده در محیط خانه" ] } ]), diff --git a/backend/uploads/1783765738982-360633697.png b/backend/uploads/1783765738982-360633697.png deleted file mode 100644 index 3f09d4e..0000000 Binary files a/backend/uploads/1783765738982-360633697.png and /dev/null differ diff --git a/backend/uploads/1783765761042-126169451.png b/backend/uploads/1783765761042-126169451.png deleted file mode 100644 index 5e7a5ff..0000000 Binary files a/backend/uploads/1783765761042-126169451.png and /dev/null differ diff --git a/backend/uploads/1783766019136-538342352.png b/backend/uploads/1783766019136-538342352.png deleted file mode 100644 index 8d8cf71..0000000 Binary files a/backend/uploads/1783766019136-538342352.png and /dev/null differ diff --git a/backend/uploads/1783766176570-259772529.png b/backend/uploads/1783766176570-259772529.png deleted file mode 100644 index 39e0353..0000000 Binary files a/backend/uploads/1783766176570-259772529.png and /dev/null differ diff --git a/backend/uploads/1783766236883-149191779.png b/backend/uploads/1783766236883-149191779.png deleted file mode 100644 index db50495..0000000 Binary files a/backend/uploads/1783766236883-149191779.png and /dev/null differ diff --git a/backend/uploads/1783766312952-814581776.png b/backend/uploads/1783766312952-814581776.png deleted file mode 100644 index 9e3de5f..0000000 Binary files a/backend/uploads/1783766312952-814581776.png and /dev/null differ diff --git a/backend/uploads/1783766352024-429505659.png b/backend/uploads/1783766352024-429505659.png deleted file mode 100644 index c96a937..0000000 Binary files a/backend/uploads/1783766352024-429505659.png and /dev/null differ diff --git a/backend/uploads/1783772119526-938188787.png b/backend/uploads/1783772119526-938188787.png deleted file mode 100644 index c06e747..0000000 Binary files a/backend/uploads/1783772119526-938188787.png and /dev/null differ diff --git a/backend/uploads/1783772147356-620840114.png b/backend/uploads/1783772147356-620840114.png deleted file mode 100644 index b1df70a..0000000 Binary files a/backend/uploads/1783772147356-620840114.png and /dev/null differ diff --git a/frontend/admin-panel/src/components/ui/MediaSelector.tsx b/frontend/admin-panel/src/components/ui/MediaSelector.tsx index 1ce1829..2cb7cb6 100644 --- a/frontend/admin-panel/src/components/ui/MediaSelector.tsx +++ b/frontend/admin-panel/src/components/ui/MediaSelector.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, useRef } from 'react'; import { X, Upload, Image as ImageIcon, Trash2, CheckCircle2, Clipboard } from 'lucide-react'; -import api from '../../services/api'; +import api, { BASE_DOMAIN } from '../../services/api'; import Spinner from './Spinner'; interface Media { @@ -186,7 +186,7 @@ export default function MediaSelector({ isOpen, onClose, onSelect, multiple = fa ) : (
{mediaList.map((media) => { - const imgUrl = media.url.startsWith('http') ? media.url : `https://apicanina.parsaaghayi.ir${media.url}`; + const imgUrl = media.url.startsWith('http') ? media.url : `${BASE_DOMAIN}${media.url}`; const isSelected = selectedUrl && imgUrl === selectedUrl; return (
{blog.imageUrl ? ( - blog + blog ) : (
@@ -222,7 +222,7 @@ export default function Blogs() {
{formData.imageUrl ? ( - preview + preview ) : (
diff --git a/frontend/admin-panel/src/pages/Categories.tsx b/frontend/admin-panel/src/pages/Categories.tsx index ff91b29..900612b 100644 --- a/frontend/admin-panel/src/pages/Categories.tsx +++ b/frontend/admin-panel/src/pages/Categories.tsx @@ -1,6 +1,6 @@ import { useState, useEffect } from 'react'; import { Search, Plus, Edit2, Trash2, FolderTree, Image as ImageIcon, X } from 'lucide-react'; -import api from '../services/api'; +import api, { BASE_DOMAIN } from '../services/api'; import Spinner from '../components/ui/Spinner'; import Pagination from '../components/ui/Pagination'; import MediaSelector from '../components/ui/MediaSelector'; @@ -158,7 +158,7 @@ export default function Categories() { {cat.imageUrl ? ( - {cat.name} + {cat.name} ) : (
@@ -240,7 +240,7 @@ export default function Categories() {
{formData.imageUrl ? ( - preview + preview ) : (
diff --git a/frontend/admin-panel/src/pages/Media.tsx b/frontend/admin-panel/src/pages/Media.tsx index 298455b..6fe707d 100644 --- a/frontend/admin-panel/src/pages/Media.tsx +++ b/frontend/admin-panel/src/pages/Media.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, useRef } from 'react'; import { Upload, Image as ImageIcon, Trash2, Copy, CheckCircle2, Search, X, FolderOpen } from 'lucide-react'; -import api from '../services/api'; +import api, { BASE_DOMAIN } from '../services/api'; import Spinner from '../components/ui/Spinner'; interface Media { @@ -102,7 +102,7 @@ export default function MediaManager() { }; const handleCopyUrl = async (media: Media) => { - const fullUrl = media.url.startsWith('http') ? media.url : `https://apicanina.parsaaghayi.ir${media.url}`; + const fullUrl = media.url.startsWith('http') ? media.url : `${BASE_DOMAIN}${media.url}`; try { await navigator.clipboard.writeText(fullUrl); setCopiedId(media.id); @@ -202,7 +202,7 @@ export default function MediaManager() { ) : (
{filtered.map(media => { - const imgUrl = media.url.startsWith('http') ? media.url : `https://apicanina.parsaaghayi.ir${media.url}`; + const imgUrl = media.url.startsWith('http') ? media.url : `${BASE_DOMAIN}${media.url}`; return (
{pet.imageUrl ? ( - {pet.name} + {pet.name} ) : (
diff --git a/frontend/admin-panel/src/pages/Products.tsx b/frontend/admin-panel/src/pages/Products.tsx index 04069bd..36dd20a 100644 --- a/frontend/admin-panel/src/pages/Products.tsx +++ b/frontend/admin-panel/src/pages/Products.tsx @@ -1,7 +1,7 @@ import { useState, useEffect } from 'react'; import { Search, Filter, Box, Plus, Edit2, Trash2, Image as ImageIcon, X } from 'lucide-react'; import { toast } from 'react-hot-toast'; -import api from '../services/api'; +import api, { BASE_DOMAIN } from '../services/api'; import Spinner from '../components/ui/Spinner'; import Pagination from '../components/ui/Pagination'; import MediaSelector from '../components/ui/MediaSelector'; @@ -214,7 +214,7 @@ export default function Products() { {product.imageUrl ? ( - {product.name} + {product.name} ) : (
@@ -385,7 +385,7 @@ export default function Products() { {formData.imageUrl ? (
- product + product
@@ -435,7 +435,7 @@ export default function Products() { isOpen={isMediaSelectorOpen} onClose={() => setIsMediaSelectorOpen(false)} onSelect={(url) => setFormData({...formData, imageUrl: url})} - selectedUrl={formData.imageUrl.startsWith('http') ? formData.imageUrl : formData.imageUrl ? `https://apicanina.parsaaghayi.ir${formData.imageUrl}` : undefined} + selectedUrl={formData.imageUrl.startsWith('http') ? formData.imageUrl : formData.imageUrl ? `${BASE_DOMAIN}${formData.imageUrl}` : undefined} />
); diff --git a/frontend/admin-panel/src/services/api.ts b/frontend/admin-panel/src/services/api.ts index 8ea1445..31951e1 100644 --- a/frontend/admin-panel/src/services/api.ts +++ b/frontend/admin-panel/src/services/api.ts @@ -1,7 +1,13 @@ import axios from 'axios'; +export const BASE_DOMAIN = import.meta.env.VITE_API_URL + ? import.meta.env.VITE_API_URL.replace(/\/api$/, '') + : (import.meta.env.DEV ? 'http://127.0.0.1:4001' : 'https://apicanina.parsaaghayi.ir'); + +const baseURL = `${BASE_DOMAIN}/api`; + const api = axios.create({ - baseURL: 'https://apicanina.parsaaghayi.ir/api', // Backend NestJS API URL + baseURL, headers: { 'Content-Type': 'application/json', }, diff --git a/frontend/application/app/about/page.tsx b/frontend/application/app/about/page.tsx new file mode 100644 index 0000000..51e152a --- /dev/null +++ b/frontend/application/app/about/page.tsx @@ -0,0 +1,81 @@ +import type { Metadata } from "next"; +import { ShieldCheck, History, Award, CheckCircle } from "lucide-react"; + +export const metadata: Metadata = { + title: "درباره ما", + description: "داستان کانینا ایران و میراث ۴۰ ساله شرکت Canina pharma GmbH آلمان در تولید مکمل‌های فوق‌تخصصی دامپزشکی.", +}; + +export default function AboutPage() { + return ( +
+
+ + {/* Hero Section */} +
+ + + داستان ما از ۱۹۸۴ + +

+ درباره کانینا ایران +

+

+ میراث علمی و تعهد ما به تدارک هوشمندانه سلامت برای همراهان وفادار شما. +

+
+ + {/* Brand Image Placeholder / Card */} +
+
+
+

Canina pharma GmbH

+

+ شرکت Canina pharma GmbH در سال ۱۹۸۴ توسط پتر و کریستین کرشن‌مایر در شهر برگیش گلادباخ آلمان تأسیس شد. این کمپانی با فلسفه «مادر طبیعت بهترین نسخه را می‌داند»، برای بیش از ۴۰ سال است که استاندارد طلایی مکمل‌های دامپزشکی را در جهان تعریف می‌کند. +

+
+
+ + {/* Narrative Section */} +
+

+ امروز محصولات کانینا در بیش از ۴۰ کشور جهان توزیع می‌شود. کانینا ایران به عنوان نماینده رسمی این برند، با هدف ارتقای کیفیت زندگی حیوانات خانگی و دسترسی آسان جامعه دامپزشکی و دارندگان حیوانات به این مکمل‌های ارزشمند، فعالیت خود را آغاز نموده است. تمامی محصولات با بسته‌بندی اصلی آلمان و دارای برچسب اصالت سازمان دامپزشکی ارائه می‌شوند. +

+
+ + {/* Key Features Grid */} +
+
+
+ +
+

گرید فوق‌دارویی

+

+ استفاده از مواد اولیه کاملاً طبیعی و فرآوری شده در بالاترین سطح کیفی دارویی مطابق استانداردهای اروپا. +

+
+ +
+
+ +
+

گواهی‌های بین‌المللی

+

+ دارای تأییدیه‌های IFS Food و HACCP که ایمنی، سلامت و یکپارچگی خطوط تولید را تضمین می‌کند. +

+
+ +
+
+ +
+

تعهد به اصالت

+

+ ارائه محصولات اصل با ضمانت اصالت کالا و برچسب‌های رهگیری قانونی وزارت بهداشت و دامپزشکی. +

+
+
+
+
+ ); +} diff --git a/frontend/application/app/contact/page.tsx b/frontend/application/app/contact/page.tsx new file mode 100644 index 0000000..0595d28 --- /dev/null +++ b/frontend/application/app/contact/page.tsx @@ -0,0 +1,106 @@ +import type { Metadata } from "next"; +import { Mail, Phone, MapPin, Clock, Send } from "lucide-react"; + +export const metadata: Metadata = { + title: "تماس با ما", + description: "راه‌های ارتباطی با نمایندگی رسمی مکمل‌های دامپزشکی کانینا در ایران.", +}; + +export default function ContactPage() { + return ( +
+
+ + {/* Title */} +
+ + پاسخگوی شما هستیم + +

+ تماس با کانینا ایران +

+

+ جهت مشاوره تخصصی، خرید عمده و پیگیری سفارشات با ما در ارتباط باشید. +

+
+ +
+ {/* Contact Details */} +
+

اطلاعات نمایندگی

+ +
+
+
+ +
+
+

تلفن‌های تماس

+

۰۲۱-۸۸۸۸ ۴۴۴۴

+

شنبه تا چهارشنبه ۹:۰۰ الی ۱۸:۰۰

+
+
+ +
+
+ +
+
+

پست الکترونیک

+

info@canino-iran.com

+

پاسخگویی در کمتر از ۲۴ ساعت کاری

+
+
+ +
+
+ +
+
+

نشانی دفتر مرکزی

+

+ تهران، جردن، خیابان سعیدی، ساختمان کانینا، طبقه ۵، واحد ۱۹ +

+
+
+
+
+ + {/* Contact Form */} +
+

ارسال پیام مستقیم

+ +
+
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ + +
+
+
+ +
+
+ ); +} diff --git a/frontend/application/app/globals.css b/frontend/application/app/globals.css index e37e22e..ff607d4 100644 --- a/frontend/application/app/globals.css +++ b/frontend/application/app/globals.css @@ -70,13 +70,13 @@ @import "tailwindcss"; @theme { - --font-sans: "Vazirmatn", sans-serif; - --font-vazir: "Vazirmatn", sans-serif; - --font-shabnam: "Shabnam", sans-serif; - --font-sahel: "Sahel", sans-serif; + --font-sans: "Vazirmatn"; + --font-vazir: "Vazirmatn"; + --font-shabnam: "Shabnam"; + --font-sahel: "Sahel"; --font-lalezar: "Lalezar", cursive; --font-nastaliq: "IranNastaliq", serif; - --font-iranian-sans: "IranianSans", sans-serif; + --font-iranian-sans: "IranianSans"; /* Brand Colors */ --color-canina-blue: #1E4053; @@ -99,11 +99,11 @@ @layer base { :root { - font-family: "Vazirmatn", sans-serif !important; + font-family: "Vazirmatn" !important; } html, body, #root { - font-family: "Vazirmatn", sans-serif !important; + font-family: "Vazirmatn" !important; @apply bg-medical-gray-50 text-medical-gray-900 antialiased; font-feature-settings: "ss01", "ss02", "cv01", "cv11"; } @@ -133,7 +133,7 @@ @layer utilities { .font-vazir { - font-family: "Vazirmatn", sans-serif; + font-family: "Vazirmatn"; } } diff --git a/frontend/application/app/privacy/page.tsx b/frontend/application/app/privacy/page.tsx new file mode 100644 index 0000000..9537e9f --- /dev/null +++ b/frontend/application/app/privacy/page.tsx @@ -0,0 +1,61 @@ +import type { Metadata } from "next"; +import { Shield } from "lucide-react"; + +export const metadata: Metadata = { + title: "حریم خصوصی", + description: "سیاست‌های حفاظت از اطلاعات شخصی کاربران در وب‌سایت کانینا ایران.", +}; + +export default function PrivacyPage() { + return ( +
+
+ + {/* Header */} +
+
+ +
+

+ حریم خصوصی کاربران +

+

+ تعهد ما به امنیت داده‌ها و اطلاعات شخصی ثبت شده در وب‌سایت کانینا ایران. +

+
+ + {/* Content Document */} +
+
+

۱. جمع‌آوری اطلاعات

+

+ ما برای ارائه خدمات بهتر، از جمله پردازش سفارشات خرید، ثبت مشخصات شناسنامه پت شما در پرونده پزشکی و ارائه هشدارهای هوشمند دوره‌های درمان، اطلاعات محدودی نظیر شماره تماس، نام، آدرس تحویل و مشخصات حیوان خانگی شما را جمع‌آوری می‌کنیم. +

+
+ +
+

۲. استفاده از اطلاعات

+

+ اطلاعات دریافتی شما صرفاً برای مقاصد عملیاتی سایت (ارسال محصولات، هماهنگی‌های پشتیبانی، یادآوری تمدید خودکار مکمل‌ها و بهینه‌سازی تجربه خرید) استفاده خواهد شد و به هیچ عنوان در اختیار شرکت‌ها یا سازمان‌های ثالث قرار نمی‌گیرد. +

+
+ +
+

۳. امنیت داده‌ها

+

+ تمامی اطلاعات حساس کاربران با استفاده از پروتکل‌های امنیتی استاندارد و بستر امن HTTPS رمزگذاری شده و بر روی سرورهای ابری محافظت شده ذخیره می‌گردند. تیم فنی کانینا متعهد به پایش مداوم و به‌روزرسانی سیستم‌های امنیتی جهت جلوگیری از دسترسی‌های غیرمجاز است. +

+
+ +
+

۴. حقوق کاربران

+

+ شما در هر زمان می‌توانید با ورود به پنل کاربری خود اقدام به تصحیح، تغییر یا حذف کامل مشخصات پرونده، نشانی‌ها و اطلاعات کاربری خود نمایید. +

+
+
+ +
+
+ ); +} diff --git a/frontend/application/components/ArchivePage.tsx b/frontend/application/components/ArchivePage.tsx index 901c8d6..10f8bd3 100644 --- a/frontend/application/components/ArchivePage.tsx +++ b/frontend/application/components/ArchivePage.tsx @@ -139,7 +139,7 @@ const ArchiveProductCard: React.FC<{ product: Product, onClick: (p: Product) =>
{product.category}
-

{product.name}

+

{product.name}

{product.symptoms.slice(0, 2).map((s, i) => ( diff --git a/frontend/application/components/FeaturedProducts.tsx b/frontend/application/components/FeaturedProducts.tsx index 6688a89..80c1e0a 100644 --- a/frontend/application/components/FeaturedProducts.tsx +++ b/frontend/application/components/FeaturedProducts.tsx @@ -69,7 +69,7 @@ function ProductCard({ product, onClick }: { product: Product; key?: string | nu {/* Content Area */}
-

+

{product.name}

diff --git a/frontend/application/components/Footer.tsx b/frontend/application/components/Footer.tsx index 5c1cf5f..4655eab 100644 --- a/frontend/application/components/Footer.tsx +++ b/frontend/application/components/Footer.tsx @@ -16,13 +16,11 @@ export default function Footer({ onNavigate, onShopNavigate, onB2BOpen }: { {/* Brand Presence */}
-
onNavigate("home")}> -
- Canina Logo -
-
-

{getText('footer_brand_title', "کانینا ایران")}

-

{getText('footer_brand_subtitle', "نماینده رسمی در ایران")}

+
onNavigate("home")}> +
C
+
+ Canina {getText('brand_name_fa', "ایران")} + {getText('brand_subtitle', "نماینده رسمی Canina Pharma GmbH آلمان")}

@@ -119,9 +117,9 @@ export default function Footer({ onNavigate, onShopNavigate, onB2BOpen }: {

{getText('footer_copyright', "© ۲۰۲۶ کانینا ایران. تمامی حقوق محفوظ است.")}
- - - + + +
diff --git a/frontend/application/components/IngredientWiki.tsx b/frontend/application/components/IngredientWiki.tsx index 57c2c58..1ea3aca 100644 --- a/frontend/application/components/IngredientWiki.tsx +++ b/frontend/application/components/IngredientWiki.tsx @@ -127,10 +127,33 @@ export default function IngredientWiki() { return (
{filtered.map((ing, idx) => { - const hasIngredient = products.filter(p => - p.main_ingredients?.some(mi => mi.toLowerCase().includes(ing.name.toLowerCase())) || - p.main_ingredients?.some(mi => mi.toLowerCase().includes(ing.id.replace('-', ' '))) - ); + const hasIngredient = products.filter(p => { + const ingNameClean = ing.name.split('(')[0].trim().toLowerCase(); + const ingIdClean = ing.id.replace(/-/g, ' ').toLowerCase(); + + return p.main_ingredients?.some(mi => { + const miClean = mi.toLowerCase(); + return miClean.includes(ingNameClean) || + ingNameClean.includes(miClean) || + miClean.includes(ingIdClean) || + (ing.id === 'green-mussel' && (miClean.includes('صدف') || miClean.includes('mussel'))) || + (ing.id === 'collagen' && miClean.includes('کلاژن')) || + (ing.id === 'silver' && (miClean.includes('نقره') || miClean.includes('silver'))) || + (ing.id === 'peat-extract' && (miClean.includes('پیت') || miClean.includes('moor') || miClean.includes('عصاره'))) || + (ing.id === 'colostrum' && (miClean.includes('آغوز') || miClean.includes('colostrum'))) || + (ing.id === 'biotin' && (miClean.includes('بیوتین') || miClean.includes('biotin'))) || + (ing.id === 'taurin' && (miClean.includes('تورین') || miClean.includes('taurine'))) || + (ing.id === 'salmon-oil' && (miClean.includes('سالمون') || miClean.includes('salmon') || miClean.includes('ماهی'))) || + (ing.id === 'black-cumin' && (miClean.includes('سیاه دانه') || miClean.includes('زیره') || miClean.includes('cumin'))) || + (ing.id === 'eggshell' && (miClean.includes('پوسته تخم مرغ') || miClean.includes('تخم‌مرغ') || miClean.includes('eggshell'))) || + (ing.id === 'hawthorn' && (miClean.includes('زالزالک') || miClean.includes('hawthorn'))) || + (ing.id === 'l-carnitine' && (miClean.includes('کارنیتین') || miClean.includes('carnitine'))) || + (ing.id === 'seaweed' && (miClean.includes('جلبک') || miClean.includes('seaweed'))) || + (ing.id === 'hyaluronic' && (miClean.includes('هیالورونات') || miClean.includes('hyaluron'))) || + (ing.id === 'calendula-sea-buckthorn' && (miClean.includes('کالاندولا') || miClean.includes('سنجد') || miClean.includes('calendula'))) || + (ing.id === 'dodecanoic' && (miClean.includes('دودکانوئیک') || miClean.includes('مارگوسا') || miClean.includes('insect'))); + }); + }); return (
diff --git a/frontend/application/components/OrderDetailsModal.tsx b/frontend/application/components/OrderDetailsModal.tsx index ff75ffa..e4c30c8 100644 --- a/frontend/application/components/OrderDetailsModal.tsx +++ b/frontend/application/components/OrderDetailsModal.tsx @@ -50,7 +50,7 @@ export default function OrderDetailsModal({ isOpen, onClose, order }: OrderDetai font-family: 'Vazirmatn'; src: url('https://cdn.jsdelivr.net/gh/rastikerdar/vazirmatn@v33.003/fonts/webfonts/Vazirmatn-Regular.woff2') format('woff2'); } - body { font-family: 'Vazirmatn', sans-serif; padding: 40px; color: #333; } + body { font-family: 'Vazirmatn'; padding: 40px; color: #333; } .header { display: flex; justify-between: space-between; align-items: center; border-bottom: 2px solid #0055FF; pb: 20px; mb: 40px; } .logo { font-size: 24px; font-weight: 900; color: #0055FF; } .info { margin-bottom: 40px; display: grid; grid-template-columns: 1fr 1fr; gap: 20px; } diff --git a/frontend/application/components/ProductPage.tsx b/frontend/application/components/ProductPage.tsx index 1d0ca5e..2063b4f 100644 --- a/frontend/application/components/ProductPage.tsx +++ b/frontend/application/components/ProductPage.tsx @@ -194,24 +194,49 @@ export default function ProductPage({ productSlug }: { productSlug: string }) { {product.name} -
- {/* Main Content Area */} -
+ {/* Above the Fold Grid */} +
+ {/* Right Column: Product Image Frame (md:col-span-5) */} +
+ +
+
+ + موجود در انبار +
+
+ گرید دارویی اختصاصی +
+
+ +
+
+ + {/* Left Column: Product Title & Description (md:col-span-7) */} +
-
+
استاندارد صنعتی آلمان
{product.specialBadge && ( -
+
{product.specialBadge}
)}
-

+

{product.name}

-

+

{pets.length > 0 ? ( product.optimisticTemplate?.replace("[PetName]", activePet?.name || "").replace("[OnSet]", product.onSetOfAction || "به زودی") ) : ( @@ -219,12 +244,26 @@ export default function ProductPage({ productSlug }: { productSlug: string }) { )}

{fullProduct.shortDescription && ( -

+

{fullProduct.shortDescription}

)} + {fullProduct.description && ( +
+ {fullProduct.description.split('\n').filter(Boolean).map((para, pIdx) => ( +

{para.trim()}

+ ))} +
+ )}
+
+
+ {/* Technical & Commerce Sections */} +
+ {/* Main Content Area */} +
+ {/* Key Benefits Section */} {fullProduct.keyBenefits && fullProduct.keyBenefits.length > 0 && (
@@ -238,7 +277,7 @@ export default function ProductPage({ productSlug }: { productSlug: string }) { {fullProduct.keyBenefits.map((benefit, i) => { const Icon = ICON_MAP[benefit.icon] || CheckCircle2; return ( -
+
@@ -252,31 +291,69 @@ export default function ProductPage({ productSlug }: { productSlug: string }) {
)} - -
-
- - موجود در انبار + {/* Smart Dosage Calculator Utility Section */} +
+
+
+
-
- گرید دارویی اختصاصی +
+

ماشین حساب هوشمند مصرف

+

تخمین دقیق دوز روزانه و ماندگاری هر بسته بر اساس مشخصات پت شما

- - + +
+ {/* Manual Slider Inputs */} +
+
+ وزن پت (کیلوگرم) + {toPersian(weight)} ک‌گ +
+ setWeight(parseInt(e.target.value))} + className="w-full h-2 bg-medical-gray-200 rounded-lg appearance-none cursor-pointer accent-canina-blue [&::-webkit-slider-thumb]:w-6 [&::-webkit-slider-thumb]:h-6 [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-canina-blue [&::-webkit-slider-thumb]:appearance-none" + /> + +
+ سن حیوان +
+ + +
+
+
+ + {/* Calculation Results Output */} +
+
+ + تخمین هوش مصنوعی (AI Advice) +
+
+
+
{toPersian(calculation.duration)} روز
+
تخمین اتمام مصرف بسته
+
+
+
{toPersian(calculation.dailyDose)}
+
دوز روزانه ({calculation.unit === 'g' ? 'گرم' : calculation.unit})
+
+
+

+ * دوزها تخمینی هستند؛ توصیه می‌شود برای مصرف دقیق کاتالوگ محصول را مطالعه کنید. +

+
+
+
{/* Ingredients Section */}
-
+

ترکیبات و آنالیز علمی

@@ -284,7 +361,7 @@ export default function ProductPage({ productSlug }: { productSlug: string }) {
{/* Ingredients Cards */} -
+

مواد تشکیل‌دهنده برتر

{product.main_ingredients.map((ing, idx) => { @@ -311,7 +388,7 @@ export default function ProductPage({ productSlug }: { productSlug: string }) {
تخمین اتمام بسته (هوش مصنوعی)
{Object.entries(product.analysis).map(([key, value]) => ( -
+
{key}
{toPersian(value)}
@@ -322,13 +399,17 @@ export default function ProductPage({ productSlug }: { productSlug: string }) {
- {/* Feeding Section */} -
+ {/* Feeding / Usage Instructions Section (Dynamic Header based on product category) */} +
-
+
-

توصیه غذایی و نحوه مصرف

+

+ {product.categorySlug === 'special-care' || product.name.toLowerCase().includes('pfotenpflege') || product.name.toLowerCase().includes('augenpflege') + ? 'دستورالعمل و نحوه استفاده موضعی' + : 'توصیه غذایی و نحوه مصرف'} +

{product.feedingAdvice} @@ -337,12 +418,12 @@ export default function ProductPage({ productSlug }: { productSlug: string }) { {/* Specialist Note */} {product.specialist && ( -

+
{product.specialist.name}
@@ -362,7 +443,7 @@ export default function ProductPage({ productSlug }: { productSlug: string }) { {/* Specialized Landing Banner */}
toast.info("بزودی: صفحه فرود تخصصی این محصول در حال آماده‌سازی است")} >
@@ -394,7 +475,7 @@ export default function ProductPage({ productSlug }: { productSlug: string }) {
{product.faqs.map((faq, i) => ( -
+
{faq.question} @@ -409,52 +490,16 @@ export default function ProductPage({ productSlug }: { productSlug: string }) { )}
- {/* Sticky Sidebar */} + {/* Sticky Sidebar (Clean Buy Box) */}
-
+
-
+
قیمت نهایی محصول
+
{toPersian(product.price)}
- {/* Refill Auto-Calculator */} -
-
- - هوش مصنوعی تکرار خرید -
-
-
-
{toPersian(calculation.duration)} روز
-
تخمین اتمام برای {toPersian(weight)} کیلوگرم
-
-
-
{toPersian(calculation.dailyDose)}
-
دوز روزانه ({calculation.unit === 'g' ? 'گرم' : calculation.unit})
-
-
-
- - {/* Manual Calculator (Mini) */} -
-
- وزن پت (کیلوگرم) - {toPersian(weight)} -
- setWeight(parseInt(e.target.value))} - className="w-full h-1.5 bg-medical-gray-200 rounded-lg appearance-none cursor-pointer accent-canina-blue" - /> -
- - -
-
-
{/* Quantity Selector - 40% Width */}
@@ -488,12 +533,12 @@ export default function ProductPage({ productSlug }: { productSlug: string }) {
-
-
+
+
ضمانت اصالت محصول (Made in Germany)
-
+
آماده ارسال (تحویل حداکثر ۴۸ ساعت)
@@ -502,7 +547,7 @@ export default function ProductPage({ productSlug }: { productSlug: string }) { {/* expected results box */} {product.expectedResults && product.expectedResults.length > 0 && ( -
+

تغییرات قابل انتظار

{product.expectedResults.map((res, i) => { diff --git a/frontend/application/lib/data/scientificTerms.ts b/frontend/application/lib/data/scientificTerms.ts index 1bf2345..dce064a 100644 --- a/frontend/application/lib/data/scientificTerms.ts +++ b/frontend/application/lib/data/scientificTerms.ts @@ -1,4 +1,4 @@ -export interface ScientificTerm { +export interface ScientificTerm { term: string; definition: string; wikiId?: string; @@ -7,28 +7,28 @@ export const SCIENTIFIC_TERMS: Record = { "گلیکوزآمینوگلیکان": { term: "گلیکوزآمینوگلیکان (GAG)", - definition: "ترکیبات ساختاری ضروری برای بازسازی غضروف‌ها و مایع مفصلی که در Canhydrox GAG به وفور یافت می‌شود.", - wikiId: "gag" + definition: "ترکیبات ساختاری ضروری برای بازسازی غضروف‌ها و مایع مفصلی که در مفاصل و تاندون‌ها نقش حیاتی دارند.", + wikiId: "green-mussel" }, "اسیدهای هومیک": { term: "اسیدهای هومیک", - definition: "مواد آلی طبیعی موجود در عصاره پیت (Moor) که از مخاط روده محافظت کرده و سموم را جذب می‌کنند.", - wikiId: "humic-acids" + definition: "مواد آلی طبیعی موجود در عصاره پیت (Moor) که از مخاط روده محافظت کرده و سموم را در گوارش به دام می‌اندازند.", + wikiId: "peat-extract" }, "کلاژن زیست‌فعال": { - term: "کلاژن زیست‌فعال", - definition: "پروتئین‌های اختصاصی هیدرولیز شده که به سرعت جذب استخوان و تاندون شده و استحکام ساختاری ایجاد می‌کنند.", + term: "کلاژن زیست‌فعال (Bioactive Collagen)", + definition: "پروتئین‌های اختصاصی هیدرولیز شده که به سرعت جذب استخوان و تاندون شده و بازسازی مفاصل را بهبود می‌بخشند.", wikiId: "collagen" }, "تیموکینون": { - term: "تیموکینون", - definition: "ماده موثره اصلی در روغن سیاه دانه (Nigella sativa) با خواص ضدالتهابی، ضدآلرژی و آنتی‌اکسیدان. با مهار مسیر NF-κB تولید سایتوکاین‌های پیش‌التهابی را کاهش می‌دهد.", - wikiId: "thymoquinone" + term: "تیموکینون (Thymoquinone)", + definition: "ماده موثره اصلی در روغن سیاه دانه با خواص ضدالتهابی، ضدآلرژی و آنتی‌اکسیدان بسیار قوی.", + wikiId: "black-cumin" }, "امگا ۳": { - term: "امگا ۳", - definition: "اسیدهای چرب ضروری شامل EPA و DHA که برای سلامت پوست، مو، قلب و عملکرد شناختی حیاتی هستند. EPA پیش‌ماده رزولوین‌های ضدالتهابی و DHA ۳۰٪ وزن خشک مغز را تشکیل می‌دهد.", - wikiId: "omega3" + term: "امگا ۳ (Omega-3)", + definition: "اسیدهای چرب ضروری شامل EPA و DHA که برای سلامت پوست، مو، قلب و عملکرد مغز حیاتی هستند.", + wikiId: "salmon-oil" }, "میکروسیلور": { term: "نقره میکروسیلور (Microsilver BG)", @@ -37,52 +37,97 @@ export const SCIENTIFIC_TERMS: Record = { }, "صدف لب‌سبز": { term: "صدف لب‌سبز (Green-lipped Mussel)", - definition: "صدف بومی نیوزلند حاوی گلوکوزامین‌گلیکان‌های طبیعی که نقش حیاتی در بازسازی غضروف و مفاصل دارند.", - wikiId: "joints" + definition: "صدف بومی نیوزلند حاوی گلوکوزامین‌گلیکان‌های طبیعی که نقش کلیدی در ساخت و بازسازی غضروف‌ها ایفا می‌کند.", + wikiId: "green-mussel" }, "نسبت Ca:P": { term: "نسبت کلسیم به فسفر (Ca:P Ratio)", - definition: "نسبت ایده‌آل کلسیم به فسفر در رژیم حیوانات ۱.۲:۱ تا ۱.۵:۱ است. عدم تعادل این نسبت منجر به مشکلات کلیوی و استخوانی می‌شود. پودر پوسته تخم مرغ کانینا با ۳۶٪ کلسیم و ۰.۱٪ فسفر بهترین تنظیم‌کننده این نسبت است.", - wikiId: "nutrition" + definition: "نسبت کلسیم به فسفر جهت حفظ سلامت استخوان‌ها و کلیه. پودر پوسته تخم مرغ بهترین تنظیم‌کننده این نسبت است.", + wikiId: "eggshell" }, "ویتامین D3": { term: "ویتامین D3 (کوله‌کلسیفرول)", - definition: "فرم فعال ویتامین D که جذب کلسیم از روده را تا ۳۰٪ افزایش می‌دهد. هشدار: مصرف همزمان با ویتامین D2 (ارگوکلسیفرول) مجاز نیست زیرا رقابت این دو جذب مؤثر را کاهش می‌دهد.", + definition: "فرمی فعال از ویتامین D که جذب کلسیم از روده را افزایش داده و به سلامت استخوان‌ها کمک می‌کند.", wikiId: "vitamins" }, "BARF": { - term: "رژیم BARF (Biologically Appropriate Raw Food)", - definition: "رژیم غذایی خام متناسب با زیست‌شناسی حیوان که شامل گوشت خام، استخوان، اندام‌ها و سبزیجات است. مکمل‌های کانینا مانند Eierschalenpulver، Rinderblut Pulver و Rinderfett Pulver برای تکمیل این رژیم طراحی شده‌اند.", - wikiId: "nutrition" + term: "رژیم غذایی خام (BARF)", + definition: "رژیم غذایی خام طبیعی شامل گوشت و استخوان که مکمل‌های پوسته تخم مرغ و پودر خون برای تکمیل آن طراحی شده‌اند.", + wikiId: "eggshell" }, "آغوز": { term: "آغوز (Colostrum)", - definition: "اولین شیر پستانداران حاوی IgG, IgA, IgM و لاکتوفرین که سد دفاعی روده را تقویت کرده و ایمنی غیرفعال منتقل می‌کند. محصول Immun-Booster کانینا حاوی ۲۰٪ پودر آغوز است.", - wikiId: "immune" + definition: "اولین شیر پستانداران پس از زایمان، غنی از ایمونوگلوبولین‌ها جهت فعال‌سازی فوری سیستم ایمنی نوزادان.", + wikiId: "colostrum" }, "ال-کارنیتین": { - term: "ال-کارنیتین", - definition: "ماده‌ای شبه‌آمینواسید که اسیدهای چرب زنجیره بلند را به داخل میتوکندری کاردیومیوسیت‌ها منتقل کرده و ATP تولید می‌کند. محصول Herz Vital کانینا حاوی ۳۰,۰۰۰mg/kg ال-کارنیتین است.", - wikiId: "heart" + term: "ال-کارنیتین (L-Carnitine)", + definition: "آمینو اسیدی که وظیفه انتقال اسیدهای چرب به درون میتوکندری جهت تولید انرژی و تقویت عملکرد قلب را دارد.", + wikiId: "l-carnitine" }, "زالزالک": { - term: "زالزالک (Crataegus oxyacantha)", - definition: "گیاه دارویی با اثر مهارکننده ACE طبیعی که جریان خون کرونر را بهبود بخشیده و فشار بر قلب را کاهش می‌دهد.", - wikiId: "heart" + term: "زالزالک (Hawthorn)", + definition: "عصاره گیاهی تقویت‌کننده عملکرد انقباضی عضله قلب و بهبودبخش گردش خون عروق کرونر.", + wikiId: "hawthorn" }, "بیوتین": { - term: "بیوتین (ویتامین H / B7)", - definition: "کوآنزیم کربوکسیلازهای مسئول سنتز اسیدهای چرب و گلوکونئوژنز. کمبود آن منجر به ریزش مو و شکنندگی پنجه می‌شود. قرص Biotin-Tabs کانینا با ۱,۰۰۰,۰۰۰ میکروگرم در کیلوگرم قوی‌ترین دوز موجود است.", - wikiId: "skin" + term: "بیوتین (Biotin / Vitamin H)", + definition: "کوآنزیم ضروری برای ساخت کراتین و جلوگیری از ریزش مو و تقویت ناخن‌ها و پنجه‌های حیوان.", + wikiId: "biotin" }, "هیدروکسی آپاتیت": { - term: "هیدروکسی آپاتیت", - definition: "کلسیم فسفات بلوری که ۹۰٪ بافت دندان و بخش عمده استخوان را تشکیل می‌دهد. با جذب مستقیم در توده استخوانی، استحکام اسکلت را تضمین می‌کند.", - wikiId: "joints" + term: "هیدروکسی آپاتیت (Hydroxyapatite)", + definition: "ترکیب کلسیم فسفات طبیعی که بخش عمده استخوان و دندان‌ها را تشکیل داده و موجب افزایش استحکام اسکلت می‌شود.", + wikiId: "green-mussel" }, "EPA/DHA": { term: "EPA و DHA", - definition: "ایکوزاپنتائنوئیک اسید (EPA) پیش‌ماده رزولوین‌های ضدالتهابی و دوکوزاهگزانوئیک اسید (DHA) ۳۰٪ وزن خشک مغز را تشکیل می‌دهد. نسبت ۳:۲ EPA:DHA در روغن سالمون کانینا بهینه‌سازی شده است.", - wikiId: "omega3" + definition: "اسیدهای چرب بلندزنجیره امگا ۳ که اثرات ضدالتهابی عمیق داشته و برای رشد سیستم عصبی و چشم‌ها حیاتی هستند.", + wikiId: "salmon-oil" + }, + "روغن ماهی سالمون": { + term: "روغن ماهی سالمون (Salmon Oil)", + definition: "منبع ۱۰۰٪ خالص و طبیعی اسیدهای چرب امگا ۳ که کیفیت پوست و مو را ارتقا داده و مفاصل را روان می‌کند.", + wikiId: "salmon-oil" + }, + "سیاه دانه": { + term: "سیاه دانه (Black Cumin)", + definition: "دانه گیاه سیاه دانه مصری با خواص قوی ضدآلرژی، تقویت‌کننده سیستم ایمنی و هضم بهتر غذا.", + wikiId: "black-cumin" + }, + "جلبک دریایی": { + term: "جلبک دریایی (Seaweed)", + definition: "جلبک قهوه‌ای غنی از اسیدهای آمینه و مواد معدنی کمیاب (به ویژه ید) جهت تقویت رنگدانه‌های پوشش، بینی و پنجه‌ها.", + wikiId: "seaweed" + }, + "پوسته تخم مرغ": { + term: "پودر پوسته تخم مرغ (Eggshell Powder)", + definition: "منبع کلسیم ارگانیک صد درصد خالص با جذب بسیار بالا و مناسب برای رژیم‌های بدون استخوان یا حساسیت‌های غذایی.", + wikiId: "eggshell" + }, + "پیت": { + term: "عصاره پیت (Peat Extract / Moor)", + definition: "عصاره طبیعی حاصل از تجزیه گیاهان در طول هزاران سال، غنی از اسیدهای هومیک برای تنظیم فلور گوارشی.", + wikiId: "peat-extract" + }, + "اسید دودکانوئیک": { + term: "اسید دودکانوئیک (Dodecanoic Acid)", + definition: "اسید چرب با منشأ گیاهی با اثر دفع‌کننده حشرات موذی نظیر کنه، کک و شپش از محیط زندگی پت.", + wikiId: "dodecanoic" + }, + "هیالورونات سدیم": { + term: "هیالورونات سدیم (Sodium Hyaluronate)", + definition: "روان‌کننده و رطوبت‌رسان طبیعی قرنیه چشم جهت شستشو و تسکین چشم‌های تحریک شده و گریان.", + wikiId: "hyaluronic" + }, + "روغن کالاندولا": { + term: "روغن کالاندولا و سنجد دریایی (Calendula & Sea Buckthorn)", + definition: "روغن‌های تسکین‌دهنده، ضدباکتری و التیام‌بخش پوست جهت بهبود سوزش، زخم‌های سطحی و خشکی پنجه‌ها.", + wikiId: "calendula-sea-buckthorn" + }, + "تورین": { + term: "تورین (Taurine)", + definition: "آمینو اسید بسیار ضروری برای گربه‌ها جهت جلوگیری از دژنراسیون شبکیه (نابینایی) و نارسایی قلبی.", + wikiId: "taurin" } }; diff --git a/frontend/application/lib/services/api.ts b/frontend/application/lib/services/api.ts index 3bb2d22..8383950 100644 --- a/frontend/application/lib/services/api.ts +++ b/frontend/application/lib/services/api.ts @@ -1,6 +1,6 @@ import axios from 'axios'; -const baseURL = typeof window !== 'undefined' ? '/api' : (process.env.NEXT_PUBLIC_API_URL || 'https://apicanina.parsaaghayi.ir/api'); +const baseURL = typeof window !== 'undefined' ? '/api' : (process.env.NEXT_PUBLIC_API_URL || (process.env.NODE_ENV === 'development' ? 'http://localhost:4001/api' : 'https://apicanina.parsaaghayi.ir/api')); const api = axios.create({ baseURL, diff --git a/frontend/application/lib/services/productService.ts b/frontend/application/lib/services/productService.ts index 7c8c6d0..fd475b3 100644 --- a/frontend/application/lib/services/productService.ts +++ b/frontend/application/lib/services/productService.ts @@ -55,7 +55,7 @@ export class ProductService { specialBadge: data.specialBadge, onSetOfAction: data.onSetOfAction, optimisticTemplate: data.optimisticTemplate, - feedingAdvice: data.feedingAdvice, + feedingAdvice: data.dosageLogic || data.feedingAdvice || '', image: data.imageUrl?.startsWith('http') ? data.imageUrl : data.imageUrl ? `/api${data.imageUrl}` : data.image, main_ingredients: data.ingredientList?.map((i: any) => i.ingredient) || data.ingredients?.split(/[،,-]/).map((s: string) => s.trim()).filter(Boolean) || [],