import { useState, useEffect } from 'react'; import { Search, Plus, Edit2, Trash2, BookOpen, XCircle } from 'lucide-react'; import api from '../services/api'; import Spinner from '../components/ui/Spinner'; import Pagination from '../components/ui/Pagination'; export default function Wiki() { const [terms, setTerms] = useState([]); const [isLoading, setIsLoading] = useState(true); const [search, setSearch] = useState(''); const [page, setPage] = useState(1); const [totalPages, setTotalPages] = useState(1); const limit = 10; const [isModalOpen, setIsModalOpen] = useState(false); const [editingTerm, setEditingTerm] = useState(null); const [formData, setFormData] = useState({ key: '', term: '', definition: '', wikiId: 'general', metaTitle: '', metaDescription: '', keywords: '' }); const fetchTerms = async () => { try { setIsLoading(true); const res = await api.get('/admin/wiki', { params: { page, limit, search } }); if (res.data?.data) { setTerms(res.data.data); setTotalPages(res.data.meta?.lastPage || 1); } } catch (err) { console.error(err); } finally { setIsLoading(false); } }; useEffect(() => { const timer = setTimeout(() => { fetchTerms(); }, 500); return () => clearTimeout(timer); }, [search, page]); const handleSave = async (e: React.FormEvent) => { e.preventDefault(); try { if (editingTerm) { await api.put(`/admin/wiki/${editingTerm.key}`, formData); } else { await api.post('/admin/wiki', formData); } setIsModalOpen(false); fetchTerms(); } catch (error) { console.error('Save failed', error); alert('خطا در ذخیره اصطلاح علمی. ممکن است کلید تکراری باشد.'); } }; const handleDelete = async (key: string) => { if (!window.confirm('آیا از حذف این مورد مطمئن هستید؟')) return; try { await api.delete(`/admin/wiki/${key}`); fetchTerms(); } catch (error) { console.error('Delete failed', error); } }; const openModal = (term: any = null) => { if (term) { setEditingTerm(term); setFormData({ key: term.key, term: term.term, definition: term.definition, wikiId: term.wikiId, metaTitle: term.metaTitle || '', metaDescription: term.metaDescription || '', keywords: term.keywords || '' }); } else { setEditingTerm(null); setFormData({ key: '', term: '', definition: '', wikiId: 'general', metaTitle: '', metaDescription: '', keywords: '' }); } setIsModalOpen(true); }; return (

دانشنامه کانینا (Wiki)

مدیریت اصطلاحات علمی، مواد تشکیل‌دهنده و خواص درمانی

{ setSearch(e.target.value); setPage(1); }} className="w-full pl-4 pr-12 py-3 rounded-xl border border-gray-200 focus:border-purple-500 outline-none transition-all" />
{isLoading ? ( ) : terms.length === 0 ? ( ) : ( terms.map((t) => ( )) )}
شناسه (Key) اصطلاح علمی محتوا (چکیده) عملیات
هیچ رکوردی یافت نشد
{t.key} {t.term} {t.definition}
{!isLoading && totalPages > 1 && (
)}
{isModalOpen && (

{editingTerm ? 'ویرایش دانشنامه' : 'افزودن مفهوم جدید'}

setFormData({ ...formData, key: e.target.value })} className="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-purple-500 outline-none font-mono text-sm disabled:bg-gray-100" />
setFormData({ ...formData, term: e.target.value })} className="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-purple-500 outline-none" />

تنظیمات سئو (SEO)

setFormData({ ...formData, metaTitle: e.target.value })} className="w-full px-3 py-2 rounded-lg border border-gray-200 focus:border-purple-500 outline-none text-sm" />
setFormData({ ...formData, keywords: e.target.value })} className="w-full px-3 py-2 rounded-lg border border-gray-200 focus:border-purple-500 outline-none text-sm" />
)}
); }