mirror of
https://github.com/chatopera/cosin.git
synced 2025-08-01 16:38:02 +08:00
fix: auto set page header by current route
Signed-off-by: Kaifuny <superbiger.github@gmail.com>
This commit is contained in:
parent
12cb53bba4
commit
c5d3179d0e
@ -1,10 +1,11 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
import { ref, h } from 'vue'
|
||||||
import { MenuOption } from 'naive-ui'
|
import { MenuOption, NBreadcrumbItem } from 'naive-ui'
|
||||||
|
|
||||||
import { MenusLayout } from '@cskefu/shared-ui'
|
import { MenusLayout } from '@cskefu/shared-ui'
|
||||||
import { routesToMenus } from '@cskefu/shared-utils'
|
import { routesToMenus } from '@cskefu/shared-utils'
|
||||||
import { Menu } from '@cskefu/shared-ui'
|
import { Menu } from '@cskefu/shared-ui'
|
||||||
|
import { ROUTE_NAME } from '@cskefu/models'
|
||||||
|
|
||||||
import routes from '../routes'
|
import routes from '../routes'
|
||||||
|
|
||||||
@ -12,7 +13,19 @@ const menuOptions: MenuOption[] = routesToMenus(routes)
|
|||||||
const collapsed = ref<boolean>(false)
|
const collapsed = ref<boolean>(false)
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<MenusLayout v-model:collapsed="collapsed">
|
<MenusLayout
|
||||||
|
v-model:collapsed="collapsed"
|
||||||
|
:page-title="$route.meta.title"
|
||||||
|
:page-icon="$route.meta.icon"
|
||||||
|
:page-breadcrumbs="[
|
||||||
|
h(NBreadcrumbItem, { to: { name: ROUTE_NAME.DASHBOARD_INDEX } }, '首页'),
|
||||||
|
h(
|
||||||
|
NBreadcrumbItem,
|
||||||
|
{ to: { name: $route.name } },
|
||||||
|
$route.meta.title as string
|
||||||
|
),
|
||||||
|
]"
|
||||||
|
>
|
||||||
<Menu
|
<Menu
|
||||||
v-model:collapsed="collapsed"
|
v-model:collapsed="collapsed"
|
||||||
:options="menuOptions"
|
:options="menuOptions"
|
||||||
|
@ -1,15 +1,28 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { MenusLayout } from '@cskefu/shared-ui'
|
import { MenusLayout } from '@cskefu/shared-ui'
|
||||||
import { MenuOption } from 'naive-ui'
|
import { MenuOption, NBreadcrumbItem } from 'naive-ui'
|
||||||
|
|
||||||
import { Menu } from '@cskefu/shared-ui'
|
import { Menu } from '@cskefu/shared-ui'
|
||||||
import { ref } from 'vue'
|
import { ROUTE_NAME } from '@cskefu/models'
|
||||||
|
import { ref, h } from 'vue'
|
||||||
|
|
||||||
const menuOptions: MenuOption[] = []
|
const menuOptions: MenuOption[] = []
|
||||||
const collapsed = ref<boolean>(false)
|
const collapsed = ref<boolean>(false)
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<MenusLayout v-model:collapsed="collapsed">
|
<MenusLayout
|
||||||
|
v-model:collapsed="collapsed"
|
||||||
|
:page-title="$route.meta.title"
|
||||||
|
:page-icon="$route.meta.icon"
|
||||||
|
:page-breadcrumbs="[
|
||||||
|
h(NBreadcrumbItem, { to: { name: ROUTE_NAME.DASHBOARD_INDEX } }, '首页'),
|
||||||
|
h(
|
||||||
|
NBreadcrumbItem,
|
||||||
|
{ to: { name: $route.name } },
|
||||||
|
$route.meta.title as string
|
||||||
|
),
|
||||||
|
]"
|
||||||
|
>
|
||||||
<Menu
|
<Menu
|
||||||
v-model:collapsed="collapsed"
|
v-model:collapsed="collapsed"
|
||||||
:options="menuOptions"
|
:options="menuOptions"
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
import { ref, h } from 'vue'
|
||||||
import { MenuOption } from 'naive-ui'
|
import { MenuOption, NBreadcrumbItem } from 'naive-ui'
|
||||||
|
|
||||||
import { MenusLayout } from '@cskefu/shared-ui'
|
import { MenusLayout } from '@cskefu/shared-ui'
|
||||||
import { routesToMenus } from '@cskefu/shared-utils'
|
import { routesToMenus } from '@cskefu/shared-utils'
|
||||||
import { Menu } from '@cskefu/shared-ui'
|
import { Menu } from '@cskefu/shared-ui'
|
||||||
|
import { ROUTE_NAME } from '@cskefu/models'
|
||||||
|
|
||||||
import routes from '../routes'
|
import routes from '../routes'
|
||||||
|
|
||||||
@ -12,7 +13,19 @@ const menuOptions: MenuOption[] = routesToMenus(routes)
|
|||||||
const collapsed = ref<boolean>(false)
|
const collapsed = ref<boolean>(false)
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<MenusLayout v-model:collapsed="collapsed">
|
<MenusLayout
|
||||||
|
v-model:collapsed="collapsed"
|
||||||
|
:page-title="$route.meta.title"
|
||||||
|
:page-icon="$route.meta.icon"
|
||||||
|
:page-breadcrumbs="[
|
||||||
|
h(NBreadcrumbItem, { to: { name: ROUTE_NAME.DASHBOARD_INDEX } }, '首页'),
|
||||||
|
h(
|
||||||
|
NBreadcrumbItem,
|
||||||
|
{ to: { name: $route.name } },
|
||||||
|
$route.meta.title as string
|
||||||
|
),
|
||||||
|
]"
|
||||||
|
>
|
||||||
<Menu
|
<Menu
|
||||||
v-model:collapsed="collapsed"
|
v-model:collapsed="collapsed"
|
||||||
:options="menuOptions"
|
:options="menuOptions"
|
||||||
|
@ -28,7 +28,7 @@ const routes: RouteRecordRaw[] = [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'index',
|
path: 'chat-manage',
|
||||||
name: ROUTE_NAME.SEATS_CHATMANAGE_INDEX,
|
name: ROUTE_NAME.SEATS_CHATMANAGE_INDEX,
|
||||||
component: () => import('../views/HomeView.vue'),
|
component: () => import('../views/HomeView.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
@ -38,7 +38,7 @@ const routes: RouteRecordRaw[] = [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'index',
|
path: 'leave-message',
|
||||||
name: ROUTE_NAME.SEATS_LEAVEMANAGE_INDEX,
|
name: ROUTE_NAME.SEATS_LEAVEMANAGE_INDEX,
|
||||||
component: () => import('../views/HomeView.vue'),
|
component: () => import('../views/HomeView.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
@ -48,7 +48,7 @@ const routes: RouteRecordRaw[] = [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'index',
|
path: 'seats-manage',
|
||||||
name: ROUTE_NAME.SEATS_SEATSMANAGE_INDEX,
|
name: ROUTE_NAME.SEATS_SEATSMANAGE_INDEX,
|
||||||
component: () => import('../views/HomeView.vue'),
|
component: () => import('../views/HomeView.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
@ -58,7 +58,7 @@ const routes: RouteRecordRaw[] = [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'index',
|
path: 'robot',
|
||||||
name: ROUTE_NAME.SEATS_ROBOT_INDEX,
|
name: ROUTE_NAME.SEATS_ROBOT_INDEX,
|
||||||
meta: {
|
meta: {
|
||||||
title: '机器人管理',
|
title: '机器人管理',
|
||||||
@ -75,7 +75,7 @@ const routes: RouteRecordRaw[] = [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'index',
|
path: 'manage',
|
||||||
name: ROUTE_NAME.SEATS_ROBOT_MANAGE_INDEX,
|
name: ROUTE_NAME.SEATS_ROBOT_MANAGE_INDEX,
|
||||||
component: () => import('../views/HomeView.vue'),
|
component: () => import('../views/HomeView.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
@ -84,7 +84,7 @@ const routes: RouteRecordRaw[] = [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'index',
|
path: 'setting',
|
||||||
name: ROUTE_NAME.SEATS_INDEX,
|
name: ROUTE_NAME.SEATS_INDEX,
|
||||||
component: () => import('../views/HomeView.vue'),
|
component: () => import('../views/HomeView.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
|
@ -1,14 +1,27 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { MenusLayout } from '@cskefu/shared-ui'
|
import { MenusLayout } from '@cskefu/shared-ui'
|
||||||
import { MenuOption } from 'naive-ui'
|
import { MenuOption, NBreadcrumbItem } from 'naive-ui'
|
||||||
import { Menu } from '@cskefu/shared-ui'
|
import { Menu } from '@cskefu/shared-ui'
|
||||||
import { ref } from 'vue'
|
import { ref, h } from 'vue'
|
||||||
|
import { ROUTE_NAME } from '@cskefu/models'
|
||||||
|
|
||||||
const menuOptions: MenuOption[] = []
|
const menuOptions: MenuOption[] = []
|
||||||
const collapsed = ref<boolean>(false)
|
const collapsed = ref<boolean>(false)
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<MenusLayout v-model:collapsed="collapsed">
|
<MenusLayout
|
||||||
|
v-model:collapsed="collapsed"
|
||||||
|
:page-title="$route.meta.title"
|
||||||
|
:page-icon="$route.meta.icon"
|
||||||
|
:page-breadcrumbs="[
|
||||||
|
h(NBreadcrumbItem, { to: { name: ROUTE_NAME.DASHBOARD_INDEX } }, '首页'),
|
||||||
|
h(
|
||||||
|
NBreadcrumbItem,
|
||||||
|
{ to: { name: $route.name } },
|
||||||
|
$route.meta.title as string
|
||||||
|
),
|
||||||
|
]"
|
||||||
|
>
|
||||||
<Menu
|
<Menu
|
||||||
v-model:collapsed="collapsed"
|
v-model:collapsed="collapsed"
|
||||||
:options="menuOptions"
|
:options="menuOptions"
|
||||||
|
@ -1,18 +1,31 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
import { ref, h } from 'vue'
|
||||||
import { MenuOption } from 'naive-ui'
|
import { MenuOption, NBreadcrumbItem } from 'naive-ui'
|
||||||
|
|
||||||
import { Menu } from '@cskefu/shared-ui'
|
import { Menu } from '@cskefu/shared-ui'
|
||||||
import { MenusLayout } from '@cskefu/shared-ui'
|
import { MenusLayout } from '@cskefu/shared-ui'
|
||||||
import { routesToMenus } from '@cskefu/shared-utils'
|
import { routesToMenus } from '@cskefu/shared-utils'
|
||||||
|
|
||||||
import routes from '../routes'
|
import routes from '../routes'
|
||||||
|
import { ROUTE_NAME } from '@cskefu/models'
|
||||||
|
|
||||||
const menuOptions: MenuOption[] = routesToMenus(routes)
|
const menuOptions: MenuOption[] = routesToMenus(routes)
|
||||||
const collapsed = ref<boolean>(false)
|
const collapsed = ref<boolean>(false)
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<MenusLayout v-model:collapsed="collapsed">
|
<MenusLayout
|
||||||
|
v-model:collapsed="collapsed"
|
||||||
|
:page-title="$route.meta.title"
|
||||||
|
:page-icon="$route.meta.icon"
|
||||||
|
:page-breadcrumbs="[
|
||||||
|
h(NBreadcrumbItem, { to: { name: ROUTE_NAME.DASHBOARD_INDEX } }, '首页'),
|
||||||
|
h(
|
||||||
|
NBreadcrumbItem,
|
||||||
|
{ to: { name: $route.name } },
|
||||||
|
$route.meta.title as string
|
||||||
|
),
|
||||||
|
]"
|
||||||
|
>
|
||||||
<Menu
|
<Menu
|
||||||
v-model:collapsed="collapsed"
|
v-model:collapsed="collapsed"
|
||||||
:options="menuOptions"
|
:options="menuOptions"
|
||||||
|
@ -6,22 +6,46 @@ import {
|
|||||||
NPageHeader,
|
NPageHeader,
|
||||||
NBreadcrumb,
|
NBreadcrumb,
|
||||||
NBreadcrumbItem,
|
NBreadcrumbItem,
|
||||||
NAvatar,
|
|
||||||
NSpace,
|
NSpace,
|
||||||
NButton,
|
NButton,
|
||||||
NDropdown,
|
NDropdown,
|
||||||
NWatermark,
|
NWatermark,
|
||||||
|
NIcon,
|
||||||
} from 'naive-ui'
|
} from 'naive-ui'
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
showWatermark: {
|
isWatermarkMode: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true,
|
default: false,
|
||||||
|
},
|
||||||
|
watermarkLabel: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
},
|
},
|
||||||
collapsed: {
|
collapsed: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
pageTitle: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
pageSubtitle: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
pageIcon: {
|
||||||
|
type: Object,
|
||||||
|
default: null,
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
pageBreadcrumbs: {
|
||||||
|
type: Array<typeof NBreadcrumbItem>,
|
||||||
|
default: () => [],
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
defineEmits(['update:collapsed'])
|
defineEmits(['update:collapsed'])
|
||||||
@ -29,8 +53,8 @@ defineEmits(['update:collapsed'])
|
|||||||
<template>
|
<template>
|
||||||
<n-layout has-sider class="h-full">
|
<n-layout has-sider class="h-full">
|
||||||
<n-watermark
|
<n-watermark
|
||||||
v-if="showWatermark"
|
v-if="isWatermarkMode"
|
||||||
content="大家艰苦一下,一切都会有的"
|
:content="watermarkLabel"
|
||||||
cross
|
cross
|
||||||
fullscreen
|
fullscreen
|
||||||
:font-size="16"
|
:font-size="16"
|
||||||
@ -56,25 +80,25 @@ defineEmits(['update:collapsed'])
|
|||||||
<n-layout-content
|
<n-layout-content
|
||||||
content-style="display: flex; flex-direction: column;width: 100%;height:100%;padding: 10px"
|
content-style="display: flex; flex-direction: column;width: 100%;height:100%;padding: 10px"
|
||||||
>
|
>
|
||||||
<n-page-header subtitle="subtitle">
|
<n-page-header :subtitle="pageSubtitle">
|
||||||
<template #header>
|
<template #header>
|
||||||
<n-breadcrumb>
|
<n-breadcrumb>
|
||||||
<n-breadcrumb-item>Github</n-breadcrumb-item>
|
<Component
|
||||||
<n-breadcrumb-item>CSKEFU</n-breadcrumb-item>
|
:is="breadcrumb"
|
||||||
<n-breadcrumb-item>春松客服</n-breadcrumb-item>
|
v-for="(breadcrumb, index) in pageBreadcrumbs"
|
||||||
|
:key="index"
|
||||||
|
/>
|
||||||
</n-breadcrumb>
|
</n-breadcrumb>
|
||||||
</template>
|
</template>
|
||||||
<template #avatar>
|
<template #avatar>
|
||||||
<n-avatar
|
<n-icon size="large" :component="pageIcon" />
|
||||||
src="https://avatars.githubusercontent.com/u/16386583?v=4"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
<template #title>
|
<template #title>
|
||||||
<a style="text-decoration: none; color: inherit">Title</a>
|
<a style="text-decoration: none; color: inherit">{{ pageTitle }}</a>
|
||||||
</template>
|
</template>
|
||||||
<template #extra>
|
<template #extra>
|
||||||
<n-space>
|
<n-space>
|
||||||
<n-button>Button</n-button>
|
<n-button size="small">Button</n-button>
|
||||||
<n-dropdown placement="bottom-start">
|
<n-dropdown placement="bottom-start">
|
||||||
<n-button :bordered="false" style="padding: 0 4px">
|
<n-button :bordered="false" style="padding: 0 4px">
|
||||||
···
|
···
|
||||||
|
Loading…
x
Reference in New Issue
Block a user