Vue Components
يحتوي Chamilo على مجموعة كبيرة من مكونات Vue منظمة حسب منطقة الميزة في assets/vue/components/.
المكونات الأساسية
عائلة Base* في assets/vue/components/basecomponents/ تغلف البدائيات PrimeVue مع الإعدادات الافتراضية الخاصة بـ Chamilo (تخطيط FloatLabel، أيقونات MDI عبر chamiloIconToClass، رسائل التحقق المتسقة، تحجيم Tailwind). استخدم دائمًا مكون Base* قبل استيراد البدائي PrimeVue الأساسي — هذا هو الطريقة التي يبقى بها الواجهة متسقة عبر SPA وكيف يمكن نشر التغييرات في التصميم من مكان واحد.
المكونات غير مسجلة عالميًا (البدائي PrimeVue الوحيد المسجل عالميًا هو Column، المستخدم داخل BaseTable). قم باستيراد كل واحد صراحةً:
import BaseButton from "@/components/basecomponents/BaseButton.vue"
import BaseDialog from "@/components/basecomponents/BaseDialog.vue"مدخلات النماذج
معظمها يقبل القيمة عبر v-model، ويعرض خصائص id + label للوصولية/ربط التسمية العائمة، ويعرض التحقق من الصحة عبر زوج isInvalid / errorText (أو messageText).
BaseInputText.vue
InputText + FloatLabel
مدخل نص سطر واحد. يتحول إلى تسمية ثابتة لمدخلات date/time/datetime-local (حيث تتداخل التسمية العائمة مع النص التوضيحي الأصلي).
BaseInputTextWithVuelidate.vue
BaseInputText
محول Vuelidate رفيع: ينقل $error إلى isInvalid ويعرض $errors[].$message في فتحة errors. اقرنه بكائن حقل Vuelidate.
BaseTextArea.vue
Textarea + FloatLabel
مدخل نص متعدد الأسطر.
BaseTextAreaWithVuelidate.vue
BaseTextArea
نفس نمط محول Vuelidate كما في BaseInputTextWithVuelidate.
BaseInputNumber.vue
InputNumber
مدخل رقمي مع min / max / step وأزرار الدوران.
BaseInputTags.vue
(مخصص)
رقائق علامات نص حر؛ تُضاف العلامات عند الضغط على إدخال/فاصلة وتُزال عند الضغط على backspace.
BaseInputGroup.vue
InputGroup + BaseButton
مدخل نص مقترن بزر عمل (نمط البحث).
BaseCheckbox.vue
Checkbox
مربع اختيار ثنائي أو مقيد بالقيمة مع تسمية.
BaseRadioButtons.vue
RadioButton
مجموعة أزرار راديو مدفوعة بمصفوفة options: [{label, value}].
BaseToggleButton.vue
BaseButton
زر بحالتين (تسميات وأيقونات مفتوح/مغلق) مقيد عبر v-model.
BaseCalendar.vue
DatePicker + FloatLabel
منتقي تاريخ / تاريخ-وقت. يحترم platform.timepicker_increment وإعدادات المستخدم عبر calendarLocales.
BaseColorPicker.vue
native <input type="color"> + InputText
منتقي ألوان مع خيار نص hex احتياطي؛ يستخدم colorjs.io للتحقق من إدخال hex يدوي.
BaseRating.vue
Rating
مدخل تقييم بالنجوم.
BaseFileUpload.vue
native <input type="file"> + BaseButton
منتقي ملف واحد يُطلق زر نمط المرفق.
BaseFileUploadMultiple.vue
native <input type="file" multiple> + BaseButton
النسخة المتعددة للملفات من BaseFileUpload.
BaseUploader.vue
Uppy Dashboard
محمّل Uppy كامل (كاميرا ويب، صوت، محرر صور، رفع XHR) مع اللغات المرتبطة بـ appLocale الحالي. استخدم هذا للرفع الغني مع التقدم؛ استخدم BaseFileUpload* للمرفقات البسيطة.
التحديد والإكمال التلقائي
BaseSelect.vue
Dropdown + FloatLabel
قائمة منسدلة للاختيار الواحد مع زر مسح اختياري.
BaseMultiSelect.vue
MultiSelect + FloatLabel
قائمة منسدلة للاختيار المتعدد تعرض العناصر المحددة كشرائح.
BaseSearchSelect.vue
Dropdown with filter
قائمة منسدلة للاختيار الواحد مع مربع بحث مدمج، وتمرير افتراضي اختياري، وقالب خيار من سطرين (label + sublabel).
BaseAutocomplete.vue
AutoComplete
إكمال تلقائي غير متزامن (الحد الأدنى 3 أحرف). يدعم الاختيار الواحد أو المتعدد وفتحة chip لتخصيص الشرائح.
BaseUserFinder.vue
BaseTable + userService
جدول بحث عن المستخدمين مع ترقيم الصفحات وتحديد الصفوف. استخدمه عندما يحتاج ميزة إلى أداة اختيار مستخدمين على طراز المسؤول.
الأزرار والإجراءات
BaseButton.vue
Button (PrimeVue)
زر Chamilo القياسي. يحل الأيقونات عبر chamiloIconToClass، يُطبّع type إلى severity/variant الخاص بـ PrimeVue، يعرض BaseAppLink داخليًا عند إعطاء route أو toUrl (لذا يتعامل نفس المكون مع حالات router-link و anchor والزر العادي). القيم المقبولة لـ type مدرجة في validators.js → buttonTypeValidator.
BaseAdvancedSettingsButton.vue
BaseButton
زر كشف يُقلب لوحة "الإعدادات المتقدمة" الموضعية عبر v-model.
BaseToolbar.vue
Toolbar
شريط أدوات إجراءات مع فتحات start / end (أو فتحة افتراضية واحدة). showTopBorder اختياري لتنسيق فاصل.
العرض والتعليمات البرمجية
BaseTable.vue
DataTable (PrimeVue)
جدول بيانات Chamilo القياسي. يدعم وضع الخادم (lazy)، وفرز متعدد الأعمدة، ومرشح عام، وتحديد الصفوف، وترقيم الصفحات. مرر الأعمدة كأطفال <Column> (مسجلة عالميًا).
BaseCard.vue
Card
غلاف بطاقة يقوم بتوجيه فتحات header، title، subtitle، footer، والافتراضية (المحتوى).
BaseChart.vue
Chart
إعداد مسبق لرسم بياني دائري. مرر كائن data متوافق مع Chart.js.
BaseChip.vue
Chip
رقاقة مرسومة من كائن {value, labelField, imageField}، مع زر إزالة اختياري.
BaseTag.vue
Tag
وسم تسمية ملون. يعيّن warning الخاص بـ Chamilo إلى warn الخاص بـ PrimeVue.
BaseAvatarList.vue
Avatar + BaseUserAvatar
صف صور رمزية مع عداد فائض (مثل "+3")؛ مدفوع بـ useAvatarList.
BaseUserAvatar.vue
Avatar
صورة رمزية للمستخدم مع بديل صورة، وحالات تحميل، وتسمية يمكن الوصول إليها.
BaseIcon.vue
<i class="mdi …">
مُرَسِّم أيقونات Chamilo. يضيف شارة اختيارية (نص أو أيقونة)، وتلميح أداة، ومعدِّل حجم. مرر دائمًا اسمًا دلاليًا لـ Chamilo (مثل "edit")، وليس فئة MDI خام.
BaseIconField.vue
IconField + InputText
مدخل بحث مع أيقونة مكبر عدسة رئيسية.
BaseDivider.vue
Divider
فاصل أفقي أو عمودي، مع عنوان اختياري ومحاذاة.
التنقل والقوائم
BaseMenu.vue
Menu (popup)
قائمة منبثقة تفهم مسارات الراوتر داخل عناصر model[].
BaseDropdownMenu.vue
(custom)
مشغِّل قائمة منسدلة خفيف الوزن مع تنسيق فتح واحد (فتح واحد يغلق الآخرين).
BaseContextMenu.vue
(custom)
قائمة سياق نقر يمين / موقعة، يتم التحكم فيها بواسطة visible + position.
BaseSidebarPanelMenu.vue
PanelMenu
قائمة تنقل على شكل أكورديون مستخدمة في الأشرطة الجانبية؛ تتبع تلقائيًا مفاتيح الموسعة من النموذج.
BaseRouteTabs.vue
صف BaseAppLink
شريط علامات تبويب حيث تكون كل علامة تبويب رابط راوتر. يتم تمييز العلامة النشطة تلقائيًا بناءً على المسار الحالي.
BaseAppLink.vue
RouterLink or <a>
رابط ذكي: يرسم <a> عند تعيين url (خارجي/قديم)، وإلا <RouterLink> لـ Vue Router. استخدمه بدلاً من أي بدائي ليبقى الربط الداخلي/الخارجي موحدًا.
الحوارات
BaseDialog هي الأساس؛ تتكون المكونات الأخرى فوقها لتدفقات التأكيد/الإلغاء والحذف الشائعة.
BaseDialog.vue
Dialog
حوار modal مع رأس بعنوان (أيقونة headerIcon اختيارية) وجسم/تذييل مفصول. حالة الفتح هي defineModel("isVisible").
BaseDialogConfirmCancel.vue
BaseDialog
حوار تأكيد/إلغاء مع زرين. نوع التأكيد type (شدة) وقابل للتكوين والأيقونة؛ يصدر confirmClicked / cancelClicked.
BaseDialogDelete.vue
BaseDialogConfirmCancel
حوار جاهز "هل أنت متأكد من رغبتك في حذف هذا العنصر؟" مع زر تأكيد بأسلوب خطر.
المحرر والمحتوى الغني
BaseTinyEditor.vue
TinyMCE (عبر components/Editor في المشروع)
محرر نص غني مع FloatLabel، تتبع حالة التركيز/الفراغ، وتكامل مع سياق المقرر الحالي (cidReq). استخدمه لأي حقل HTML يُنشئه المستخدم.
المساعدات
ChamiloIcons.js
يربط أسماء الأيقونات الدلالية (edit، delete، eye-on، courses، …) بفئات CSS MDI. ~127 مدخل. تصفحها في /admin/list-icons على نسخة تعمل.
validators.js
مصادقي خصائص مشتركة: iconValidator (يجب أن يكون اسم أيقونة Chamilo معروف)، sizeValidator (normal / small / large)، buttonTypeValidator (أنواع BaseButton المسموحة). استوردها عند تعريف مكونات Base* جديدة تُعكس هذه الاتفاقيات.
الاتفاقيات عبر مكونات Base
v-model عبر
defineModel()— القيمة (وغالبًاisVisible،filters،selectedItems) مُعروضة كنماذج؛ مررها بـv-model[:name]بدلاً من:prop+@update:prop.تسميات عائمة — معظم حقول النموذج تغلف الإدخال في PrimeVue
FloatLabel variant="on". قدمlabel(النص المعروض) وid(يُستخدم لربط<label for>).رسائل التحقق — الحقول تُعرض
isInvalidورسالة صغيرة أسفل الإدخال (errorText،messageText، أوsmallTextحسب المكون). توجد متغيرات مدركة لـ Vuelidate للأكثر شيوعًا.الأيقونات — مرر أسماء Chamilo الدلالية، لا فئات MDI الخام. تقوم المكونات بتحليلها عبر
chamiloIconToClass.الأحجام —
size="normal" | "small" | "large"هي خاصية التحجيم التقليدية (انظرsizeValidator).التكوين بدلاً من التكرار —
BaseDialogDeleteيغلفBaseDialogConfirmCancel، الذي يغلفBaseDialog؛BaseToggleButtonوBaseAdvancedSettingsButtonيغلفانBaseButton. عند الحاجة إلى متغير متكرر لمكون موجود، فضّل تكوينBase*جديد فوقه بدلاً من إعادة تنفيذه في مجلد ميزة.
مكونات التخطيط
موجودة في components/layout/:
DashboardLayout.vue
التخطيط الرئيسي: شريط علوي + شريط جانبي + منطقة المحتوى
Sidebar.vue
لوحة التنقل اليسرى (قابلة للطي)
TopbarLoggedIn.vue
شريط علوي مع الشعار، صندوق الوارد، الصورة الشخصية
مكونات مناطق الميزات
course/
بطاقات الدورات، فلاتر الكتالوج، نماذج الدورات
قائمة الدورات وإدارتها
session/
بطاقات الجلسات، كتالوج
قائمة الجلسات
assignments/
قوائم التقديمات، نماذج التقييم، النماذج
سير عمل المهام
chat/
DockedChat، رسائل الدردشة
الدردشة في الوقت الفعلي والمدرس الذكي الاصطناعي
filemanager/
CourseDocuments، PersonalFiles
متصفح الملفات وإدارتها
installer/
Step1-Step7، EmailSettings
معالج التثبيت
social/
GroupInfoCard، منشورات الشبكة الاجتماعية
ميزات الشبكة الاجتماعية
attendance/
AttendanceTable
تتبع الحضور
usergroup/
GroupMembers
إدارة مجموعات المستخدمين
نظام الأيقونات
تستخدم الأيقونات Material Design Icons (MDI) كمكتبة الأيقونات الوحيدة: <i class="mdi mdi-pencil"></i>
يوفر ملف ChamiloIcons.js تعيينًا دلاليًا:
يستخدم المكونات BaseIcon أو يشير إلى chamiloIconToClass لعرض الأيقونات بشكل متسق.
يمكن العثور على مرجع قابل للتصفح لجميع الأيقونات المتاحة في المنصة عند /admin/list-icons في أي نسخة Chamilo تعمل.
أنماط المكونات
Composition API — يستخدم المكونات بنية
<script setup>في Vue 3PrimeVue integration — استخدام مكثف لمكونات PrimeVue (Button، DataTable، Dialog، Menu، إلخ)
Axios for API calls — طلبات HTTP إلى واجهة برمجة التطبيقات الخلفية
Vue I18n — جميع النصوص المواجهة للمستخدم تستخدم مفاتيح الترجمة
آخر تحديث
هل كان هذا مفيدا؟