1
0
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:
Kaifuny 2023-07-25 12:36:03 +08:00
parent 12cb53bba4
commit c5d3179d0e
7 changed files with 124 additions and 35 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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