# منتقي التاريخ DatePicker

منتقي التاريخ. خمسة أنماط: date / month / year / datetime / range: يمكن التنقّل داخل اللوحة بين المستويات (يوم → شهر → سنة)، ويُلحق نمط datetime عمودًا للوقت أسفل التقويم (ساعة / دقيقة / ثانية، بالتمرير أو النقر، وتُدمج مع التاريخ عند التأكيد)، ونمط range اختيار على مرحلتين (النقرة الأولى تحدّد نقطة البداية وتُبرزها، والنقرة الثانية تطبّع الفترة وتُبرز الأيام المتوسطة)؛ تُركَّب اللوحة على body، ويتحكم format في صيغة العرض.

اختيار التاريخ
<template>
  <div class="demo-col" style="gap: 16px">
    <div class="demo-row" style="gap: 12px; flex-wrap: wrap">
      <LhDatePicker v-model="date" placeholder="اختر تاريخًا" format="yyyy-MM-dd" clearable />
      <LhDatePicker v-model="month" mode="month" placeholder="اختر شهرًا" size="small" />
      <LhDatePicker v-model="year" mode="year" placeholder="اختر سنة" size="large" />
      <LhDatePicker v-model="datetime" mode="datetime" placeholder="اختر التاريخ والوقت" disabled />
      <LhDatePicker v-model="date" placeholder="للقراءة فقط" readonly />
    </div>
    <LhDatePicker
      v-model="range"
      mode="range"
      range-separator="إلى"
      placeholder="اختر فترة التاريخ (نقرتان)"
      :cell-class-name="cellClass"
      popper-class="demo-popper"
    />
    <p class="demo-note">
      التاريخ: {{ fmt(date) }} | الشهر: {{ fmt(month) }} | السنة: {{ fmt(year) }} | التاريخ والوقت: {{ fmt(datetime) }}
    </p>
    <p class="demo-note">فترة التاريخ (rangeSeparator="إلى"، عطلات نهاية الأسبوع بالأحمر): {{ fmtRange(range) }}</p>
  </div>
</template>

<script>
export default {
  data: () => ({
    date: new Date(2026, 9, 3),
    month: new Date(2026, 9, 1),
    year: new Date(2026, 0, 1),
    datetime: null,
    range: null,
  }),
  methods: {
    fmt(v) {
      return v instanceof Date ? v.toLocaleString('zh-CN', { hour12: false }) : 'غير محدد'
    },
    fmtRange(v) {
      if (!Array.isArray(v) || v.length !== 2) return 'غير محدد'
      const [a, b] = v
      const s = (d) => (d instanceof Date ? d.toLocaleString('zh-CN', { hour12: false }) : 'غير محدد')
      return `${s(a)} ~ ${s(b)}`
    },
    cellClass(date) {
      return date.getDay() === 0 || date.getDay() === 6 ? 'demo-cell-weekend' : ''
    },
  },
}
</script>

# Props

خاصية الوصف النوع الافتراضي
v-model التحديد الحالي Date \| [Date, Date] \| null —
mode النمط: تاريخ / شهر / سنة / تاريخ ووقت / فترة تاريخ 'date' \| 'month' \| 'year' \| 'datetime' \| 'range' 'date'
size الحجم 'small' \| 'medium' \| 'large' 'medium'
disabled / clearable / readonly معطّل / قابل للتفريغ / للقراءة فقط boolean false / true / true
placeholder نص عنصر النائب string حزمة اللغة
format صيغة العرض (yyyy-MM-dd، yyyy-MM وغيرها) string 'yyyy-MM-dd'
rangeSeparator نص الفاصل في نمط فترة التاريخ string '~'
cellClassName اسم فئة مخصص للخلية (date: Date) => string —
popperClass اسم فئة إضافي للطبقة المنبثقة string —
teleportTarget هدف تركيب الطبقة المنبثقة string \| HTMLElement 'body'
sx خصائص التخطيط السريع sx — —

# Events

input (v-model)، change (value)

# إمكانية الوصول

المشغّل role="combobox" + aria-expanded، واللوحة role="grid"؛ عمود الوقت في نمط datetime يأخذ role="spinbutton" مع aria-valuenow/min/max؛ وعند وضعها داخل LhFormItem وفشل التحقق يُضبط aria-invalid تلقائيًا.

Copyright © 2024-2026 FengMo WenXue