# شجرة Tree
عرض شجري واختيار. يدعم مربعات الاختيار (تسلسل أبوي افتراضي + حالة غير محددة، ويفك checkStrictly الربط)، والاختيار المتعدد، والتحميل الكسول (يُستدعى load عند توسيع عقدة غير مُحمَّلة)؛ وتسير مفاتيح التحكم الثلاثة جميعها عبر .sync.
شجرة
<template>
<div class="demo-col" style="max-width: 320px">
<p class="demo-note">تحديد + checkStrictly (لا ربط بين الآباء والأبناء) + مفاتيح التوسيع/التحديد/التحديد الافتراضية</p>
<LhTree
:data="data"
show-checkbox
check-strictly
:default-expanded-keys="['song']"
:default-selected-keys="['xishan']"
:default-checked-keys="['libai']"
:expand-on-click-node="false"
@select="onSelect"
@check="onCheck"
/>
<p class="demo-note">النقر للتحديد: {{ selected }}؛ مفاتيح التحديد: {{ checked.join('، ') || '(لا شيء)' }}</p>
<p class="demo-note">multiple اختيار متعدد + disabled تعطيل الشجرة كاملة</p>
<LhTree :data="data" multiple disabled :default-expanded-keys="['tang']" @select="onSelectMulti" />
<p class="demo-note">نتيجة الاختيار المتعدد: {{ multi.join('، ') || '(لا شيء)' }}</p>
<p class="demo-note">مفاتيح التحكم: expandedKeys / selectedKeys / checkedKeys</p>
<LhTree
:data="data"
show-checkbox
:expanded-keys="['song']"
:selected-keys="['guo']"
:checked-keys="['xishan']"
@select="onSelect"
/>
<p class="demo-note">lazy تحميل كسول (يُستدعى load عند النقر للتوسيع لجلب العقد الفرعية)</p>
<LhTree :data="lazyData" lazy :load="onLoad" :default-expanded-keys="['root']" />
</div>
</template>
<script>
export default {
data: () => ({
selected: '(لا شيء)',
checked: [],
multi: [],
data: [
{
key: 'tang',
label: 'سلالة تانغ',
children: [
{ key: 'wangwei', label: 'وانغ وي' },
{ key: 'libai', label: 'لي باي' },
],
},
{
key: 'song',
label: 'سلالة سونغ',
children: [
{
key: 'fan',
label: 'فان كوان',
children: [{ key: 'xishan', label: 'المسافرون بين الجبال والوديان' }],
},
{ key: 'guo', label: 'غوو شي' },
],
},
],
lazyData: [{ key: 'root', label: 'تصنيف اللوحات (انقر للتوسيع والتحميل الكسول)' }],
}),
methods: {
onSelect(key) {
this.selected = String(key)
},
onCheck(keys) {
this.checked = Array.isArray(keys) ? keys : []
},
onSelectMulti(keys) {
this.multi = Array.isArray(keys) ? keys : [String(keys)]
},
onLoad(node, resolve) {
setTimeout(() => {
var _a, _b
resolve([
{ key: `${String((_a = node.key) !== null && _a !== void 0 ? _a : '')}-a`, label: 'المناظر الطبيعية' },
{ key: `${String((_b = node.key) !== null && _b !== void 0 ? _b : '')}-b`, label: 'الطيور والزهور' },
])
}, 400)
},
},
}
</script>
# Props
| خاصية | الوصف | النوع | الافتراضي |
|---|---|---|---|
| data | بيانات الشجرة | LhTreeNode[] | [] |
| showCheckbox | عرض مربعات الاختيار | boolean | false |
| multiple | اختيار متعدد (النقر على عقدة يُبدِّل التحديد بدل استبداله) | boolean | false |
| expandOnClickNode | توسيع / طي العقد غير الفرعية عند النقر عليها | boolean | false |
| defaultExpandedKeys / expandedKeys | مفاتيح التوسيع الافتراضية / المتحكَّم بها | string[] | — |
| defaultSelectedKeys / selectedKeys | مفاتيح التحديد الافتراضية / المتحكَّم بها | string[] | — |
| defaultCheckedKeys / checkedKeys | مفاتيح التحديد بمربع الاختيار الافتراضية / المتحكَّم بها | string[] | — |
| checkStrictly | عدم ربط التحديد بين الآباء والأبناء (بلا تسلسل ولا حالة غير محددة) | boolean | false |
| lazy | تحميل كسول: يُستدعى load عند توسيع عقدة أبوية غير مُحمَّلة | boolean | false |
| load | استدعاء التحميل الكسول، resolve(children) يُرسل الأبناء ويوسِّع، وreject() يُلغي | (node, resolve, reject) => void | — |
| disabled | تعطيل كامل | boolean | false |
| sx | خاصية sx المختصرة للتخطيط | — | — |
# Events
update:expandedKeys و update:selectedKeys و update:checkedKeys (جمعها .sync)،
expand (key, isExpanded) و select (key, node) و check (keys, node) و nodeLoad (node, children)
# Slots
| فتحة | الوصف |
|---|---|
| node | تسمية العقدة، مع المعاملات النطاقية { node, level, expanded, selected } |
| empty | المحتوى عند انعدام البيانات (الافتراضي: 「暂无数据」) |
# إمكانية الوصول
العقد role="treeitem" + aria-expanded (للعقد القابلة للتوسيع) + aria-selected / aria-checked؛
الحاوية role="tree"، مع دعم التنقّل بين العقد بمفاتيح الأسهم عموديًا، والتوسيع والطي أفقيًا، وتحديدها بمفتاح المسافة، واختيارها بمفتاح الإدخال.
Copyright © 2024-2026 FengMo WenXue