mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-10-27 17:26:03 +08:00
151 lines
4.7 KiB
Vue
151 lines
4.7 KiB
Vue
<template>
|
|
<div>
|
|
<el-drawer v-model="drawerVisible" :destroy-on-close="true" :close-on-click-modal="false" size="30%">
|
|
<template #header>
|
|
<DrawerHeader :header="$t('setting.advancedMenuShow')" :back="handleClose" />
|
|
</template>
|
|
|
|
<ComplexTable
|
|
:data="treeData.hideMenu"
|
|
:show-header="false"
|
|
style="width: 100%; margin-bottom: 20px"
|
|
row-key="id"
|
|
default-expand-all
|
|
>
|
|
<el-table-column prop="title" :label="$t('setting.menu')">
|
|
<template #default="{ row }">
|
|
{{ i18n.global.t(row.title) }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="isCheck" :label="$t('setting.ifShow')">
|
|
<template #default="{ row }">
|
|
<el-switch v-model="row.isCheck" @change="onSaveStatus(row)" />
|
|
</template>
|
|
</el-table-column>
|
|
</ComplexTable>
|
|
|
|
<template #footer>
|
|
<span class="dialog-footer">
|
|
<el-button @click="drawerVisible = false">{{ $t('commons.button.cancel') }}</el-button>
|
|
<el-button :disabled="loading" type="primary" @click="saveHideMenus">
|
|
{{ $t('commons.button.confirm') }}
|
|
</el-button>
|
|
</span>
|
|
</template>
|
|
</el-drawer>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { reactive, ref } from 'vue';
|
|
import DrawerHeader from '@/components/drawer-header/index.vue';
|
|
import { DialogProps, ElMessageBox } from 'element-plus';
|
|
import i18n from '@/lang';
|
|
import { updateSetting } from '@/api/modules/setting';
|
|
import { MsgSuccess } from '@/utils/message';
|
|
|
|
const drawerVisible = ref();
|
|
const loading = ref();
|
|
const defaultCheck = ref([]);
|
|
const emit = defineEmits<{ (e: 'search'): void }>();
|
|
interface DialogProps {
|
|
menuList: string;
|
|
}
|
|
const menuList = ref();
|
|
|
|
const treeData = reactive({
|
|
hideMenu: [],
|
|
checkedData: [],
|
|
});
|
|
|
|
function loadCheck(data: any, checkList: any) {
|
|
if (data.children === null) {
|
|
if (data.isCheck) {
|
|
checkList.push(data.id);
|
|
}
|
|
return;
|
|
}
|
|
for (const item of data) {
|
|
if (item.isCheck) {
|
|
checkList.push(item.id);
|
|
continue;
|
|
}
|
|
if (item.children) {
|
|
loadCheck(item.children, checkList);
|
|
}
|
|
}
|
|
}
|
|
|
|
const onSaveStatus = async (row: any) => {
|
|
if (row.label === '/xpack') {
|
|
if (!row.isCheck) {
|
|
for (const item of treeData.hideMenu[0].children) {
|
|
item.isCheck = false;
|
|
}
|
|
} else {
|
|
let flag = false;
|
|
for (const item of treeData.hideMenu[0].children) {
|
|
if (item.isCheck) {
|
|
flag = true;
|
|
}
|
|
}
|
|
if (!flag && row.isCheck) {
|
|
for (const item of treeData.hideMenu[0].children) {
|
|
item.isCheck = true;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
let flag = false;
|
|
if (row.isCheck) {
|
|
treeData.hideMenu[0].isCheck = true;
|
|
}
|
|
for (const item of treeData.hideMenu[0].children) {
|
|
if (item.isCheck) {
|
|
flag = true;
|
|
}
|
|
}
|
|
if (!flag) {
|
|
treeData.hideMenu[0].isCheck = false;
|
|
}
|
|
}
|
|
};
|
|
|
|
const acceptParams = (params: DialogProps): void => {
|
|
menuList.value = params.menuList;
|
|
drawerVisible.value = true;
|
|
treeData.hideMenu = [];
|
|
defaultCheck.value = [];
|
|
treeData.hideMenu.push(JSON.parse(menuList.value));
|
|
loadCheck(treeData.hideMenu, defaultCheck.value);
|
|
};
|
|
|
|
const handleClose = () => {
|
|
drawerVisible.value = false;
|
|
};
|
|
|
|
const saveHideMenus = async () => {
|
|
ElMessageBox.confirm(i18n.global.t('setting.confirmMessage'), i18n.global.t('setting.advancedMenuShow'), {
|
|
confirmButtonText: i18n.global.t('commons.button.confirm'),
|
|
cancelButtonText: i18n.global.t('commons.button.cancel'),
|
|
type: 'info',
|
|
}).then(async () => {
|
|
const updateJson = JSON.stringify(treeData.hideMenu[0]);
|
|
await updateSetting({ key: 'XpackHideMenu', value: updateJson })
|
|
.then(async () => {
|
|
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));
|
|
loading.value = false;
|
|
drawerVisible.value = false;
|
|
emit('search');
|
|
window.location.reload();
|
|
})
|
|
.catch(() => {
|
|
loading.value = false;
|
|
});
|
|
});
|
|
};
|
|
|
|
defineExpose({
|
|
acceptParams,
|
|
});
|
|
</script>
|