# تقويم Calendar
عرض تقويمي. يدعم ثلاثة أنماط اختيار: فردي / فترة / متعدد، ويقيّد range حدود التواريخ القابلة للاختيار؛ وضع panel يُعرض دائمًا، ووضع input يُطوى في حقل إدخال ينفتح بالنقر (تُركَّب اللوحة على body).
تقويم
<template>
<div class="demo-col" style="max-width: none">
<div class="demo-row" style="align-items: flex-start; flex-wrap: nowrap">
<LhCalendar v-model="single" selection="single" />
<LhCalendar v-model="span" selection="range" mode="input" placeholder="اختر فترة" />
</div>
<p class="demo-note">اختيار فردي: {{ fmt(single) }} | فترة: {{ fmtArr(span) }}</p>
<div class="demo-row" style="align-items: flex-start; flex-wrap: nowrap; margin-top: 16px">
<LhCalendar v-model="multi" selection="multiple" :panels="2" :close-on-select="false" />
<LhCalendar v-model="strict" selection="range" mode="panel" />
</div>
<p class="demo-note">تحديد متعدد (لوحتان مع panels=2، لا يُطوى تلقائيًا مع closeOnSelect=false): {{ fmtArr(multi) }}</p>
<p class="demo-note">وضع اللوحة مع range (mode="panel"): {{ fmtArr(strict) }}</p>
<div class="demo-row" style="align-items: flex-start; flex-wrap: nowrap; margin-top: 16px">
<LhCalendar v-model="clamped" selection="single" :range="bounds" />
</div>
<p class="demo-note">تقييد النطاق القابل للاختيار عبر range (فقط 2026-10-01 ~ 2026-10-15): {{ fmt(clamped) }}</p>
</div>
</template>
<script>
export default {
data: () => ({
single: new Date(2026, 9, 3),
span: [],
multi: [],
strict: [],
clamped: new Date(2026, 9, 5),
bounds: [new Date(2026, 9, 1), new Date(2026, 9, 15)],
}),
methods: {
fmt(v) {
return v instanceof Date ? v.toLocaleDateString('zh-CN') : 'غير محدد'
},
fmtArr(v) {
if (!Array.isArray(v) || v.length === 0) return 'غير محدد'
return v.map((d) => d.toLocaleDateString('zh-CN')).join(' ~ ')
},
},
}
</script>
# Props
| خاصية | الوصف | النوع | الافتراضي |
|---|---|---|---|
| v-model | التحديد الحالي؛ الفردي يكون Date، والفترة والمتعدد Date[] | Date \| Date[] | — |
| selection | نمط التحديد | 'single' \| 'range' \| 'multiple' | 'single' |
| range | نطاق التواريخ القابلة للاختيار [start, end]، وما خارجه معطّل | [Date, Date] | — |
| mode | شكل العرض: panel لوحة دائمة / input حقل إدخال مطوي | 'panel' \| 'input' | 'panel' |
| panels | عدد ألواح الأشهر المعروضة معًا (مرتبة بواسطة flex مع الالتفاف) | number | 1 |
| placeholder | نص عنصر النائب في وضع input | string | حزمة اللغة |
| closeOnSelect | هل تُطوى اللوحة تلقائيًا بعد التحديد في وضع input | boolean | true |
| sx | خصائص التخطيط السريع sx | — | — |
# Events
input (v-model)، change (value)، select (date)
# Slots
| فتحة | الوصف |
|---|---|
| header | رأس لوحة الشهر، معاملات النطاق { year, month } (يُعرض افتراضيًا بالتنسيق «YYYY / M») |
| cell | خلية التاريخ، معامل النطاق { date } (يُعرض افتراضيًا رقم اليوم) |
# إمكانية الوصول
اللوحة بـ role="grid"، وصف الأيام بـ role="row"، وخلايا التاريخ بـ role="gridcell"؛
التواريخ المعطّلة تأخذ aria-disabled، ومشغّل وضع input يدعم التوسيع بلوحة المفاتيح والتنقل بمفاتيح الأسهم.
Copyright © 2024-2026 FengMo WenXue