1
0
mirror of synced 2025-11-06 04:20:50 +08:00

feat: sharedComposable for dark mode

This commit is contained in:
YunYouJun
2025-10-06 21:37:23 +08:00
parent b53d6ae23a
commit 0c79b3d0a7
8 changed files with 36 additions and 28 deletions

View File

@@ -37,7 +37,9 @@
### Features
本项目支持 PWA使用浏览器打开时可将其添加到主屏幕以获得近原生 APP 的体验。
~~本项目支持 PWA使用浏览器打开时可将其添加到主屏幕以获得近原生 APP 的体验。~~
我们正在开发新的 APP 版本,敬请期待。
## 开发

View File

@@ -1,8 +1,8 @@
<script setup lang="ts">
import { useIndexedDB } from '~/composables/db'
import { appName } from '~/constants'
import { ionDarkClass } from './composables/dark'
// import { installPrompt } from './utils/pwa'
import { isClient } from '@vueuse/core'
import { useIndexedDB } from '~/composables/db'
import { appName, ionDarkClass } from '~/constants'
// https://nuxt.com/docs/api/composables/use-head
useHead({
@@ -16,18 +16,22 @@ useHead({
})
const indexedDB = useIndexedDB()
const { isDark } = useDarkMode()
onMounted(() => {
// init dark mode
if (isDark.value) {
document.documentElement.classList.add(ionDarkClass)
}
else {
document.documentElement.classList.remove(ionDarkClass)
if (isClient) {
if (isDark.value) {
document.documentElement.classList.add(ionDarkClass)
}
else {
document.documentElement.classList.remove(ionDarkClass)
}
indexedDB.init()
}
// installPrompt()
indexedDB.init()
})
</script>

View File

@@ -1,5 +1,5 @@
<script setup lang="ts">
const color = useColorMode()
const { color, toggleDark } = useDarkMode()
useHead({
meta: [{
@@ -8,10 +8,6 @@ useHead({
content: () => color.value === 'dark' ? '#222222' : '#ffffff',
}],
})
function toggleDark() {
color.preference = color.value === 'dark' ? 'light' : 'dark'
}
</script>
<template>

View File

@@ -1,9 +1,15 @@
export const color = useColorMode()
export const isDark = computed(() => color.value === 'dark')
import { ionDarkClass } from '~/constants'
export const ionDarkClass = 'ion-palette-dark'
export const useDarkMode = createSharedComposable(() => {
const color = useColorMode()
const isDark = computed(() => color.value === 'dark')
export function toggleDark() {
color.preference = color.value === 'dark' ? 'light' : 'dark'
document.documentElement.classList.toggle(ionDarkClass, !isDark.value)
}
return {
color,
isDark,
toggleDark() {
color.preference = color.value === 'dark' ? 'light' : 'dark'
document.documentElement.classList.toggle(ionDarkClass, !isDark.value)
},
}
})

View File

@@ -7,3 +7,5 @@ export const lastDbUpdated = '2023-11-11 19:51:02'
export const icp = '苏ICP备17038157号'
export * from './links'
export const ionDarkClass = 'ion-palette-dark'

View File

@@ -42,11 +42,7 @@
</FAQItem>
<FAQItem title="是否有 APP?">
<b>暂时没有开发 APP 的计划</b>
<br>
但我们正在优化 <b>PWA</b> 的体验以便您可以直接将本站添加到桌面并享受<b>类似 APP 的体验</b>
<br>
你可以使用浏览器打开点击上方的<b>安装到桌面</b>或在菜单中点击<b>添加到主屏幕</b>
<b>正在开发中尽请期待</b>
</FAQItem>
<FAQItem title="未来是否会收费?">

View File

@@ -1,4 +1,6 @@
<script lang="ts" setup>
const { isDark, toggleDark } = useDarkMode()
const app = useAppStore()
definePageMeta({

View File

@@ -3,7 +3,7 @@
"type": "module",
"version": "2.0.0-beta.6",
"private": true,
"packageManager": "pnpm@10.18.0",
"packageManager": "pnpm@10.18.1",
"engines": {
"node": "^20.19.0 || >=22.12.0"
},