| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- // @ts-nocheck
- // #ifndef UNI-APP-X
- import { type ComputedRef, ref, watch, getCurrentScope, onScopeDispose, computed, reactive } from './vue';
- // #endif
- type ThemeMode = 'light' | 'dark' | 'auto'
- const THEME_LOCAL_STORAGE_KEY = 'app-theme-preference'
- let limeThemeId = -1
- const limeThemeMode = ref<ThemeMode>('auto')
- const limeTheme = ref(getTheme())
- function setWeb (theme: ThemeMode) {
- // #ifdef WEB
- const pageHead = document.querySelector(".uni-page-head");
- if(!pageHead) return
- if (theme == 'dark') {
- pageHead.style.backgroundColor = '#181818'
- pageHead.style.color = ''
- } else {
- pageHead.style.backgroundColor = 'rgb(245, 245, 245)'
- pageHead.style.color = 'rgb(0, 0, 0)'
- }
- // #endif
- }
- export function getTheme(): 'dark' | 'light' {
- // #ifndef UNI-APP-X && APP
- let mode = uni.getStorageSync(THEME_LOCAL_STORAGE_KEY)
- limeThemeMode.value = (mode || 'auto')
- const hostTheme = uni.getAppBaseInfo().hostTheme;
- return limeThemeMode.value === 'auto' ? (hostTheme || 'light') : limeThemeMode.value
- // #endif
-
- // #ifdef UNI-APP-X && APP
- let { osTheme, appTheme } = uni.getSystemInfoSync();
- return appTheme == "auto" ? osTheme! : appTheme!
- // #endif
-
-
- }
- // #ifndef UNI-APP-X
- let limeThemeCallBack = (result) => {
- limeTheme.value = result.theme
- };
- // #endif
- export function stop() {
- // #ifndef UNI-APP-X
- uni.offThemeChange(limeThemeCallBack)
- // #endif
- // #ifdef UNI-APP-X
- // #ifndef UNI-APP-X && APP
- uni.offHostThemeChange(limeThemeId)
-
- // #endif
- // #ifdef UNI-APP-X && APP
- uni.offAppThemeChange(limeThemeId)
- // #endif
- // #endif
- }
- // 检查系统主题
- export const checkSystemTheme = () => {
- stop()
- limeTheme.value = getTheme()
- // #ifndef UNI-APP-X
- uni.onThemeChange(limeThemeCallBack);
- // #endif
- // #ifdef UNI-APP-X
- // #ifndef UNI-APP-X && APP
- limeThemeId = uni.onHostThemeChange((result) => {
- limeTheme.value = result.hostTheme
- });
- // #endif
- // #ifdef UNI-APP-X && APP
- limeThemeId = uni.onAppThemeChange((res : AppThemeChangeResult) => {
- limeTheme.value = res.appTheme.trim()
- })
- // #endif
- // #endif
- }
- export const isDarkMode = computed(() => {
- return limeTheme.value == "dark";
- });
- export function setThemeMode(theme: 'dark' | 'light' | 'auto') {
- // #ifdef UNI-APP-X && APP
- if (limeTheme.value == theme) return;
- uni.setAppTheme({
- theme,
- success: function (result: SetAppThemeSuccessResult) {
- console.log("设置appTheme为"+ result.theme +"成功")
- limeTheme.value = result.theme
- },
- fail: function (e : IAppThemeFail) {
- console.log("设置appTheme为 auto 失败,原因:", e.errMsg)
- }
- })
- // #endif
- // #ifndef UNI-APP-X && APP
- limeThemeMode.value = theme
- uni.setStorageSync(THEME_LOCAL_STORAGE_KEY, theme)
- limeTheme.value = getTheme()
- // #endif
- // #ifdef WEB
- setWeb(limeTheme.value )
- // #endif
- }
- export function toggleTheme() {
- setThemeMode(isDarkMode.value ? 'light' : 'dark')
- }
- // #ifdef WEB
- watch(isDarkMode, ()=>{
- setWeb(limeTheme.value)
- })
- // #endif
|