feat: 菜单管理和日志管理super权限控制
This commit is contained in:
@@ -4,10 +4,17 @@ import { Button, Tag } from 'ant-design-vue';
|
|||||||
import { SimpleScrollbar } from '~/packages/materials/src';
|
import { SimpleScrollbar } from '~/packages/materials/src';
|
||||||
import MenuOperateModal from './modules/menu-operate-modal.vue';
|
import MenuOperateModal from './modules/menu-operate-modal.vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import { useAuthStore } from '@/store/modules/auth';
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
||||||
|
const authStore = useAuthStore();
|
||||||
|
const isSuper = authStore.userInfo.roles?.includes('super');
|
||||||
|
|
||||||
const { data, columns, loading, getData } = useTable({
|
const { data, columns, loading, getData } = useTable({
|
||||||
apiFn: doGetMenuList,
|
apiFn: doGetMenuList,
|
||||||
columns: () => [
|
columns: () => {
|
||||||
|
let arr =
|
||||||
|
[
|
||||||
{
|
{
|
||||||
key: 'menuName',
|
key: 'menuName',
|
||||||
dataIndex: 'menuName',
|
dataIndex: 'menuName',
|
||||||
@@ -89,12 +96,15 @@ const { data, columns, loading, getData } = useTable({
|
|||||||
dataIndex: 'createTime',
|
dataIndex: 'createTime',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
title: t('page.menu.createtime')
|
title: t('page.menu.createtime')
|
||||||
},
|
}
|
||||||
{
|
]
|
||||||
|
if (isSuper) {
|
||||||
|
arr.push({
|
||||||
key: 'operate',
|
key: 'operate',
|
||||||
title: t('page.menu.operate'),
|
title: t('page.menu.operate'),
|
||||||
align: 'center',
|
align: 'center',
|
||||||
width: 200,
|
width: 200,
|
||||||
|
hidden: true,
|
||||||
customRender: ({ record }) => (
|
customRender: ({ record }) => (
|
||||||
<div class="flex justify-around gap-8px">
|
<div class="flex justify-around gap-8px">
|
||||||
<Button size="small" onClick={() => edit(record.menuId)}>
|
<Button size="small" onClick={() => edit(record.menuId)}>
|
||||||
@@ -102,8 +112,10 @@ const { data, columns, loading, getData } = useTable({
|
|||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
],
|
return arr;
|
||||||
|
},
|
||||||
rowKey: 'menuId'
|
rowKey: 'menuId'
|
||||||
});
|
});
|
||||||
const { handleEdit, handleAdd, checkedRowKeys, operateType, drawerVisible, onDeleted, editingData } = useTableOperate(
|
const { handleEdit, handleAdd, checkedRowKeys, operateType, drawerVisible, onDeleted, editingData } = useTableOperate(
|
||||||
@@ -145,7 +157,7 @@ function handleSubmitSuccess() {
|
|||||||
<SimpleScrollbar>
|
<SimpleScrollbar>
|
||||||
<div class="min-h-500px flex-col-stretch gap-16px overflow-hidden lt-sm:overflow-auto">
|
<div class="min-h-500px flex-col-stretch gap-16px overflow-hidden lt-sm:overflow-auto">
|
||||||
<ACard :title="t('page.menu.title')">
|
<ACard :title="t('page.menu.title')">
|
||||||
<AButton mb-4 type="primary" ghost @click="handleAdd">{{ t('page.menu.addmenu') }}</AButton>
|
<AButton mb-4 type="primary" ghost @click="handleAdd" v-if="isSuper">{{ t('page.menu.addmenu') }}</AButton>
|
||||||
|
|
||||||
<ATable
|
<ATable
|
||||||
:checked-row-keys="checkedRowKeys"
|
:checked-row-keys="checkedRowKeys"
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import Form from 'ant-design-vue/es/form/Form';
|
|||||||
import Modal from 'ant-design-vue/es/modal/Modal';
|
import Modal from 'ant-design-vue/es/modal/Modal';
|
||||||
import { useRouter, useRoute } from 'vue-router';
|
import { useRouter, useRoute } from 'vue-router';
|
||||||
import useDictStore from '@/store/modules/dict';
|
import useDictStore from '@/store/modules/dict';
|
||||||
|
import { useAuthStore } from '@/store/modules/auth';
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const routePath = route.path;
|
const routePath = route.path;
|
||||||
@@ -24,6 +25,8 @@ const { t } = useI18n();
|
|||||||
const wrapperEl = shallowRef<HTMLElement | null>(null);
|
const wrapperEl = shallowRef<HTMLElement | null>(null);
|
||||||
const { height: wrapperElHeight } = useElementSize(wrapperEl);
|
const { height: wrapperElHeight } = useElementSize(wrapperEl);
|
||||||
|
|
||||||
|
const authStore = useAuthStore();
|
||||||
|
const isSuper = authStore.userInfo.roles?.includes('super');
|
||||||
|
|
||||||
/**对话框对象信息状态 */
|
/**对话框对象信息状态 */
|
||||||
let modalState: any = reactive({
|
let modalState: any = reactive({
|
||||||
@@ -509,14 +512,14 @@ const handleReset = () => {
|
|||||||
<div class="flex flex-wrap justify-end gap-x-12px gap-y-8px lt-sm:(w-200px py-12px)">
|
<div class="flex flex-wrap justify-end gap-x-12px gap-y-8px lt-sm:(w-200px py-12px)">
|
||||||
<slot name="prefix"></slot>
|
<slot name="prefix"></slot>
|
||||||
<slot name="default">
|
<slot name="default">
|
||||||
<AButton size="small" ghost type="primary" @click="fnModalVisibleByEdit()">
|
<AButton size="small" ghost type="primary" @click="fnModalVisibleByEdit()" v-if="isSuper">
|
||||||
<div class="flex-y-center gap-8px">
|
<div class="flex-y-center gap-8px">
|
||||||
<icon-ic-round-plus class="text-icon" />
|
<icon-ic-round-plus class="text-icon" />
|
||||||
<span>{{ $t('common.add') }}</span>
|
<span>{{ $t('common.add') }}</span>
|
||||||
</div>
|
</div>
|
||||||
</AButton>
|
</AButton>
|
||||||
<APopconfirm :title="$t('common.confirmDelete')" :disabled="checkedRowKeys.length === 0"
|
<APopconfirm :title="$t('common.confirmDelete')" :disabled="checkedRowKeys.length === 0"
|
||||||
@confirm="handleBatchDelete">
|
@confirm="handleBatchDelete" v-if="isSuper">
|
||||||
<AButton size="small" danger :disabled="checkedRowKeys.length <= 0">
|
<AButton size="small" danger :disabled="checkedRowKeys.length <= 0">
|
||||||
<div class="flex-y-center gap-8px">
|
<div class="flex-y-center gap-8px">
|
||||||
<icon-ic-round-delete class="text-icon" />
|
<icon-ic-round-delete class="text-icon" />
|
||||||
@@ -559,7 +562,7 @@ const handleReset = () => {
|
|||||||
<template #bodyCell="{ column, record }">
|
<template #bodyCell="{ column, record }">
|
||||||
|
|
||||||
<template v-if="column.key === 'status'">
|
<template v-if="column.key === 'status'">
|
||||||
<a-switch v-model:checked="record.status" checked-value="0" un-checked-value="1" size="small"
|
<a-switch v-model:checked="record.status" checked-value="0" :disabled="!isSuper" un-checked-value="1" size="small"
|
||||||
@change="fnRecordStatus(record)" />
|
@change="fnRecordStatus(record)" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -573,7 +576,7 @@ const handleReset = () => {
|
|||||||
</template>
|
</template>
|
||||||
</a-button>
|
</a-button>
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
<a-tooltip>
|
<a-tooltip v-if="isSuper">
|
||||||
<template #title>{{ t('common.edit') }}</template>
|
<template #title>{{ t('common.edit') }}</template>
|
||||||
<a-button type="link" @click.prevent="fnModalVisibleByEdit(record.jobId)">
|
<a-button type="link" @click.prevent="fnModalVisibleByEdit(record.jobId)">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
@@ -582,7 +585,7 @@ const handleReset = () => {
|
|||||||
</a-button>
|
</a-button>
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
|
|
||||||
<a-tooltip>
|
<a-tooltip v-if="isSuper">
|
||||||
<template #title>{{ t('common.delete') }}</template>
|
<template #title>{{ t('common.delete') }}</template>
|
||||||
<a-button type="link" @click.prevent="fnRecordDelete(record.jobId)">
|
<a-button type="link" @click.prevent="fnRecordDelete(record.jobId)">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
@@ -591,7 +594,7 @@ const handleReset = () => {
|
|||||||
</a-button>
|
</a-button>
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
|
|
||||||
<a-tooltip>
|
<a-tooltip v-if="isSuper">
|
||||||
<template #title>{{ t('page.manage.task.runOne') }}</template>
|
<template #title>{{ t('page.manage.task.runOne') }}</template>
|
||||||
<a-button type="link" @click.prevent="fnRunTask(record.jobId)">
|
<a-button type="link" @click.prevent="fnRunTask(record.jobId)">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
|
|||||||
Reference in New Issue
Block a user