使用vue3语法,可以使用ant Design Vue封装一个具有一下功能的弹层:1.上半部分是一个展示选中结果的input可以删除选中数据2.下半部分是一个展示所有一级部门的组织架构,可以选中,也可以点击进入当前点击部门的子部门,点击子部门可以获取子部门所有员工数据,均为可选中
时间: 2024-02-16 13:05:16 浏览: 220
可以使用Ant Design Vue中的`Tree`组件来实现下半部分的组织架构展示,并用`Input`组件实现上半部分的选中结果展示和删除功能。
首先,需要引入Ant Design Vue的`Tree`和`Input`组件。在Vue3中可以使用`defineAsyncComponent`按需引入组件。
```javascript
import { defineAsyncComponent } from 'vue';
const Tree = defineAsyncComponent(() => import('ant-design-vue/es/tree/Tree'));
const Input = defineAsyncComponent(() => import('ant-design-vue/es/input/Input'));
```
然后,在组件的`template`中,可以按如下方式使用`Tree`和`Input`组件:
```html
<template>
<div>
<!-- 上半部分 -->
<div>
<Input v-model="selectedData" disabled>
<template #suffix>
<a-button
v-for="(item, index) in selectedDataList"
:key="index"
type="text"
@click.prevent="handleCancelSelected(item)"
>
{{ item }}
<a-icon type="close-circle" />
</a-button>
</template>
</Input>
</div>
<!-- 下半部分 -->
<div>
<Tree
:data="treeData"
:checkable="true"
:defaultExpandAll="true"
@select="handleSelect"
@check="handleCheck"
>
<template v-slot="{ data }">
{{ data.title }}
</template>
</Tree>
</div>
</div>
</template>
```
其中,`selectedData`是一个`ref`,用来存储当前选中的数据,`selectedDataList`是一个`computed`,用来从`selectedData`中解析出选中的数据列表。`treeData`是一个`ref`,用来存储组织架构数据,可以从后端接口获取。
在`methods`中,需要实现`handleSelect`和`handleCheck`方法来处理选择和勾选事件,以及`handleCancelSelected`方法来实现取消选择功能。
```javascript
import { defineAsyncComponent, ref, computed } from 'vue';
const Tree = defineAsyncComponent(() => import('ant-design-vue/es/tree/Tree'));
const Input = defineAsyncComponent(() => import('ant-design-vue/es/input/Input'));
export default {
setup() {
const selectedData = ref('');
const treeData = ref({});
const selectedDataList = computed(() => {
return selectedData.value.split(',');
});
function handleSelect(selectedKeys, { selectedNodes }) {
selectedData.value = selectedNodes.map(node => node.title).join(',');
}
function handleCheck(checkedKeys, { checkedNodes }) {
selectedData.value = checkedNodes.map(node => node.title).join(',');
}
function handleCancelSelected(item) {
selectedData.value = selectedData.value.replace(`${item},`, '');
}
return {
selectedData,
treeData,
selectedDataList,
handleSelect,
handleCheck,
handleCancelSelected,
};
},
components: {
Tree,
Input,
},
};
```
阅读全文