javascript
复制代码
<script setup >
import {getCurrentInstance, ref, watch} from 'vue'
const {proxy} = (getCurrentInstance())
const expandedKeys = ref()
const TreeselectedKeys = ref('')
const autoExpandParent = ref(true);
const searchValue = ref('')
const fieldNames = {
children: 'children',
title: 'regionName',
key:'regionCode'
};
const onExpand = keys => {
expandedKeys.value = keys;
autoExpandParent.value = true;
};
const dataMenu = ref([
{
"regionCode": "110000",
"regionName": "北京市",
"children": [
{
"regionCode": "110101",
"regionName": "东城区",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "110102",
"regionName": "西城区",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "110105",
"regionName": "朝阳区",
"children": [],
"childrens": [],
"check": false
}
],
"childrens": [],
"check": false
},
{
"regionCode": "120000",
"regionName": "天津市",
"children": [
{
"regionCode": "120101",
"regionName": "和平区",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "120102",
"regionName": "河东区",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "120103",
"regionName": "河西区",
"children": [],
"childrens": [],
"check": false
}
],
"childrens": [],
"check": false
},
{
"regionCode": "130000",
"regionName": "河北省",
"children": [
{
"regionCode": "130100",
"regionName": "石家庄市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "130200",
"regionName": "唐山市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "130300",
"regionName": "秦皇岛市",
"children": [],
"childrens": [],
"check": false
}
],
"childrens": [],
"check": false
},
{
"regionCode": "140000",
"regionName": "山西省",
"children": [
{
"regionCode": "140100",
"regionName": "太原市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "140200",
"regionName": "大同市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "140300",
"regionName": "阳泉市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "140400",
"regionName": "长治市",
"children": [],
"childrens": [],
"check": false
}
],
"childrens": [],
"check": false
},
{
"regionCode": "150000",
"regionName": "内蒙古自治区",
"children": [
{
"regionCode": "150100",
"regionName": "呼和浩特市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "150200",
"regionName": "包头市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "150300",
"regionName": "乌海市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "150400",
"regionName": "赤峰市",
"children": [],
"childrens": [],
"check": false
}
],
"childrens": [],
"check": false
},
{
"regionCode": "210000",
"regionName": "辽宁省",
"children": [
{
"regionCode": "210100",
"regionName": "沈阳市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "210200",
"regionName": "大连市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "210300",
"regionName": "鞍山市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "210400",
"regionName": "抚顺市",
"children": [],
"childrens": [],
"check": false
}
],
"childrens": [],
"check": false
},
{
"regionCode": "220000",
"regionName": "吉林省",
"children": [
{
"regionCode": "220100",
"regionName": "长春市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "220200",
"regionName": "吉林市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "220300",
"regionName": "四平市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "220400",
"regionName": "辽源市",
"children": [],
"childrens": [],
"check": false
}
],
"childrens": [],
"check": false
},
{
"regionCode": "230000",
"regionName": "黑龙江省",
"children": [
{
"regionCode": "230100",
"regionName": "哈尔滨市",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "230200",
"regionName": "齐齐哈尔市",
"children": [],
"childrens": [],
"check": false
}
],
"childrens": [],
"check": false
},
{
"regionCode": "310000",
"regionName": "上海市",
"children": [
{
"regionCode": "310101",
"regionName": "黄浦区",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "310104",
"regionName": "徐汇区",
"children": [],
"childrens": [],
"check": false
},
{
"regionCode": "310105",
"regionName": "长宁区",
"children": [],
"childrens": [],
"check": false
}
],
"childrens": [],
"check": false
}
])
watch(()=>searchValue.value, value => {
autoExpandParent.value = false
expandedKeys.value = proxy.TreeQuery(dataMenu.value, value);
});
</script>
<template>
<div >
<div >
<a-input-search v-model:value="searchValue" placeholder="搜索站点" />
<a-tree
v-model:selectedKeys="TreeselectedKeys"
class="draggable-tree"
draggable
v-if="dataMenu && dataMenu.length > 0"
block-node
v-bind="autoExpandParent == true ? {}: { expandedKeys } "
:default-expand-all="autoExpandParent"
ref="tree"
height="50vh"
@expand="onExpand"
:tree-data="dataMenu"
:field-names="fieldNames">
<template #title="{ regionName }">
<span v-if="regionName.indexOf(searchValue) > -1">
{{ regionName.substring(0, regionName.indexOf(searchValue)) }}
<span style="color: #f50">{{ searchValue }}</span>
{{ regionName.substring(regionName.indexOf(searchValue) + searchValue.length) }}
</span>
<span v-else>{{ regionName }}</span>
</template>
</a-tree>
</div>
</div>
</template>