From f6bcf5755a3421f2053d288d47881c10de27cc5a Mon Sep 17 00:00:00 2001 From: icssoa <615206459@qq.com> Date: Mon, 1 Sep 2025 12:03:07 +0800 Subject: [PATCH] =?UTF-8?q?cl-tree=20=E6=B7=BB=E5=8A=A0=20modelValue?= =?UTF-8?q?=E3=80=81multiple=20=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/demo/data/tree.uvue | 374 +++++++++--------- .../components/cl-tree-item/cl-tree-item.uvue | 59 ++- .../cool-ui/components/cl-tree/cl-tree.uvue | 142 +++++-- uni_modules/cool-ui/types/component.d.ts | 4 +- 4 files changed, 360 insertions(+), 219 deletions(-) diff --git a/pages/demo/data/tree.uvue b/pages/demo/data/tree.uvue index fb93527..771d2ea 100644 --- a/pages/demo/data/tree.uvue +++ b/pages/demo/data/tree.uvue @@ -3,11 +3,13 @@ @@ -22,6 +24,10 @@ + + {{ checkedKeys.join("、") }} + + {{ t("选中部分节点") }} @@ -29,14 +35,6 @@ {{ t("获取选中节点") }} - - {{ checkedKeys.join(", ") }} @@ -47,7 +45,7 @@ :pt="{ className: '!text-sm p-2' }" - >{{ halfCheckedKeys.join(", ") }}{{ halfCheckedKeys.join("、") }} @@ -69,7 +67,7 @@ :pt="{ className: '!text-sm p-2' }" - >{{ expandedKeys.join(", ") }}{{ expandedKeys.join("、") }} @@ -89,232 +87,247 @@ import DemoItem from "../components/item.uvue"; import { t } from "@/locale"; import { ref } from "vue"; -import { useTree } from "@/uni_modules/cool-ui"; +import { useTree, useUi, type ClTreeItem } from "@/uni_modules/cool-ui"; -const list = useTree([ - { - id: "1", - label: "华为", - children: [ +const ui = useUi(); + +const list = ref([]); + +function refresh() { + ui.showLoading(); + + setTimeout(() => { + list.value = useTree([ { - id: "1-1", - label: "手机", + id: "1", + label: "华为", children: [ { - id: "1-1-1", - label: "Mate系列", + id: "1-1", + label: "手机", children: [ { - id: "1-1-1-1", - label: "Mate 50" + id: "1-1-1", + label: "Mate系列", + children: [ + { + id: "1-1-1-1", + label: "Mate 50" + }, + { + id: "1-1-1-2", + disabled: true, + label: "Mate 40" + }, + { + id: "1-1-1-3", + label: "Mate 30" + } + ] }, { - id: "1-1-1-2", - label: "Mate 40" - }, - { - id: "1-1-1-3", - label: "Mate 30" + id: "1-1-2", + label: "P系列", + children: [ + { + id: "1-1-2-1", + disabled: true, + label: "P60" + }, + { + id: "1-1-2-2", + label: "P50" + }, + { + id: "1-1-2-3", + label: "P40" + } + ] } ] }, { - id: "1-1-2", - label: "P系列", + id: "1-2", + label: "笔记本", children: [ { - id: "1-1-2-1", - label: "P60" + id: "1-2-1", + label: "MateBook X", + children: [ + { + id: "1-2-1-1", + label: "MateBook X Pro" + }, + { + id: "1-2-1-2", + label: "MateBook X 2022" + } + ] }, { - id: "1-1-2-2", - label: "P50" + id: "1-2-2", + label: "MateBook D", + children: [ + { + id: "1-2-2-1", + label: "MateBook D 14" + }, + { + id: "1-2-2-2", + label: "MateBook D 15" + } + ] }, { - id: "1-1-2-3", - label: "P40" + id: "1-2-3", + label: "MateBook 13" } ] } ] }, { - id: "1-2", - label: "笔记本", + id: "2", + label: "小米", + isExpand: true, children: [ { - id: "1-2-1", - label: "MateBook X", + id: "2-1", + label: "手机", children: [ { - id: "1-2-1-1", - label: "MateBook X Pro" + id: "2-1-1", + label: "小米数字系列" }, { - id: "1-2-1-2", - label: "MateBook X 2022" + id: "2-1-2", + label: "Redmi系列" } ] }, { - id: "1-2-2", - label: "MateBook D", + id: "2-2", + label: "家电", children: [ { - id: "1-2-2-1", - label: "MateBook D 14" + id: "2-2-1", + label: "电视" }, { - id: "1-2-2-2", - label: "MateBook D 15" + id: "2-2-2", + label: "空调" + } + ] + } + ] + }, + { + id: "3", + label: "苹果", + children: [ + { + id: "3-1", + label: "手机", + children: [ + { + id: "3-1-1", + label: "iPhone 14" + }, + { + id: "3-1-2", + label: "iPhone 13" } ] }, { - id: "1-2-3", - label: "MateBook 13" - } - ] - } - ] - }, - { - id: "2", - label: "小米", - children: [ - { - id: "2-1", - label: "手机", - children: [ - { - id: "2-1-1", - label: "小米数字系列" - }, - { - id: "2-1-2", - label: "Redmi系列" + id: "3-2", + label: "平板", + children: [ + { + id: "3-2-1", + label: "iPad Pro" + }, + { + id: "3-2-2", + label: "iPad Air" + } + ] } ] }, { - id: "2-2", - label: "家电", + id: "4", + label: "OPPO", children: [ { - id: "2-2-1", - label: "电视" + id: "4-1", + label: "手机", + children: [ + { + id: "4-1-1", + label: "Find系列" + }, + { + id: "4-1-2", + label: "Reno系列" + } + ] }, { - id: "2-2-2", - label: "空调" - } - ] - } - ] - }, - { - id: "3", - label: "苹果", - children: [ - { - id: "3-1", - label: "手机", - children: [ - { - id: "3-1-1", - label: "iPhone 14" - }, - { - id: "3-1-2", - label: "iPhone 13" + id: "4-2", + label: "配件", + children: [ + { + id: "4-2-1", + label: "耳机" + }, + { + id: "4-2-2", + label: "手环" + } + ] } ] }, { - id: "3-2", - label: "平板", + id: "5", + label: "vivo", children: [ { - id: "3-2-1", - label: "iPad Pro" + id: "5-1", + label: "手机", + children: [ + { + id: "5-1-1", + label: "X系列" + }, + { + id: "5-1-2", + label: "S系列" + } + ] }, { - id: "3-2-2", - label: "iPad Air" + id: "5-2", + label: "智能设备", + children: [ + { + id: "5-2-1", + label: "手表" + }, + { + id: "5-2-2", + label: "耳机" + } + ] } ] } - ] - }, - { - id: "4", - label: "OPPO", - children: [ - { - id: "4-1", - label: "手机", - children: [ - { - id: "4-1-1", - label: "Find系列" - }, - { - id: "4-1-2", - label: "Reno系列" - } - ] - }, - { - id: "4-2", - label: "配件", - children: [ - { - id: "4-2-1", - label: "耳机" - }, - { - id: "4-2-2", - label: "手环" - } - ] - } - ] - }, - { - id: "5", - label: "vivo", - children: [ - { - id: "5-1", - label: "手机", - children: [ - { - id: "5-1-1", - label: "X系列" - }, - { - id: "5-1-2", - label: "S系列" - } - ] - }, - { - id: "5-2", - label: "智能设备", - children: [ - { - id: "5-2-1", - label: "手表" - }, - { - id: "5-2-2", - label: "耳机" - } - ] - } - ] - } -]); + ]); + + ui.hideLoading(); + }, 500); +} // 是否严格的遵循父子不互相关联 const checkStrictly = ref(false); @@ -326,7 +339,8 @@ const isCustomIcon = ref(false); const treeRef = ref(null); // 选中节点的keys -const checkedKeys = ref<(string | number)[]>([]); +const checkedKeys = ref<(string | number)[]>(["1-1-1-1", "2-1-1", "2-1-2"]); +const checkedKeys2 = ref("1-1-1"); // 半选节点的keys const halfCheckedKeys = ref<(string | number)[]>([]); @@ -354,7 +368,7 @@ function getHalfChecked() { } function expand() { - treeRef.value!.setExpandedKeys(["1", "1-1", "2"]); + treeRef.value!.setExpandedKeys(["4", "5"]); } function getExpanded() { @@ -370,4 +384,8 @@ function collapseAll() { treeRef.value!.collapseAll(); expandedKeys.value = []; } + +onReady(() => { + refresh(); +}); diff --git a/uni_modules/cool-ui/components/cl-tree-item/cl-tree-item.uvue b/uni_modules/cool-ui/components/cl-tree-item/cl-tree-item.uvue index c7411aa..697d529 100644 --- a/uni_modules/cool-ui/components/cl-tree-item/cl-tree-item.uvue +++ b/uni_modules/cool-ui/components/cl-tree-item/cl-tree-item.uvue @@ -1,14 +1,22 @@