Files
cashier-web/src/components/FastMenuConfig/index.vue
2025-12-31 11:47:15 +08:00

184 lines
4.4 KiB
Vue

<template>
<div class="container">
<div class="table-box">
<div class="row mb-sm">
<el-button type="primary" @click="showAdd = true">添加</el-button>
</div>
<el-table
:data="tableData.list"
v-loading="tableData.loading"
stripe
border
row-key="id"
:tree-props="{ children: 'children' }"
default-expand-all
style="width: 100%"
>
<el-table-column label="ID" prop="id"></el-table-column>
<el-table-column label="菜单名称" prop="isEnable">
<template #default="scope">
{{ returnMenuName(scope.row) }}
</template>
</el-table-column>
<el-table-column label="启用状态" prop="isEnable">
<template #default="scope">
<el-switch
v-model="scope.row.status"
:active-value="1"
:inactive-value="0"
@change="isEnableChange($event, scope.row)"
></el-switch>
</template>
</el-table-column>
<el-table-column label="排序值" prop="sort"></el-table-column>
<el-table-column label="创建时间" prop="createTime"></el-table-column>
<el-table-column label="操作" width="250">
<template #default="scope">
<el-button link type="primary" @click="editMenu(scope.row)">编辑</el-button>
<el-popconfirm title="确认要删除吗?" @confirm="deleteHandle(scope.row)">
<template #reference>
<el-button type="danger" link>删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
</div>
<dialogAdd
v-model="showAdd"
:parMenus="menus"
@success="Refresh()"
:item="nowEditMenu"
></dialogAdd>
</div>
</template>
<script setup>
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";
import dialogAdd from "./dialog-add.vue";
const showAdd = ref(false);
const nowEditMenu = ref(null);
function editMenu(item) {
nowEditMenu.value = { ...item };
showAdd.value = true;
}
const tableData = reactive({
loading: false,
page: 1,
size: 10,
total: 0,
list: [],
});
function Refresh() {
quickStore.getQuickMenus();
getList();
}
function getList() {
tableData.loading = true;
quickApi
.getList({
page: tableData.page,
size: tableData.size,
isEdit: 1,
})
.then((res) => {
tableData.list = res;
tableData.total = res.length;
})
.finally(() => {
tableData.loading = false;
});
}
const menus = ref([]);
async function getMenus() {
const res = await MenuAPI.getRoutes();
menus.value = res;
console.log("menus", res);
}
const menusIdMap = computed(() => {
const map = getMenuMap();
console.log("map", map);
return map;
});
function returnMenuName(item) {
const menu = menusIdMap.value.get(`${item.menuId}`);
console.log("menuId", item.menuId);
console.log("menu", menu);
return menu ? menu.title : "";
}
function getMenuMap() {
// 初始化Map
const map = new Map();
// 定义递归函数处理菜单节点
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) {
quickApi
.edit({
...item,
status: value,
})
.then((res) => {
ElMessage({
message: "修改成功",
type: "success",
});
Refresh();
});
}
function deleteHandle(item) {
quickApi.delete([item.id]).then(() => {
Refresh();
});
}
onMounted(async () => {
await getMenus();
getList();
});
</script>
<style lang="scss" scoped>
.container {
padding: 14px;
width: 100%;
.table-box {
border-radius: 8px;
background-color: #fff;
padding: 14px;
}
}
</style>