123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- <script setup lang="ts">
- import { ref } from "vue";
- import { TreeSelect } from "@pureadmin/components";
- defineOptions({
- name: "AntTreeSelect"
- });
- const value1 = ref<string>("");
- const treeData1 = ref([
- {
- title: "parent 1",
- value: "parent 1",
- children: [
- {
- title: "parent 1-0",
- value: "parent 1-0",
- children: [
- {
- title: "my leaf",
- value: "leaf1"
- },
- {
- title: "your leaf",
- value: "leaf2"
- }
- ]
- },
- {
- title: "parent 1-1",
- value: "parent 1-1"
- }
- ]
- }
- ]);
- const SHOW_PARENT = TreeSelect.SHOW_PARENT;
- function dig(path = "0", level = 3) {
- const list = [];
- for (let i = 0; i < 10; i += 1) {
- const value = `${path}-${i}`;
- const treeNode = {
- title: value,
- value
- };
- if (level > 0) {
- // @ts-expect-error
- treeNode.children = dig(value, level - 1);
- }
- list.push(treeNode);
- }
- return list;
- }
- const checkedKeys = ref<string[]>(["0-0-0", "0-0-1"]);
- const value2 = ref<string[]>(["0-0-0"]);
- const treeData2 = [
- {
- title: "Node1",
- value: "0-0",
- children: [
- {
- title: "Child Node1",
- value: "0-0-0"
- }
- ]
- },
- {
- title: "Node2",
- value: "0-1",
- children: [
- {
- title: "Child Node3",
- value: "0-1-0",
- disabled: true
- },
- {
- title: "Child Node4",
- value: "0-1-1"
- },
- {
- title: "Child Node5",
- value: "0-1-2"
- }
- ]
- }
- ];
- const value3 = ref<string>();
- const treeData3 = ref([
- { id: 1, pId: 0, value: "1", title: "Expand to load" },
- { id: 2, pId: 0, value: "2", title: "Expand to load" },
- { id: 3, pId: 0, value: "3", title: "Tree Node", isLeaf: true }
- ]);
- const genTreeNode = (parentId: number, isLeaf = false) => {
- const random = Math.random().toString(36).substring(2, 6);
- return {
- id: random,
- pId: parentId,
- value: random,
- title: isLeaf ? "Tree Node" : "Expand to load",
- isLeaf
- };
- };
- const onLoadData = treeNode => {
- return new Promise(resolve => {
- const { id } = treeNode.dataRef;
- setTimeout(() => {
- // @ts-expect-error
- treeData3.value = treeData3.value.concat([
- genTreeNode(id, false),
- genTreeNode(id, true)
- ]);
- resolve(true);
- }, 300);
- });
- };
- </script>
- <template>
- <el-card>
- <template #header>
- <div class="card-header">
- <span class="font-medium">
- 仿antdv树选择,采用
- <el-link
- href="https://www.npmjs.com/package/@pureadmin/components"
- target="_blank"
- style="font-size: 16px; margin: 0 4px 5px"
- >
- @pureadmin/components
- </el-link>
- ,完全兼容antdv的
- <el-link
- href="https://next.antdv.com/components/tree-select-cn"
- target="_blank"
- style="font-size: 16px; margin: 0 4px 5px"
- >
- TreeSelect
- </el-link>
- 写法
- </span>
- </div>
- </template>
- <div class="flex justify-around flex-wrap">
- <div>
- <span>线性样式:</span>
- <TreeSelect
- class="w-200px"
- v-model:value="value1"
- show-search
- :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
- placeholder="Please select"
- allow-clear
- :tree-line="true"
- tree-default-expand-all
- :tree-data="treeData1"
- >
- <template #title="{ value: val, title }">
- <b v-if="val === 'parent 1-1'" style="color: #08c">sss</b>
- <template v-else>{{ title }}</template>
- </template>
- </TreeSelect>
- </div>
- <div>
- <span>虚拟滚动:</span>
- <TreeSelect
- class="w-200px mt-6"
- v-model:value="checkedKeys"
- tree-checkable
- tree-default-expand-all
- :show-checked-strategy="SHOW_PARENT"
- :height="233"
- :tree-data="dig()"
- :max-tag-count="10"
- >
- <template #title="{ title, value }">
- <span v-if="value === '0-0-1-0'" style="color: #1890ff">
- {{ title }}
- </span>
- <template v-else>{{ title }}</template>
- </template>
- </TreeSelect>
- </div>
- <div>
- <span>可勾选:</span>
- <TreeSelect
- class="w-200px"
- v-model:value="value2"
- :tree-data="treeData2"
- tree-checkable
- allow-clear
- :show-checked-strategy="SHOW_PARENT"
- placeholder="Please select"
- />
- </div>
- <div>
- <span>异步加载:</span>
- <TreeSelect
- class="w-200px"
- v-model:value="value3"
- tree-data-simple-mode
- :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
- :tree-data="treeData3"
- placeholder="Please select"
- :load-data="onLoadData"
- />
- </div>
- </div>
- </el-card>
- </template>
|