1
0
mirror of https://github.com/zclzone/vue-naive-admin.git synced 2025-05-01 14:49:00 +08:00

Compare commits

...

3 Commits

Author SHA1 Message Date
zclzone
c230e86767 Merge branch '2.x' of https://gitee.com/isme-admin/vue-naive-admin into 2.x 2024-06-25 16:46:47 +08:00
zclzone
b464c70ae3 refactor: 封装不同layout下的公用组件 2024-06-25 16:46:31 +08:00
zclzone
c87f56814e feat: 添加切换主题的动画效果 2024-06-25 16:44:27 +08:00
7 changed files with 79 additions and 48 deletions

View File

@ -0,0 +1,34 @@
<template>
<i
class="mr-16 cursor-pointer"
:class="isDark ? 'i-fe:moon' : 'i-fe:sun'"
@click="toggleDark"
/>
</template>
<script setup>
import { useDark, useToggle } from '@vueuse/core'
import { useAppStore } from '@/store'
const appStore = useAppStore()
const isDark = useDark()
function toggleDark({ clientX, clientY }) {
const maxRadius = Math.hypot(
Math.max(clientX, window.innerWidth - clientX),
Math.max(clientY, window.innerHeight - clientY),
)
const style = document.documentElement.style
style.setProperty('--circle-x', `${clientX}px`)
style.setProperty('--circle-y', `${clientY}px`)
style.setProperty('--circle-r', `${maxRadius}px`)
function handler() {
appStore.toggleDark()
useToggle(isDark)()
}
document.startViewTransition
? document.startViewTransition(handler)
: handler()
}
</script>

View File

@ -3,3 +3,4 @@ export { default as TheFooter } from './TheFooter.vue'
export { default as AppPage } from './AppPage.vue'
export { default as CommonPage } from './CommonPage.vue'
export { default as LayoutSetting } from './LayoutSetting.vue'
export { default as ToggleTheme } from './ToggleTheme.vue'

View File

@ -0,0 +1,13 @@
<template>
<i
class="mr-16 cursor-pointer"
:class="isFullscreen ? 'i-fe:minimize' : 'i-fe:maximize'"
@click="toggle"
/>
</template>
<script setup>
import { useFullscreen } from '@vueuse/core'
const { isFullscreen, toggle } = useFullscreen()
</script>

View File

@ -5,3 +5,4 @@ export { default as BreadCrumb } from './BreadCrumb.vue'
export { default as AppTab } from './tab/index.vue'
export { default as SideLogo } from './SideLogo.vue'
export { default as SideMenu } from './SideMenu.vue'
export { default as Fullscreen } from './Fullscreen.vue'

View File

@ -13,16 +13,9 @@
<BreadCrumb />
<div class="ml-auto flex flex-shrink-0 items-center px-12 text-18">
<i
class="mr-16 cursor-pointer"
:class="isDark ? 'i-fe:moon' : 'i-fe:sun'"
@click="toggleDark"
/>
<i
class="mr-16 cursor-pointer"
:class="isFullscreen ? 'i-fe:minimize' : 'i-fe:maximize'"
@click="toggle"
/>
<ToggleTheme />
<Fullscreen />
<i
class="i-fe:github mr-16 cursor-pointer"
@ -41,18 +34,8 @@
</template>
<script setup>
import { useDark, useFullscreen, useToggle } from '@vueuse/core'
import { BreadCrumb, MenuCollapse, UserAvatar } from '@/layouts/components'
import { useAppStore } from '@/store'
const appStore = useAppStore()
const isDark = useDark()
function toggleDark() {
appStore.toggleDark()
useToggle(isDark)()
}
const { isFullscreen, toggle } = useFullscreen()
import { ToggleTheme } from '@/components'
import { BreadCrumb, Fullscreen, MenuCollapse, UserAvatar } from '@/layouts/components'
function handleLinkClick(link) {
window.open(link)

View File

@ -15,16 +15,9 @@
<span class="mx-6 opacity-20">|</span>
<div class="flex flex-shrink-0 items-center px-12 text-18">
<i
class="mr-16 cursor-pointer"
:class="isDark ? 'i-fe:moon' : 'i-fe:sun'"
@click="toggleDark"
/>
<i
class="mr-16 cursor-pointer"
:class="isFullscreen ? 'i-fe:minimize' : 'i-fe:maximize'"
@click="toggle"
/>
<ToggleTheme />
<Fullscreen />
<i
class="i-fe:github mr-16 cursor-pointer"
@ -43,24 +36,10 @@
</template>
<script setup>
import { useDark, useFullscreen, useToggle } from '@vueuse/core'
import { AppTab, MenuCollapse, UserAvatar } from '@/layouts/components'
import { useAppStore } from '@/store'
const appStore = useAppStore()
const isDark = useDark()
function toggleDark() {
appStore.toggleDark()
useToggle(isDark)()
}
const { isFullscreen, toggle } = useFullscreen()
import { ToggleTheme } from '@/components'
import { AppTab, Fullscreen, MenuCollapse, UserAvatar } from '@/layouts/components'
function handleLinkClick(link) {
window.open(link)
}
watchEffect(() => {
appStore.setThemeColor(appStore.primaryColor, appStore.isDark)
})
</script>

View File

@ -72,3 +72,23 @@ body {
}
}
}
/* 切换主题的动画效果 */
::view-transition-old(root) {
animation: none;
mix-blend-mode: normal;
}
::view-transition-new(root) {
animation: 0.5s ease-in circle-animation;
mix-blend-mode: normal;
}
@keyframes circle-animation {
from {
clip-path: circle(0 at var(--circle-x) var(--circle-y));
}
to {
clip-path: circle(var(--circle-r) at var(--circle-x) var(--circle-y));
}
}