1.更新跳转外部链接
This commit is contained in:
2026-03-12 14:58:38 +08:00
parent 43e37e3c54
commit 1cd7a43bc5
5 changed files with 171 additions and 122 deletions
+3
View File
@@ -30,3 +30,6 @@ VITE_EMERGENCY_SCREEN=http://emer.dev.yg.dt.io/
#VITE_APP_SUB_jeecg-app-1 = '//localhost:8092' #VITE_APP_SUB_jeecg-app-1 = '//localhost:8092'
VITE_PLATFORM = 'YT' VITE_PLATFORM = 'YT'
# 跳转外部链接
VITE_OUT_URL=https://console-jkglpt.iosp.ydpt.tech/hb/healthadmin/index.html?param=
+3
View File
@@ -39,3 +39,6 @@ VITE_LEGACY = false
# 油田平台CODE # 油田平台CODE
VITE_PLATFORM = 'YT' VITE_PLATFORM = 'YT'
# 跳转外部链接
VITE_OUT_URL=https://console-jkglpt.iosp.ydpt.tech/hb/healthadmin/index.html?param=
+3
View File
@@ -37,3 +37,6 @@ VITE_USE_PWA = false
VITE_LEGACY = false VITE_LEGACY = false
VITE_PLATFORM = 'YT' VITE_PLATFORM = 'YT'
# 跳转外部链接
VITE_OUT_URL=https://gstest.superwx.cn/healthapiadmin/index.html?param=
+1
View File
@@ -5,6 +5,7 @@ ENV LANG en_US.UTF-8
ENV VITE_GLOB_API_URL https://xj-api.mcrm.vip:8888 ENV VITE_GLOB_API_URL https://xj-api.mcrm.vip:8888
ENV VITE_GLOB_DOMAIN_URL https://xj-api.mcrm.vip:8888 ENV VITE_GLOB_DOMAIN_URL https://xj-api.mcrm.vip:8888
ENV VITE_OUT_URL https://gstest.superwx.cn/healthapiadmin/index.html?param=
RUN echo "server { \ RUN echo "server { \
#解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 \ #解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 \
+161 -122
View File
@@ -13,148 +13,187 @@
:subMenuOpenDelay="0.2" :subMenuOpenDelay="0.2"
v-bind="getInlineCollapseOptions" v-bind="getInlineCollapseOptions"
> >
<template v-for="item in items" :key="item.path"> <template
v-for="item in items.concat(
hasPermission('health:health-bank') ? [{ name: '健康银行', icon: 'ant-design:bank-outlined', title: '健康银行' }] : []
)"
:key="item.path"
>
<BasicSubMenuItem :item="item" :theme="theme" :isHorizontal="isHorizontal" /> <BasicSubMenuItem :item="item" :theme="theme" :isHorizontal="isHorizontal" />
</template> </template>
</Menu> </Menu>
</template> </template>
<script lang="ts"> <script lang="ts">
import type { MenuState } from './types'; import type { MenuState } from './types';
import { computed, defineComponent, reactive, ref, toRefs, unref, watch } from 'vue'; import { computed, defineComponent, reactive, ref, toRefs, unref, watch } from 'vue';
import { Menu } from 'ant-design-vue'; import { Menu } from 'ant-design-vue';
import BasicSubMenuItem from './components/BasicSubMenuItem.vue'; import BasicSubMenuItem from './components/BasicSubMenuItem.vue';
import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum'; import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum';
import { useOpenKeys } from './useOpenKeys'; import { useOpenKeys } from './useOpenKeys';
import { RouteLocationNormalizedLoaded, useRouter } from 'vue-router'; import { RouteLocationNormalizedLoaded, useRouter } from 'vue-router';
import { isFunction } from '/@/utils/is'; import { isFunction } from '/@/utils/is';
import { basicProps } from './props'; import { basicProps } from './props';
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
import { REDIRECT_NAME } from '/@/router/constant'; import { REDIRECT_NAME } from '/@/router/constant';
import { useDesign } from '/@/hooks/web/useDesign'; import { useDesign } from '/@/hooks/web/useDesign';
import { getCurrentParentPath } from '/@/router/menus'; import { getCurrentParentPath } from '/@/router/menus';
import { listenerRouteChange } from '/@/logics/mitt/routeChange'; import { listenerRouteChange } from '/@/logics/mitt/routeChange';
import { getAllParentPath } from '/@/router/helper/menuHelper'; import { getAllParentPath } from '/@/router/helper/menuHelper';
import { usePermission } from '/@/hooks/web/usePermission';
import { defHttp } from '/@/utils/http/axios';
import { getEnvInfo } from '/@/utils/getEnv';
import { getToken } from '/@/utils/auth';
import { useLoading } from '/@/components/Loading';
export default defineComponent({ export default defineComponent({
name: 'BasicMenu', name: 'BasicMenu',
components: { components: {
Menu, Menu,
BasicSubMenuItem, BasicSubMenuItem,
}, },
props: basicProps, props: basicProps,
emits: ['menuClick'], emits: ['menuClick'],
setup(props, { emit }) { setup(props, { emit }) {
const isClickGo = ref(false); const isClickGo = ref(false);
const currentActiveMenu = ref(''); const currentActiveMenu = ref('');
const { hasPermission } = usePermission();
const [open, close] = useLoading({
target: '', // 遮罩挂载的目标元素,默认body
});
const menuState = reactive<MenuState>({ const menuState = reactive<MenuState>({
defaultSelectedKeys: [], defaultSelectedKeys: [],
openKeys: [], openKeys: [],
selectedKeys: [], selectedKeys: [],
collapsedOpenKeys: [], collapsedOpenKeys: [],
}); });
const { prefixCls } = useDesign('basic-menu'); const { prefixCls } = useDesign('basic-menu');
const { items, mode, accordion } = toRefs(props); const { items, mode, accordion } = toRefs(props);
const { getCollapsed, getTopMenuAlign, getSplit } = useMenuSetting(); const { getCollapsed, getTopMenuAlign, getSplit } = useMenuSetting();
const { currentRoute } = useRouter(); const { currentRoute } = useRouter();
const { handleOpenChange, setOpenKeys, getOpenKeys } = useOpenKeys(menuState, items, mode as any, accordion); const { handleOpenChange, setOpenKeys, getOpenKeys } = useOpenKeys(menuState, items, mode as any, accordion);
const getIsTopMenu = computed(() => { const getIsTopMenu = computed(() => {
const { type, mode } = props; const { type, mode } = props;
return (type === MenuTypeEnum.TOP_MENU && mode === MenuModeEnum.HORIZONTAL) || (props.isHorizontal && unref(getSplit)); return (type === MenuTypeEnum.TOP_MENU && mode === MenuModeEnum.HORIZONTAL) || (props.isHorizontal && unref(getSplit));
}); });
const getMenuClass = computed(() => { const getMenuClass = computed(() => {
const align = props.isHorizontal && unref(getSplit) ? 'start' : unref(getTopMenuAlign); const align = props.isHorizontal && unref(getSplit) ? 'start' : unref(getTopMenuAlign);
return [ return [
prefixCls, prefixCls,
`justify-${align}`, `justify-${align}`,
{ {
[`${prefixCls}__second`]: !props.isHorizontal && unref(getSplit), [`${prefixCls}__second`]: !props.isHorizontal && unref(getSplit),
[`${prefixCls}__sidebar-hor`]: unref(getIsTopMenu), [`${prefixCls}__sidebar-hor`]: unref(getIsTopMenu),
}, },
]; ];
}); });
const getInlineCollapseOptions = computed(() => { const getInlineCollapseOptions = computed(() => {
const isInline = props.mode === MenuModeEnum.INLINE; const isInline = props.mode === MenuModeEnum.INLINE;
const inlineCollapseOptions: { inlineCollapsed?: boolean } = {}; const inlineCollapseOptions: { inlineCollapsed?: boolean } = {};
if (isInline) { if (isInline) {
inlineCollapseOptions.inlineCollapsed = props.mixSider ? false : unref(getCollapsed); inlineCollapseOptions.inlineCollapsed = props.mixSider ? false : unref(getCollapsed);
}
return inlineCollapseOptions;
});
listenerRouteChange((route) => {
if (route.name === REDIRECT_NAME) return;
handleMenuChange(route);
currentActiveMenu.value = route.meta?.currentActiveMenu as string;
if (unref(currentActiveMenu)) {
menuState.selectedKeys = [unref(currentActiveMenu)];
setOpenKeys(unref(currentActiveMenu));
}
});
!props.mixSider &&
watch(
() => props.items,
() => {
handleMenuChange();
}
);
//update-begin-author:taoyan date:2022-6-1 for: VUEN-1144 online 配置成菜单后,打开菜单,显示名称未展示为菜单名称
async function handleMenuClick({ item, key }: { item: any; key: string; keyPath: string[] }) {
if (item.title === '健康银行') {
open();
const url = getEnvInfo().VITE_GLOB_API_URL;
await defHttp
.get({
url: '/health-system/api/sys/encryptInfo',
params: {
str: {
scheme: url.split('://')[0],
host: url.split('://')[1],
tokenF: getToken(),
},
},
})
.then((res) => {
console.log(res);
window.open(`${getEnvInfo().VITE_OUT_URL}${res.encryptData}`, '_blank');
close();
})
.catch(() => {
close();
});
return;
}
const { beforeClickFn } = props;
if (beforeClickFn && isFunction(beforeClickFn)) {
const flag = await beforeClickFn(key);
if (!flag) return;
}
emit('menuClick', key, item);
//update-end-author:taoyan date:2022-6-1 for: VUEN-1144 online 配置成菜单后,打开菜单,显示名称未展示为菜单名称
isClickGo.value = true;
// const parentPath = await getCurrentParentPath(key);
// menuState.openKeys = [parentPath];
menuState.selectedKeys = [key];
} }
return inlineCollapseOptions;
});
listenerRouteChange((route) => { async function handleMenuChange(route?: RouteLocationNormalizedLoaded) {
if (route.name === REDIRECT_NAME) return; if (unref(isClickGo)) {
handleMenuChange(route); isClickGo.value = false;
currentActiveMenu.value = route.meta?.currentActiveMenu as string; return;
}
if (unref(currentActiveMenu)) { const path = (route || unref(currentRoute)).meta?.currentActiveMenu || (route || unref(currentRoute)).path;
menuState.selectedKeys = [unref(currentActiveMenu)]; setOpenKeys(path);
setOpenKeys(unref(currentActiveMenu)); if (unref(currentActiveMenu)) return;
if (props.isHorizontal && unref(getSplit)) {
const parentPath = await getCurrentParentPath(path);
menuState.selectedKeys = [parentPath];
} else {
const parentPaths = await getAllParentPath(props.items, path);
menuState.selectedKeys = parentPaths;
}
} }
});
!props.mixSider && return {
watch( handleMenuClick,
() => props.items, getInlineCollapseOptions,
() => { getMenuClass,
handleMenuChange(); handleOpenChange,
} getOpenKeys,
); ...toRefs(menuState),
hasPermission,
//update-begin-author:taoyan date:2022-6-1 for: VUEN-1144 online 配置成菜单后,打开菜单,显示名称未展示为菜单名称 };
async function handleMenuClick({ item, key }: { item: any; key: string; keyPath: string[] }) { },
const { beforeClickFn } = props; });
if (beforeClickFn && isFunction(beforeClickFn)) {
const flag = await beforeClickFn(key);
if (!flag) return;
}
emit('menuClick', key, item);
//update-end-author:taoyan date:2022-6-1 for: VUEN-1144 online 配置成菜单后,打开菜单,显示名称未展示为菜单名称
isClickGo.value = true;
// const parentPath = await getCurrentParentPath(key);
// menuState.openKeys = [parentPath];
menuState.selectedKeys = [key];
}
async function handleMenuChange(route?: RouteLocationNormalizedLoaded) {
if (unref(isClickGo)) {
isClickGo.value = false;
return;
}
const path = (route || unref(currentRoute)).meta?.currentActiveMenu || (route || unref(currentRoute)).path;
setOpenKeys(path);
if (unref(currentActiveMenu)) return;
if (props.isHorizontal && unref(getSplit)) {
const parentPath = await getCurrentParentPath(path);
menuState.selectedKeys = [parentPath];
} else {
const parentPaths = await getAllParentPath(props.items, path);
menuState.selectedKeys = parentPaths;
}
}
return {
handleMenuClick,
getInlineCollapseOptions,
getMenuClass,
handleOpenChange,
getOpenKeys,
...toRefs(menuState),
};
},
});
</script> </script>
<style lang="less"> <style lang="less">
@import './index.less'; @import './index.less';
</style> </style>