Skip to content

Commit 642ebf2

Browse files
author
allen
committed
feat: layout
1 parent 33f327d commit 642ebf2

22 files changed

+348
-300
lines changed

package-lock.json

Lines changed: 191 additions & 162 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,9 @@
6060
"unocss": "0.62.2",
6161
"unplugin-auto-import": "0.18.2",
6262
"unplugin-vue-components": "0.27.4",
63+
"unplugin-vue-router": "0.10.8",
6364
"vite": "5.4.2",
64-
"vite-plugin-pages": "0.32.3",
65+
"vite-plugin-vue-layouts": "0.11.0",
6566
"vue-tsc": "2.0.29"
6667
},
6768
"resolutions": {

src/components/layout/Aside.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<script setup lang="ts">
2+
import { routes } from 'vue-router/auto-routes'
23
import { APP_NAME } from '@/config/app'
3-
import router from '~pages'
44
55
const route = useRoute()
66
const { isCollapse } = useStore('app')
7-
const menus = getMenus(router, '')
7+
const menus = getMenus(routes, '')
88
99
function getMenus(route: any, path: string) {
1010
return route

src/components/layout/Header.vue

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
<script setup lang="ts">
2-
import type { RouteRecordNameGeneric } from 'vue-router'
3-
import { onBeforeRouteUpdate } from 'vue-router'
4-
52
const { logout } = useStore('user')
63
74
const {
85
isCollapse,
96
tabs,
107
updateCollapse,
11-
addTab,
128
removeTab,
139
removeOtherTab,
1410
removeRightTab,
@@ -20,21 +16,12 @@ const router = useRouter()
2016
2117
// 面包屑
2218
const breadcrumbArr = computed(() => {
23-
return route.matched.filter((item) => !['/', '/dashboard'].includes(item.path))
24-
})
25-
26-
// 更新头部tabs
27-
onBeforeRouteUpdate((to, _from, next) => {
28-
if (to.meta.title) {
29-
const tab = { title: to.meta.title, name: to.name } as App.Tab
30-
addTab(tab)
31-
}
32-
next()
19+
return route.matched.filter((item) => !['/'].includes(item.path) && item.meta.title)
3320
})
3421
3522
// 切换tabs
3623
function tabClick(val: number | string = 0, delay = true) {
37-
let name: RouteRecordNameGeneric
24+
let name: any
3825
if (typeof val === 'number') {
3926
name = tabs.value[val].name
4027
} else {

src/env.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/// <reference types="vite/client" />
2-
/// <reference types="vite-plugin-pages/client" />
2+
/// <reference types="unplugin-vue-router/client" />
33

44
declare module '*.vue' {
55
import type { DefineComponent } from 'vue'

src/layouts/default.vue

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<script lang="ts" setup>
2+
const { tabs } = useStore('app')
3+
4+
const router = useRouter()
5+
const routes = router.getRoutes()
6+
const needCacheRouteNames = routes
7+
.filter((item) => item.meta && !item.meta.notCache)
8+
.map((item) => item.name)
9+
10+
const cacheList = computed(() => {
11+
const arr = tabs.value
12+
.map((item) => item.name)
13+
.filter((item) => needCacheRouteNames.includes(item))
14+
return arr
15+
})
16+
</script>
17+
18+
<template>
19+
<el-container>
20+
<el-aside>
21+
<Aside />
22+
</el-aside>
23+
<el-container>
24+
<el-header>
25+
<Header />
26+
</el-header>
27+
<el-main>
28+
<router-view v-slot="{ Component, route }">
29+
<transition name="fade-transform" mode="out-in">
30+
<keep-alive :include="cacheList">
31+
<component :is="Component" :key="route.name" />
32+
</keep-alive>
33+
</transition>
34+
</router-view>
35+
</el-main>
36+
</el-container>
37+
</el-container>
38+
<el-backtop target=".el-main" />
39+
</template>
File renamed without changes.

src/pages/index.vue

Lines changed: 52 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,59 @@
1+
<route lang="json">
2+
{
3+
"meta": {
4+
"title": "dashboard",
5+
"icon": "clarity:dashboard-solid",
6+
"sort": 1
7+
}
8+
}
9+
</route>
10+
111
<script lang="ts" setup>
2-
const { tabs } = useStore('app')
12+
import apiTest from '@/api/apiTest'
313
414
const router = useRouter()
5-
const routes = router.getRoutes()
6-
const needCacheRouteNames = routes
7-
.filter((item) => item.meta && !item.meta.notCache)
8-
.map((item) => item.name)
9-
10-
const cacheList = computed(() => {
11-
const arr = tabs.value
12-
.map((item) => item.name)
13-
.filter((item) => needCacheRouteNames.includes(item))
14-
return arr
15-
})
15+
function pushRouter(path: string) {
16+
router.push(path)
17+
}
18+
19+
const { name, fullName, updateName } = useStore('test')
20+
const { userInfo, setUserInfo } = useStore('user')
21+
22+
const dateVal = ref(new Date())
23+
24+
const icons = ['foundation-indent-more', 'foundation-indent-less']
25+
26+
async function getTest() {
27+
const res = await apiTest.getTest({ a: 1, isLoading: true })
28+
if (!res) return
29+
console.log(res, 111)
30+
// res.data.age
31+
// res.data.name
32+
}
33+
async function postTest() {
34+
const res = await apiTest.postTest({ a: 2 })
35+
if (!res) return
36+
// res.data.val
37+
}
1638
</script>
1739

1840
<template>
19-
<el-container>
20-
<el-aside>
21-
<Aside />
22-
</el-aside>
23-
<el-container>
24-
<el-header>
25-
<Header />
26-
</el-header>
27-
<el-main>
28-
<router-view v-slot="{ Component, route }">
29-
<transition name="fade-transform" mode="out-in">
30-
<keep-alive :include="cacheList">
31-
<component :is="Component" :key="route.name" />
32-
</keep-alive>
33-
</transition>
34-
</router-view>
35-
</el-main>
36-
</el-container>
37-
</el-container>
38-
<el-backtop target=".el-main" />
41+
<div class="page-index">
42+
<div>控制台</div>
43+
<div @click="pushRouter('test1_1')">test1_1</div>
44+
<div @click="pushRouter('test2')">test2</div>
45+
<div>name:{{ name }}</div>
46+
<div>fullName:{{ fullName }}</div>
47+
<div @click="updateName('333')">updateName</div>
48+
<el-button class="br-10 m-10 w-200 c-#387"> I am ElButton </el-button>
49+
<el-date-picker v-model="dateVal" type="date" placeholder="Pick a day" />
50+
<div v-for="icon in icons" :key="icon" :class="icon" />
51+
<div @click="getTest">getTest</div>
52+
<div @click="postTest">postTest</div>
53+
<div @click="setUserInfo({ name: 'allen', token: String(Math.random()) })">setUserInfo</div>
54+
<div>userInfo:{{ JSON.stringify(userInfo) }}</div>
55+
<div v-for="i in 50" :key="i">test</div>
56+
</div>
3957
</template>
58+
59+
<style lang="scss" scoped></style>

src/pages/login.vue

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
<route lang="json">
2+
{
3+
"meta": {
4+
"layout": false
5+
}
6+
}
7+
</route>
8+
19
<script lang="ts" setup>
210
const { setUserInfo } = useStore('user')
311
const router = useRouter()
@@ -11,7 +19,5 @@ function login() {
1119
</script>
1220

1321
<template>
14-
<div @click="login">
15-
login
16-
</div>
22+
<div @click="login">login</div>
1723
</template>
File renamed without changes.

0 commit comments

Comments
 (0)