Skip to content
API 风格:

اختيار شجري TreeSelect ​

مزيج من مُشغِّل منسدل ولوحة Tree. يُعيد التحديد الفردي string، بينما يُعيد التحديد المتعدد (بخانات الاختيار) string[].

الاستخدام الأساسي ​

تحديد فردي
vue
<script setup>
import { ref } from 'vue'
const treeValue = ref(undefined)
const treeData = [
  { key: 'a', label: 'الواجهات', children: [
    { key: 'a-1', label: 'Vue' },
    { key: 'a-2', label: 'React' },
  ] },
  { key: 'b', label: 'الخوادم' },
]
</script>

<template>
  <LhTreeSelect :data="treeData" v-model="treeValue" />
</template>
vue
<script>
export default {
  data() {
    return {
      treeValue: undefined,
      treeData: [
        { key: 'a', label: 'الواجهات', children: [
          { key: 'a-1', label: 'Vue' },
          { key: 'a-2', label: 'React' },
        ] },
        { key: 'b', label: 'الخوادم' },
      ],
    }
  },
}
</script>

<template>
  <LhTreeSelect :data="treeData" v-model="treeValue" />
</template>

التحديد المتعدد ​

تحديد متعدد
vue
<script setup>
import { ref } from 'vue'
const treeMulti = ref([])
</script>

<template>
  <!-- تحديد متعدد -->
  <LhTreeSelect :data="treeData" v-model="treeMulti" multiple placeholder="اختر حزمة التقنيات" />
</template>
vue
<script>
export default {
  data() {
    return {
      treeMulti: [],
      treeData: [
        { key: 'a', label: 'الواجهات', children: [
          { key: 'a-1', label: 'Vue' },
          { key: 'a-2', label: 'React' },
        ] },
        { key: 'b', label: 'الخوادم' },
      ],
    }
  },
}
</script>

<template>
  <!-- تحديد متعدد -->
  <LhTreeSelect :data="treeData" v-model="treeMulti" multiple placeholder="اختر حزمة التقنيات" />
</template>

التعطيل والتركيب ​

يعطّل disabled المنتقي؛ وعند ضبط teleported على false تُركَّب اللوحة المنسدلة في مكانها (دون نقلها إلى body).

تعطيل / لوحة محلية
vue
<script setup>
import { ref } from 'vue'
const treeDisabled = ref([])
const treeLocal = ref([])
</script>

<template>
  <!-- تعطيل -->
  <LhTreeSelect :data="treeData" v-model="treeDisabled" disabled />
  <!-- لوحة محلية -->
  <LhTreeSelect :data="treeData" v-model="treeLocal" :teleported="false" />
</template>
vue
<script>
export default {
  data() {
    return {
      treeDisabled: [],
      treeLocal: [],
      treeData: [
        { key: 'a', label: 'الواجهات', children: [
          { key: 'a-1', label: 'Vue' },
          { key: 'a-2', label: 'React' },
        ] },
        { key: 'b', label: 'الخوادم' },
      ],
    }
  },
}
</script>

<template>
  <!-- تعطيل -->
  <LhTreeSelect :data="treeData" v-model="treeDisabled" disabled />
  <!-- لوحة محلية -->
  <LhTreeSelect :data="treeData" v-model="treeLocal" :teleported="false" />
</template>

API ​

LhTreeSelect Props ​

اسم الخاصيةالوصفالنوعالقيمة الافتراضية
dataبيانات الشجرة[LhTreeNode](#type-LhTreeNode)[]—
modelValueالقيمة الحالية (فردي string / متعدد string[]، متحكَّم بها عبر v-model)string | string[]—
multipleتحديد متعدد (يُظهر خانات اختيار، والقيمة مصفوفة مفاتيح محدَّدة)booleanfalse
disabledالتعطيلbooleanfalse
placeholderالنص النائبstring—
teleportedتركيب اللوحة على body (افتراضي true)booleantrue
sxخصائص التخطيط السريع sxLhSxProps—

Events ​

اسم الحدثالوصفوسائط الاستدعاء
update:modelValueيُطلَق عند تغيُّر قيمة التحديد، ويُستخدم مع v-model (فردي string، متعدد string[])(value: string | string[] | undefined)
changeيُطلَق بعد تغيُّر التحديد(value: string | string[] | undefined)

إتاحة الوصول ​

  • المُشغِّل عنصر <button> حقيقي، وaria-haspopup="tree" + aria-expanded يُعلنان حالة التوسيع؛ واللوحة role="listbox" (ويُضاف aria-multiselectable في التحديد المتعدد)
  • داخل اللوحة يُعاد استخدام التنقّل بلوحة المفاتيح وفق نمط APG tree في Tree بالكامل
  • تُغلق اللوحة عند النقر خارج المكوّن أو الضغط على Escape، ويُعاد التركيز إلى المُشغِّل بعد الإغلاق

تعريفات الأنواع ​

بنية الأنواع التي يُصدِّرها هذا المكوّن بلغة TypeScript كالتالي (مستخرجة آليًا من packages/components/tree-select/src/types.ts و@lh-ui/share/core/*؛ انقر كل عنصر لعرض التعريف الكامل؛ لأوصاف الخصائص انظر جدول Props أعلاه):

LhTreeSelectProps
ts
export interface LhTreeSelectProps {
  /** بيانات الشجرة */
  data: LhTreeNode[]
  /** القيمة الحالية (فردي string / متعدد string[]، متحكَّم بها عبر v-model) */
  modelValue?: string | string[]
  /** تحديد متعدد (يُظهر خانات اختيار، والقيمة مصفوفة مفاتيح محدَّدة) */
  multiple?: boolean
  /** تعطيل */
  disabled?: boolean
  /** النص النائب */
  placeholder?: string
  /** تركيب اللوحة على body (افتراضي true) */
  teleported?: boolean
  /** خصائص التخطيط السريع sx */
  sx?: LhSxProps
}
LhTreeNode (من @lh-ui/share/core/tree)
ts
/** بيانات عقدة الشجرة */
export interface LhTreeNode {
  /** مفتاح فريد */
  key: string
  /** النص الظاهر */
  label: string
  /** العقد الفرعية */
  children?: LhTreeNode[]
  /** تعطيل */
  disabled?: boolean
  /** هل هي ورقة (عند عدم التمرير يُستدلَّ عليها من children) */
  isLeaf?: boolean
}

جمال التقاليد، أساس الكود