vue-vben-admin/src/views/demo/system/position/PositionTree.vue

118 lines
3.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="m-4 mr-0 overflow-hidden bg-white">
<BasicTree
ref="asyncExpandTreeRef"
title="职级组列表"
toolbar
search
treeWrapperClassName="h-[calc(100%-35px)] overflow-auto"
loadData
:actionList="actionList"
:renderIcon="createIcon"
:clickRowToExpand="false"
:treeData="treeData"
:fieldNames="{ key: 'id', title: 'name' }"
:defaultExpandAll="true"
@select="handleSelect"
/>
<BasicModal
@register="register"
title="删除"
:helpMessage="['提示1', '提示2']"
@ok="handleSubmit"
>
确认要删除菜单吗
</BasicModal>
</div>
</template>
<script lang="ts" setup>
import { onMounted, ref, h, nextTick, unref } from 'vue';
import { BasicTree, TreeItem, TreeActionItem, TreeActionType } from '@/components/Tree';
import { getDeptList, deleteMenu } from '@/api/demo/system';
import { FormOutlined, DeleteOutlined } from '@ant-design/icons-vue';
import { BasicModal, useModal } from '@/components/Modal';
import { router } from '@/router';
import { useMessage } from '@/hooks/web/useMessage';
const { createMessage } = useMessage();
const [register, { closeModal, openModal }] = useModal();
defineOptions({ name: 'DeptTree' });
const emit = defineEmits(['select', 'edit']);
const treeData = ref<TreeItem[]>([]);
let selectItemId = ref('');
const asyncExpandTreeRef = ref<Nullable<TreeActionType>>(null);
async function handleSubmit() {
var query = [selectItemId.value];
const data = await deleteMenu(query);
if (data) {
closeModal();
return createMessage.success('删除成功');
} else {
return createMessage.error('删除失败');
}
}
async function fetch() {
treeData.value = (await getDeptList()) as unknown as TreeItem[];
// 展开全部
nextTick(() => {
unref(asyncExpandTreeRef)?.expandAll(true);
});
}
function handleSelect(keys) {
emit('select', keys[0]);
}
const btnList = router.currentRoute.value.meta.elements;
const actionList: TreeActionItem[] = [];
// btnList.forEach((element) => {
// if (element.domId == 'btnEdit') {
// actionList.push({
// render: (node) => {
// return h(FormOutlined, {
// class: 'ml-2',
// onClick: () => {
// emit('edit', node);
// },
// });
// },
// });
// } else if (element.domId == 'btnDelete') {
// actionList.push({
// render: (node) => {
// return h(DeleteOutlined, {
// class: 'ml-2',
// onClick: () => {
// selectItemId.value = node.id;
// openModal(true, {
// isUpdate: false,
// });
// },
// });
// },
// });
// }
// });
function createIcon({ level }) {
if (level === 1) {
return 'ion:git-compare-outline';
}
if (level === 2) {
return 'ion:home';
}
if (level === 3) {
return 'ion:airplane';
}
return '';
}
onMounted(() => {
fetch();
});
defineExpose({
fetch,
});
</script>