|
|
@@ -30,6 +30,9 @@
|
|
|
<el-col :span="1.5">
|
|
|
<el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
|
|
|
</el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button type="danger" plain icon="Delete" @click="handleCascadeDelete" :loading="deleteLoading">级联删除</el-button>
|
|
|
+ </el-col>
|
|
|
<right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
|
|
|
</el-row>
|
|
|
</template>
|
|
|
@@ -257,11 +260,31 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
+
|
|
|
+ <el-dialog v-model="deleteDialog.visible" :title="deleteDialog.title" destroy-on-close append-to-bod width="750px">
|
|
|
+ <el-tree
|
|
|
+ ref="menuTreeRef"
|
|
|
+ class="tree-border"
|
|
|
+ :data="menuOptions"
|
|
|
+ show-checkbox
|
|
|
+ node-key="menuId"
|
|
|
+ :check-strictly="false"
|
|
|
+ empty-text="加载中,请稍候"
|
|
|
+ :default-expanded-keys="[0]"
|
|
|
+ :props="{ value: 'menuId', label: 'menuName', children: 'children' } as any"
|
|
|
+ />
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button type="primary" @click="submitDeleteForm" :loading="deleteLoading">确 定</el-button>
|
|
|
+ <el-button @click="cancel">取 消</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup name="Menu" lang="ts">
|
|
|
-import { addMenu, delMenu, getMenu, listMenu, updateMenu } from '@/api/system/menu';
|
|
|
+import { addMenu, cascadeDelMenu, delMenu, getMenu, listMenu, updateMenu } from '@/api/system/menu';
|
|
|
import { MenuForm, MenuQuery, MenuVO } from '@/api/system/menu/types';
|
|
|
import { MenuTypeEnum } from '@/enums/MenuTypeEnum';
|
|
|
|
|
|
@@ -404,7 +427,44 @@ const handleDelete = async (row: MenuVO) => {
|
|
|
proxy?.$modal.msgSuccess('删除成功');
|
|
|
};
|
|
|
|
|
|
+const deleteLoading = ref<boolean>(false);
|
|
|
+const menuTreeRef = ref<ElTreeInstance>();
|
|
|
+
|
|
|
+const deleteDialog = reactive<DialogOption>({
|
|
|
+ visible: false,
|
|
|
+ title: '级联删除菜单'
|
|
|
+});
|
|
|
+
|
|
|
+/** 级联删除按钮操作 */
|
|
|
+const handleCascadeDelete = () => {
|
|
|
+ menuTreeRef.value?.setCheckedKeys([]);
|
|
|
+ getTreeselect();
|
|
|
+ deleteDialog.visible = true;
|
|
|
+};
|
|
|
+
|
|
|
+/** 删除提交按钮 */
|
|
|
+const submitDeleteForm = async () => {
|
|
|
+ const menuIds = menuTreeRef.value?.getCheckedKeys();
|
|
|
+ if (menuIds.length < 0) {
|
|
|
+ proxy?.$modal.msgWarning('请选择要删除的菜单');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ deleteLoading.value = true;
|
|
|
+ await cascadeDelMenu(menuIds).finally(() => (deleteLoading.value = false));
|
|
|
+ await getList();
|
|
|
+ proxy?.$modal.msgSuccess('删除成功');
|
|
|
+ deleteDialog.visible = false;
|
|
|
+}
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
getList();
|
|
|
});
|
|
|
</script>
|
|
|
+
|
|
|
+<style scoped lang="scss">
|
|
|
+.tree-border {
|
|
|
+ height: 300px;
|
|
|
+ overflow: auto;
|
|
|
+}
|
|
|
+</style>
|