增加悬浮窗功能

This commit is contained in:
2025-12-31 11:47:15 +08:00
parent c4066a3b45
commit cc44bdc9b1
8 changed files with 351 additions and 78 deletions

View File

@@ -55,7 +55,10 @@
</template>
<script setup>
import { ref, reactive, onMounted } from "vue";
import { useQuickStore, usePermissionStore } from "@/store";
const quickStore = useQuickStore();
import { ref, reactive, onMounted, toRaw } from "vue";
import MenuAPI from "@/api/account/menu";
import quickApi from "@/api/account/quick";
@@ -64,9 +67,9 @@ import dialogAdd from "./dialog-add.vue";
const showAdd = ref(false);
const nowEditMenu = ref({});
const nowEditMenu = ref(null);
function editMenu(item) {
nowEditMenu.value = item;
nowEditMenu.value = { ...item };
showAdd.value = true;
}
const tableData = reactive({
@@ -78,6 +81,7 @@ const tableData = reactive({
});
function Refresh() {
quickStore.getQuickMenus();
getList();
}
function getList() {
@@ -86,7 +90,7 @@ function getList() {
.getList({
page: tableData.page,
size: tableData.size,
isEdit: true,
isEdit: 1,
})
.then((res) => {
tableData.list = res;
@@ -101,25 +105,45 @@ const menus = ref([]);
async function getMenus() {
const res = await MenuAPI.getRoutes();
menus.value = res;
console.log("menus", res);
}
const menusIdMap = computed(() => {
const map = getMenuMao();
const map = getMenuMap();
console.log("map", map);
return map;
});
function returnMenuName(item) {
const menu = menusIdMap.value.get(`${item.menuId}`);
return menu.title;
console.log("menuId", item.menuId);
console.log("menu", menu);
return menu ? menu.title : "";
}
function getMenuMao() {
function getMenuMap() {
// 初始化Map
const map = new Map();
for (const menu of menus.value) {
map.set(menu.menuId, menu);
if (menu.children && menu.children.length > 0) {
for (const child of menu.children) {
map.set(child.menuId, child);
}
// 定义递归函数处理菜单节点
function processMenuNode(menuNode) {
// 将当前节点存入Map
map.set(menuNode.menuId, menuNode);
// 如果有子节点且子节点数组不为空,则递归处理每个子节点
if (menuNode.children && Array.isArray(menuNode.children) && menuNode.children.length > 0) {
menuNode.children.forEach((childNode) => {
processMenuNode(childNode);
});
}
}
// 遍历根级菜单,逐个处理
if (menus.value && Array.isArray(menus.value)) {
menus.value.forEach((rootMenu) => {
processMenuNode(rootMenu);
});
}
return map;
}
function isEnableChange(value, item) {