| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import { reactive, h } from 'vue' |
| import { NEllipsis, NIcon } from 'naive-ui' |
| import { useI18n } from 'vue-i18n' |
| import { |
| HomeOutlined, |
| ProfileOutlined, |
| FolderOutlined, |
| DatabaseOutlined, |
| DesktopOutlined, |
| SafetyCertificateOutlined, |
| UserOutlined, |
| LogoutOutlined, |
| FundProjectionScreenOutlined, |
| PartitionOutlined, |
| SettingOutlined, |
| FileSearchOutlined, |
| RobotOutlined, |
| AppstoreOutlined, |
| UsergroupAddOutlined, |
| UserAddOutlined, |
| WarningOutlined, |
| InfoCircleOutlined, |
| ControlOutlined, |
| SlackOutlined, |
| EnvironmentOutlined, |
| KeyOutlined, |
| SafetyOutlined, |
| GroupOutlined, |
| ContainerOutlined, |
| ApartmentOutlined, |
| BarsOutlined, |
| CloudServerOutlined, |
| ClusterOutlined |
| } from '@vicons/antd' |
| import { useRoute } from 'vue-router' |
| import { useUserStore } from '@/store/user/user' |
| import { timezoneList } from '@/common/timezone' |
| import type { UserInfoRes } from '@/service/modules/users/types' |
| |
| export function useDataList() { |
| const { t } = useI18n() |
| const route = useRoute() |
| const userStore = useUserStore() |
| |
| const renderIcon = (icon: any) => { |
| return () => h(NIcon, null, { default: () => h(icon) }) |
| } |
| |
| const localesOptions = [ |
| { |
| label: 'English', |
| key: 'en_US' |
| }, |
| { |
| label: '中文', |
| key: 'zh_CN' |
| } |
| ] |
| |
| const timezoneOptions = () => |
| timezoneList.map((item) => ({ label: item, value: item })) |
| |
| const state = reactive({ |
| isShowSide: false, |
| localesOptions, |
| timezoneOptions: timezoneOptions(), |
| userDropdownOptions: [], |
| menuOptions: [], |
| headerMenuOptions: [], |
| sideMenuOptions: [] |
| }) |
| |
| const changeMenuOption = (state: any) => { |
| const projectCode = route.params.projectCode || '' |
| state.menuOptions = [ |
| { |
| label: () => h(NEllipsis, null, { default: () => t('menu.home') }), |
| key: 'home', |
| icon: renderIcon(HomeOutlined) |
| }, |
| { |
| label: () => h(NEllipsis, null, { default: () => t('menu.project') }), |
| key: 'projects', |
| icon: renderIcon(ProfileOutlined), |
| children: [ |
| { |
| label: t('menu.project_overview'), |
| key: `/projects/${projectCode}`, |
| icon: renderIcon(FundProjectionScreenOutlined) |
| }, |
| { |
| label: t('menu.workflow'), |
| key: 'workflow', |
| icon: renderIcon(PartitionOutlined), |
| children: [ |
| { |
| label: t('menu.workflow_relation'), |
| key: `/projects/${projectCode}/workflow/relation` |
| }, |
| { |
| label: t('menu.workflow_definition'), |
| key: `/projects/${projectCode}/workflow-definition` |
| }, |
| { |
| label: t('menu.workflow_instance'), |
| key: `/projects/${projectCode}/workflow/instances` |
| } |
| ] |
| }, |
| { |
| label: t('menu.task'), |
| key: 'task', |
| icon: renderIcon(SettingOutlined), |
| children: [ |
| { |
| label: t('menu.task_definition'), |
| key: `/projects/${projectCode}/task/definitions` |
| }, |
| { |
| label: t('menu.task_instance'), |
| key: `/projects/${projectCode}/task/instances` |
| } |
| ] |
| } |
| ] |
| }, |
| { |
| label: () => h(NEllipsis, null, { default: () => t('menu.resources') }), |
| key: 'resource', |
| icon: renderIcon(FolderOutlined), |
| children: [ |
| { |
| label: t('menu.file_manage'), |
| key: '/resource/file-manage', |
| icon: renderIcon(FileSearchOutlined) |
| }, |
| { |
| label: t('menu.udf_manage'), |
| key: 'udf-manage', |
| icon: renderIcon(RobotOutlined), |
| children: [ |
| { |
| label: t('menu.resource_manage'), |
| key: '/resource/resource-manage' |
| }, |
| { |
| label: t('menu.function_manage'), |
| key: '/resource/function-manage' |
| } |
| ] |
| }, |
| { |
| label: t('menu.task_group_manage'), |
| key: 'task-group-manage', |
| icon: renderIcon(GroupOutlined), |
| children: [ |
| { |
| label: t('menu.task_group_option'), |
| key: '/resource/task-group-option' |
| }, |
| { |
| label: t('menu.task_group_queue'), |
| key: '/resource/task-group-queue' |
| } |
| ] |
| } |
| ] |
| }, |
| { |
| label: () => |
| h(NEllipsis, null, { default: () => t('menu.data_quality') }), |
| key: 'data-quality', |
| icon: renderIcon(ContainerOutlined), |
| children: [ |
| { |
| label: t('menu.task_result'), |
| key: '/data-quality/task-result', |
| icon: renderIcon(ApartmentOutlined) |
| }, |
| { |
| label: t('menu.rule'), |
| key: '/data-quality/rule', |
| icon: renderIcon(BarsOutlined) |
| } |
| ] |
| }, |
| { |
| label: () => |
| h(NEllipsis, null, { default: () => t('menu.datasource') }), |
| key: 'datasource', |
| icon: renderIcon(DatabaseOutlined), |
| children: [] |
| }, |
| { |
| label: () => h(NEllipsis, null, { default: () => t('menu.monitor') }), |
| key: 'monitor', |
| icon: renderIcon(DesktopOutlined), |
| children: [ |
| { |
| label: t('menu.service_manage'), |
| key: 'service-manage', |
| icon: renderIcon(AppstoreOutlined), |
| children: [ |
| { |
| label: t('menu.master'), |
| key: '/monitor/master' |
| }, |
| { |
| label: t('menu.worker'), |
| key: '/monitor/worker' |
| }, |
| { |
| label: t('menu.db'), |
| key: '/monitor/db' |
| } |
| ] |
| }, |
| { |
| label: t('menu.statistical_manage'), |
| key: 'statistical-manage', |
| icon: renderIcon(AppstoreOutlined), |
| children: [ |
| { |
| label: t('menu.statistics'), |
| key: '/monitor/statistics' |
| }, |
| { |
| label: t('menu.audit_log'), |
| key: '/monitor/audit-log' |
| } |
| ] |
| } |
| ] |
| }, |
| { |
| label: () => h(NEllipsis, null, { default: () => t('menu.security') }), |
| key: 'security', |
| icon: renderIcon(SafetyCertificateOutlined), |
| children: |
| (userStore.getUserInfo as UserInfoRes).userType === 'ADMIN_USER' |
| ? [ |
| { |
| label: t('menu.tenant_manage'), |
| key: '/security/tenant-manage', |
| icon: renderIcon(UsergroupAddOutlined) |
| }, |
| { |
| label: t('menu.user_manage'), |
| key: '/security/user-manage', |
| icon: renderIcon(UserAddOutlined) |
| }, |
| { |
| label: t('menu.alarm_group_manage'), |
| key: '/security/alarm-group-manage', |
| icon: renderIcon(WarningOutlined) |
| }, |
| { |
| label: t('menu.alarm_instance_manage'), |
| key: '/security/alarm-instance-manage', |
| icon: renderIcon(InfoCircleOutlined) |
| }, |
| { |
| label: t('menu.worker_group_manage'), |
| key: '/security/worker-group-manage', |
| icon: renderIcon(ControlOutlined) |
| }, |
| { |
| label: t('menu.yarn_queue_manage'), |
| key: '/security/yarn-queue-manage', |
| icon: renderIcon(SlackOutlined) |
| }, |
| { |
| label: t('menu.environment_manage'), |
| key: '/security/environment-manage', |
| icon: renderIcon(EnvironmentOutlined) |
| }, |
| { |
| label: t('menu.cluster_manage'), |
| key: '/security/cluster-manage', |
| icon: renderIcon(ClusterOutlined) |
| }, |
| { |
| label: t('menu.k8s_namespace_manage'), |
| key: '/security/k8s-namespace-manage', |
| icon: renderIcon(CloudServerOutlined) |
| }, |
| { |
| label: t('menu.token_manage'), |
| key: '/security/token-manage', |
| icon: renderIcon(SafetyOutlined) |
| } |
| ] |
| : [ |
| { |
| label: t('menu.token_manage'), |
| key: '/security/token-manage', |
| icon: renderIcon(SafetyOutlined) |
| } |
| ] |
| } |
| ] |
| } |
| |
| const changeHeaderMenuOptions = (state: any) => { |
| state.headerMenuOptions = state.menuOptions.map( |
| (item: { label: string; key: string; icon: any }) => { |
| return { |
| label: item.label, |
| key: item.key, |
| icon: item.icon |
| } |
| } |
| ) |
| } |
| |
| const changeUserDropdown = (state: any) => { |
| state.userDropdownOptions = [ |
| { |
| label: t('user_dropdown.profile'), |
| key: 'profile', |
| icon: renderIcon(UserOutlined) |
| }, |
| { |
| label: t('user_dropdown.password'), |
| key: 'password', |
| icon: renderIcon(KeyOutlined), |
| disabled: (userStore.getUserInfo as UserInfoRes).securityConfigType !== 'PASSWORD' |
| }, |
| { |
| label: t('user_dropdown.logout'), |
| key: 'logout', |
| icon: renderIcon(LogoutOutlined) |
| } |
| ] |
| } |
| |
| return { |
| state, |
| changeHeaderMenuOptions, |
| changeMenuOption, |
| changeUserDropdown |
| } |
| } |