2
0

Merge remote-tracking branch 'origin/main'

This commit is contained in:
zhongzm
2025-04-28 16:48:58 +08:00
4 changed files with 159 additions and 144 deletions

View File

@@ -91,136 +91,136 @@ export const generatedRoutes: GeneratedRoute[] = [
}, },
// 下面是指定角色才有 // 下面是指定角色才有
{ // {
name: 'function', // name: 'function',
path: '/function', // path: '/function',
component: 'layout.base', // component: 'layout.base',
meta: { // meta: {
title: 'function', // title: 'function',
i18nKey: 'route.function', // i18nKey: 'route.function',
icon: 'icon-park-outline:all-application', // icon: 'icon-park-outline:all-application',
order: 1002, // order: 1002,
roles: ['super'] // roles: ['super']
}, // },
children: [ // children: [
{ // {
name: 'function_hide-child', // name: 'function_hide-child',
path: '/function/hide-child', // path: '/function/hide-child',
meta: { // meta: {
title: 'function_hide-child', // title: 'function_hide-child',
i18nKey: 'route.function_hide-child', // i18nKey: 'route.function_hide-child',
icon: 'material-symbols:filter-list-off', // icon: 'material-symbols:filter-list-off',
order: 2 // order: 2
}, // },
redirect: '/function/hide-child/one', // redirect: '/function/hide-child/one',
children: [ // children: [
{ // {
name: 'function_hide-child_one', // name: 'function_hide-child_one',
path: '/function/hide-child/one', // path: '/function/hide-child/one',
component: 'view.function_hide-child_one', // component: 'view.function_hide-child_one',
meta: { // meta: {
title: 'function_hide-child_one', // title: 'function_hide-child_one',
i18nKey: 'route.function_hide-child_one', // i18nKey: 'route.function_hide-child_one',
icon: 'material-symbols:filter-list-off', // icon: 'material-symbols:filter-list-off',
hideInMenu: true, // hideInMenu: true,
activeMenu: 'function_hide-child' // activeMenu: 'function_hide-child'
} // }
}, // },
{ // {
name: 'function_hide-child_three', // name: 'function_hide-child_three',
path: '/function/hide-child/three', // path: '/function/hide-child/three',
component: 'view.function_hide-child_three', // component: 'view.function_hide-child_three',
meta: { // meta: {
title: 'function_hide-child_three', // title: 'function_hide-child_three',
i18nKey: 'route.function_hide-child_three', // i18nKey: 'route.function_hide-child_three',
hideInMenu: true, // hideInMenu: true,
activeMenu: 'function_hide-child' // activeMenu: 'function_hide-child'
} // }
}, // },
{ // {
name: 'function_hide-child_two', // name: 'function_hide-child_two',
path: '/function/hide-child/two', // path: '/function/hide-child/two',
component: 'view.function_hide-child_two', // component: 'view.function_hide-child_two',
meta: { // meta: {
title: 'function_hide-child_two', // title: 'function_hide-child_two',
i18nKey: 'route.function_hide-child_two', // i18nKey: 'route.function_hide-child_two',
hideInMenu: true, // hideInMenu: true,
activeMenu: 'function_hide-child' // activeMenu: 'function_hide-child'
} // }
} // }
] // ]
}, // },
{ // {
name: 'function_multi-tab', // name: 'function_multi-tab',
path: '/function/multi-tab', // path: '/function/multi-tab',
component: 'view.function_multi-tab', // component: 'view.function_multi-tab',
meta: { // meta: {
title: 'function_multi-tab', // title: 'function_multi-tab',
i18nKey: 'route.function_multi-tab', // i18nKey: 'route.function_multi-tab',
icon: 'ic:round-tab', // icon: 'ic:round-tab',
multiTab: true, // multiTab: true,
hideInMenu: true, // hideInMenu: true,
activeMenu: 'function_tab' // activeMenu: 'function_tab'
} // }
}, // },
{ // {
name: 'function_request', // name: 'function_request',
path: '/function/request', // path: '/function/request',
component: 'view.function_request', // component: 'view.function_request',
meta: { // meta: {
title: 'function_request', // title: 'function_request',
i18nKey: 'route.function_request', // i18nKey: 'route.function_request',
icon: 'carbon:network-overlay', // icon: 'carbon:network-overlay',
order: 3 // order: 3
} // }
}, // },
{ // {
name: 'function_super-page', // name: 'function_super-page',
path: '/function/super-page', // path: '/function/super-page',
component: 'view.function_super-page', // component: 'view.function_super-page',
meta: { // meta: {
title: 'function_super-page', // title: 'function_super-page',
i18nKey: 'route.function_super-page', // i18nKey: 'route.function_super-page',
icon: 'ic:round-supervisor-account', // icon: 'ic:round-supervisor-account',
order: 5, // order: 5,
} // }
}, // },
{ // {
name: 'function_tab', // name: 'function_tab',
path: '/function/tab', // path: '/function/tab',
component: 'view.function_tab', // component: 'view.function_tab',
meta: { // meta: {
title: 'function_tab', // title: 'function_tab',
i18nKey: 'route.function_tab', // i18nKey: 'route.function_tab',
icon: 'ic:round-tab', // icon: 'ic:round-tab',
order: 1 // order: 1
} // }
}, // },
{ // {
name: 'function_toggle-auth', // name: 'function_toggle-auth',
path: '/function/toggle-auth', // path: '/function/toggle-auth',
component: 'view.function_toggle-auth', // component: 'view.function_toggle-auth',
meta: { // meta: {
title: 'function_toggle-auth', // title: 'function_toggle-auth',
i18nKey: 'route.function_toggle-auth', // i18nKey: 'route.function_toggle-auth',
icon: 'ic:round-construction', // icon: 'ic:round-construction',
order: 4 // order: 4
} // }
} // }
] // ]
}, // },
{ // {
name: 'about', // name: 'about',
path: '/about', // path: '/about',
component: 'layout.base$view.about', // component: 'layout.base$view.about',
meta: { // meta: {
title: 'about', // title: 'about',
i18nKey: 'route.about', // i18nKey: 'route.about',
icon: 'fluent:book-information-24-regular', // icon: 'fluent:book-information-24-regular',
order: 1003, // order: 1003,
roles: ['super'] // roles: ['super']
} // }
}, // },
{ {
name: 'dictData', name: 'dictData',
path: '/manage/dict/dictData', path: '/manage/dict/dictData',

View File

@@ -433,11 +433,11 @@ export function resetPassword(data: { email: string; code: string; password: str
}); });
} }
/** 通过原密码修改密码 */ /** 通过原密码修改密码 */
export function updatePasswordByOld(data: { oldPassword: string; newPassword: string }) { export function updatePasswordByOld(params: { oldPassword: string; newPassword: string }) {
return request<any>({ return request<any>({
url: '/system/user/profile/updatePwd', url: '/system/user/profile/updatePwd',
method: 'put', method: 'put',
data params
}); });
} }
/** 添加站点 */ /** 添加站点 */

View File

@@ -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"

View File

@@ -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>