diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue
index 49e76b05..b2c93bbe 100644
--- a/src/views/system/menu/index.vue
+++ b/src/views/system/menu/index.vue
@@ -84,9 +84,8 @@
-
+
-
onMenuStatusChanged(scope.row, val as number)"
+ @change="(val) => handleStatusChanged(scope.row, val as number)"
/>
@@ -148,7 +147,6 @@ const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
const loading = ref(true) // 列表的加载中
-const menuStatusUpdating = ref({}) // 列表的加载中
const list = ref([]) // 列表的数据
const queryParams = reactive({
name: undefined,
@@ -220,11 +218,19 @@ const handleDelete = async (id: number) => {
} catch {}
}
-const onMenuStatusChanged = async (menu: MenuVO, val: number) => {
+/** 开启/关闭菜单的状态 */
+const menuStatusUpdating = ref({}) // 菜单状态更新中的 menu 映射。key:菜单编号,value:是否更新中
+const handleStatusChanged = async (menu: MenuVO, val: number) => {
+ // 1. 标记 menu.id 更新中
menuStatusUpdating.value[menu.id] = true
- menu.status = val
- await MenuApi.updateMenu(menu)
- menuStatusUpdating.value[menu.id] = false
+ try {
+ // 2. 发起更新状态
+ menu.status = val
+ await MenuApi.updateMenu(menu)
+ } finally {
+ // 3. 标记 menu.id 更新完成
+ menuStatusUpdating.value[menu.id] = false
+ }
}
/** 初始化 **/