ساختار پروژه
ساختار پروژه بر پایه یک قاعده است: تولیدشدهها از دستنویسها جدا باشند. هر چیزی که با ابزار ساخته میشود در بالای فایلش هم نوشته شده که دستی ویرایش نشود.
novaadmin/
├── index.html صفحه محصول (لندینگ)
├── vite.config.js ورودیها، alias، chunkها و افزونههای پروژه
├── package.json اسکریپتها و وابستگیهای نسخهقفلشده
├── public/ داراییهای کپیشده بدون پردازش
│ ├── assets/{logo,logo-mark,favicon}.svg
│ ├── assets/img/{avatars,products,brands}/
│ ├── site.webmanifest
│ ├── robots.txt تولیدشده توسط gen-nav
│ └── sitemap.xml تولیدشده توسط gen-nav
├── src/
│ ├── pages/** ۲۰۶ صفحه تولیدشده (پوسته + جاینگهدار محتوا)
│ ├── partials/ قطعههای مشترک
│ │ ├── head.html متا، فونت، لینک استایل
│ │ ├── header.html هدر برنامه (جستجو، اعلان، پروفایل)
│ │ ├── overlays.html پالت فرمان، میانبرها، میزبان پیامها
│ │ ├── customizer.html کشوی شخصیسازی ظاهر
│ │ ├── footer.html فوتر
│ │ ├── scripts.html ورود JS
│ │ ├── docs/*.html بدنه مستندات (تولیدشده از docs/ با gen-docs)
│ │ └── pages/<مسیر>.html بازنویسی دستی بدنه هر صفحه (اختیاری)
│ ├── scss/
│ │ ├── main.scss ترتیب دقیق importها
│ │ ├── base/ توکنها، پالتها، تمها، ریست، فونت، پل بوتاسترپ
│ │ ├── layout/ پوسته، سایدبار، هدر، سرصفحه، مستندات، احراز هویت
│ │ ├── components/ ۲۸ فایل کامپوننت (دکمه، فرم، کارت، جدول، کانبان…)
│ │ ├── pages/ ترکیبهای صفحهای (لندینگ، فاکتور، داشبورد)
│ │ └── utilities/ کلاسهای کمکی که آخر میآیند
│ ├── js/
│ │ ├── main.js راهانداز: تم → چیدمان → پوسته → مسیر صفحه
│ │ ├── core/ ۲۰ ماژول هسته (بدون وابستگی به صفحه خاص)
│ │ └── pages/ کنترلکننده هر بخش، بارگذاری تنبل
│ ├── services/ لایه داده با قرارداد REST
│ ├── data/ داده نمونه واقعگرایانه
│ ├── locales/ دیکشنری fa/en/ar + دادههای تولیدشده
│ └── config/config.js تنظیمات برند، پیشفرضها، ارز، منطقه زمانی
├── docs/ ۲۳ منبع مارکداون مستندات (+ ترجمهها در en/ و ar/)
└── tools/
├── manifest.mjs منبع یکتای ناوبری و فهرست صفحهها
├── build-pages.mjs تولید صفحهها + دادههای محلی
├── gen-assets.mjs تولید SVGهای لوگو، آواتار، محصول، برند
├── gen-nav.mjs navigation.js + sitemap + robots
├── gen-docs.mjs مارکداون → بدنه مستندات
├── flatten-dist.mjs مرتبسازی خروجی نهایی
├── qa-links.mjs کنترل کیفیت خروجی
├── smoke.mjs اجرای کنترلکنندهها در DOM شبیهسازیشده
├── package.mjs ساخت بسته نهایی
└── nova-plugin.mjs افزونه Vite (include، توکن، مسیر تمیز)قواعد مهم
src/pages/**را ویرایش نکنید. در هر ساخت بازنویسی میشود. برای تغییر بدنه یک صفحه، فایل همنام را درsrc/partials/pages/بسازید.src/locales/generated.jsوsrc/data/navigation.jsتولیدشدهاند. منبع آنهاtools/manifest.mjsوdocs/است.- داراییها در
public/بدون پردازش کپی میشوند. اگر میخواهید تصویری را Vite بهینه کند، آن را ازsrc/import کنید. - هر چه در
src/باشد به مرورگر میرود؛ فایل ابزار یا مستندات را آنجا نگذارید.
نقشه ماژولهای هسته
| ماژول | مسئولیت |
|---|---|
dom.js | انتخابگرها، رندر، رویداد، ابزار کلاس |
theme.js | تم، پالت، چیدمان، تراکم، اندازه فونت، سبک سایدبار |
layout.js | پوسته، سایدبار، حالت موبایل، چیدمان دو ستونی |
chrome.js | پالت فرمان، میانبرها، اعلانها، ویرایشگر ابزارک، شخصیساز |
datatable.js | جدول داده کامل (جستجو، فیلتر، مرتبسازی، ستون، انتخاب، خروجی) |
charts.js | پوسته واحد ApexCharts برای حالت روشن/تاریک |
calendar.js / jalali.js | تقویم ماه/هفته/روز/فهرست و تبدیل تاریخ شمسی |
kanban.js | برد کشیدنورهاکردن با SortableJS و ذخیره ترتیب |
i18n.js | زبان فعال، data-i18n، جهت و بازآرایی متون |
numbers.js | ارقام فارسی/عربی/لاتین، قالب ارز، اعداد فشرده |
toast.js / modal.js | پیامها در چهار موقعیت و گفتگوهای تأیید |
form.js / ui.js | اعتبارسنجی، حالتهای فرم، تبها، آکاردئون، چاپ |
نکته: در
main.js ترتیب راهاندازی مهم است: i18n → theme → layout → dropdowns → chrome → forms → ui → route()اگر ماژولی به DOM تولیدشده توسط کنترلکننده نیاز دارد، باید بعد از route() صدا زده شود.