index.vue
3.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<template>
<PageWrapper dense contentFullHeight contentClass="flex">
<div class="category-tree">
<div class="category-tree-search">
<a-input-search
placeholder="请输入关键字搜索"
enter-button
size="large"
v-model:value="searchKeyword"
@search="handleSearch"
/>
</div>
<a-tree v-if="treeData.length > 0" :tree-data="treeData" default-expand-all show-icon>
<template #custom="{ title, id, record }">
<div class="tree-node">
<span>{{ title }}</span>
<div class="but_operation">
<span class="but_type" @click="handleAdd(id)">新增</span>
<span class="but_type" @click="handleEdit(record)">编辑</span>
<a-popconfirm
title="你是否确认删除操作?"
ok-text="确认"
cancel-text="取消"
@confirm="handleDelete(record)"
>
<span class="but_type">删除</span>
</a-popconfirm>
</div>
</div>
</template>
</a-tree>
<categoryModal @register="registerModal" @handleReload="handleReload" />
</div>
</PageWrapper>
</template>
<script setup lang="ts">
import { PageWrapper } from '/@/components/Page';
import './index.less';
import { categoryModal } from './components/index';
import { useModal } from '/@/components/Modal';
import { deleteCategory, getAllCategory } from '/@/api/equipment/category';
import { ref, onMounted } from 'vue';
import { useI18n } from '/@/hooks/web/useI18n';
import { useMessage } from '/@/hooks/web/useMessage';
const treeData = ref([]); // 声明为响应式变量
const { t } = useI18n();
const { createMessage } = useMessage();
const searchKeyword = ref('');
// 递归转换函数
const transformTreeData = (data: any) => {
return data?.map((item) => {
const transformedItem = {
title: item.name,
key: item.id,
id: item.id,
record: item, // 将原始数据赋值给 record
slots: { title: 'custom' },
};
// 递归处理 children
if (item.children && item.children.length > 0) {
//@ts-ignore
transformedItem.children = transformTreeData(item.children);
}
return transformedItem;
});
};
// 获取分类数据的函数
const fetchTreeData = async (name?: string) => {
try {
const res = await getAllCategory({ name }); // 将关键字传递给接口
// 使用递归函数转换数据
treeData.value = transformTreeData(res);
} catch (error) {
console.error('获取分类数据失败:', error);
}
};
// 组件挂载时获取数据
onMounted(() => {
fetchTreeData();
});
const [registerModal, { openModal }] = useModal();
// 处理搜索事件
const handleSearch = () => {
fetchTreeData(searchKeyword.value);
};
// 处理新建按钮点击事件
const handleAdd = (key: string) => {
openModal(true, {
isUpdate: false, // 表示是新建操作
parentId: key, // 传递当前节点的 key
});
};
// 编辑
const handleEdit = (record?: any) => {
console.log(record, 'record');
openModal(true, {
isUpdate: true,
record,
});
};
const handleDelete = async (record?: any) => {
let id = record.id;
try {
await deleteCategory({ id });
createMessage.success(t('common.deleteSuccessText'));
handleReload();
} catch (error) {
throw error;
} finally {
}
};
const handleReload = () => {
fetchTreeData();
};
</script>