Task #714: rooms management submenu + rooms dashboard
- protocol.tsx: added collapsible "إدارة القاعات" nav group (giftsGroup pattern) containing لوحة القاعات (roomsDashboard, new), القاعات (rooms), حجز القاعات (bookings), إعدادات الحجوزات (bookingSettings, canManageRooms only). - Deep-link slugs: /protocol/rooms-dashboard, /protocol/booking-settings. - SlotsAdminSection moved from rooms tab to booking-settings tab; non-manager deep-link shows no-access empty state. - New RoomsDashboardView (recharts): KPI cards, next-booking countdown, 14/30-day area chart, by-room bar chart, by-status pie. - API: new GET /api/protocol/rooms-stats (requireProtocolAccess), Riyadh-tz day boundaries, 30-day zero-filled daily series, byRoom/byStatus, nextBooking. - i18n keys ar/en (tabs + protocol.roomsDash.* with Arabic plurals). - Tests: artifacts/api-server/tests/protocol-rooms-stats.test.mjs (2 pass). - Architect review passed; typechecks clean (pre-existing errors in executive-meetings.ts/push.ts untouched).
This commit is contained in:
@@ -1667,6 +1667,9 @@
|
||||
"confirmDelete": "لا يمكن التراجع عن هذا الإجراء.",
|
||||
"tabs": {
|
||||
"dashboard": "لوحة المعلومات",
|
||||
"roomsGroup": "إدارة القاعات",
|
||||
"roomsDashboard": "لوحة القاعات",
|
||||
"bookingSettings": "إعدادات الحجوزات",
|
||||
"bookings": "حجز القاعات",
|
||||
"external": "اجتماعات خارجية",
|
||||
"giftsGroup": "الهدايا",
|
||||
@@ -1709,6 +1712,38 @@
|
||||
"roomsAvailableNow": "القاعات المتاحة الآن",
|
||||
"giftsIssuedThisMonth": "الدروع المصروفة هذا الشهر"
|
||||
},
|
||||
"roomsDash": {
|
||||
"title": "لوحة بيانات القاعات",
|
||||
"roomsCount": "عدد القاعات",
|
||||
"roomsBreakdown": "{{active}} نشطة · {{inactive}} معطلة",
|
||||
"todayBookings": "حجوزات اليوم",
|
||||
"weekBookings": "حجوزات الأسبوع",
|
||||
"pendingBookings": "طلبات معلّقة",
|
||||
"nextBooking": "أقرب حجز قادم",
|
||||
"noUpcoming": "لا توجد حجوزات قادمة",
|
||||
"startingNow": "يبدأ الآن",
|
||||
"inDays_zero": "بعد أقل من يوم",
|
||||
"inDays_one": "بعد يوم واحد",
|
||||
"inDays_two": "بعد يومين",
|
||||
"inDays_few": "بعد {{count}} أيام",
|
||||
"inDays_many": "بعد {{count}} يوماً",
|
||||
"inDays_other": "بعد {{count}} يوم",
|
||||
"inHoursMinutes": "بعد {{hours}} ساعة و{{minutes}} دقيقة",
|
||||
"inMinutes_zero": "بعد أقل من دقيقة",
|
||||
"inMinutes_one": "بعد دقيقة واحدة",
|
||||
"inMinutes_two": "بعد دقيقتين",
|
||||
"inMinutes_few": "بعد {{count}} دقائق",
|
||||
"inMinutes_many": "بعد {{count}} دقيقة",
|
||||
"inMinutes_other": "بعد {{count}} دقيقة",
|
||||
"bookingsOverTime": "الحجوزات عبر الأيام",
|
||||
"lastNDays": "آخر {{count}} يوماً",
|
||||
"bookings": "حجوزات",
|
||||
"byRoom": "التوزيع حسب القاعة",
|
||||
"byStatus": "التوزيع حسب الحالة",
|
||||
"noData": "لا توجد بيانات بعد",
|
||||
"noAccess": "ليس لديك صلاحية للوصول إلى هذه الصفحة.",
|
||||
"windowHint": "تشمل الرسوم البيانية حجوزات آخر 30 يوماً بتوقيت الرياض."
|
||||
},
|
||||
"bookings": {
|
||||
"new": "حجز جديد",
|
||||
"edit": "تعديل الحجز",
|
||||
|
||||
Reference in New Issue
Block a user