feat: menu supports carrying default query (#4687)

This commit is contained in:
Vben
2024-10-19 19:50:23 +08:00
committed by GitHub
parent 0df8c5c02c
commit 477a05c26c
21 changed files with 94 additions and 29 deletions

View File

@@ -102,6 +102,10 @@ interface RouteMeta {
* 用于路由->菜单排序
*/
order?: number;
/**
* 菜单所携带的参数
*/
query?: Recordable;
/**
* 标题名称
*/

View File

@@ -29,6 +29,7 @@ export class ModalApi {
} = options;
const defaultState: ModalState = {
bordered: false,
centered: false,
class: '',
closeOnClickModal: true,

View File

@@ -3,15 +3,22 @@ import type { ModalApi } from './modal-api';
import type { Component, Ref } from 'vue';
export interface ModalProps {
/**
* 是否显示边框
* @default false
*/
bordered?: boolean;
/**
* 取消按钮文字
*/
cancelText?: string;
/**
* 是否居中
* @default false
*/
centered?: boolean;
class?: string;
/**
* 是否显示右上角的关闭按钮

View File

@@ -52,6 +52,7 @@ const { isMobile } = useIsMobile();
const state = props.modalApi?.useStore?.();
const {
bordered,
cancelText,
centered,
class: modalClass,
@@ -170,9 +171,11 @@ function handleFocusOutside(e: Event) {
ref="contentRef"
:class="
cn(
'border-border left-0 right-0 top-[10vh] mx-auto flex max-h-[80%] w-[520px] flex-col border p-0',
'left-0 right-0 top-[10vh] mx-auto flex max-h-[80%] w-[520px] flex-col p-0 sm:rounded-2xl',
modalClass,
{
'border-border border': bordered,
'shadow-3xl': !bordered,
'left-0 top-0 size-full max-h-full !translate-x-0 !translate-y-0':
shouldFullscreen,
'top-1/2 !-translate-y-1/2': centered && !shouldFullscreen,
@@ -195,8 +198,9 @@ function handleFocusOutside(e: Event) {
ref="headerRef"
:class="
cn(
'border-b px-5 py-4',
'px-5 py-4',
{
'border-b': bordered,
hidden: !header,
'cursor-move select-none': shouldDraggable,
},

View File

@@ -4,12 +4,24 @@ import { isHttpUrl, openWindow } from '@vben/utils';
function useNavigation() {
const router = useRouter();
const routes = router.getRoutes();
const routeMetaMap = new Map<string, any>();
routes.forEach((route) => {
routeMetaMap.set(route.path, route.meta);
});
const navigation = async (path: string) => {
if (isHttpUrl(path)) {
openWindow(path, { target: '_blank' });
} else {
await router.push(path);
const meta = routeMetaMap.get(path);
const query = meta?.query ?? {};
await router.push({
path,
query,
});
}
};

View File

@@ -95,7 +95,11 @@ onMounted(() => {
<template>
<div>
<Modal :fullscreen-button="false" class="w-[600px]" header-class="py-2">
<Modal
:fullscreen-button="false"
class="w-[600px]"
header-class="py-2 border-b"
>
<template #title>
<div class="flex items-center">
<Search class="text-muted-foreground mr-2 size-4" />

View File

@@ -336,7 +336,7 @@ export const useTabbarStore = defineStore('core-tabbar', {
* @zh_CN 重置标签页标题
*/
async resetTabTitle(tab: TabDefinition) {
if (!tab?.meta?.newTabTitle) {
if (tab?.meta?.newTabTitle) {
return;
}
const findTab = this.tabs.find(