mirror of
https://github.com/soybeanjs/soybean-admin.git
synced 2025-10-13 13:23:42 +08:00
feat(projects): Add current time display option for watermark (#772)
* feat(projects): Add current time display option for watermark * perf(projects): add watermark timer controls
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
import { computed, effectScope, onScopeDispose, ref, toRefs, watch } from 'vue';
|
||||
import type { Ref } from 'vue';
|
||||
import { useEventListener, usePreferredColorScheme } from '@vueuse/core';
|
||||
import { useDateFormat, useEventListener, useNow, usePreferredColorScheme } from '@vueuse/core';
|
||||
import { defineStore } from 'pinia';
|
||||
import { getPaletteColorByNumber } from '@sa/color';
|
||||
import { localStg } from '@/utils/storage';
|
||||
import { SetupStoreId } from '@/enum';
|
||||
import { useAuthStore } from '../auth';
|
||||
import {
|
||||
addThemeVarsToGlobal,
|
||||
createThemeToken,
|
||||
@@ -18,10 +19,14 @@ import {
|
||||
export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
|
||||
const scope = effectScope();
|
||||
const osTheme = usePreferredColorScheme();
|
||||
const authStore = useAuthStore();
|
||||
|
||||
/** Theme settings */
|
||||
const settings: Ref<App.Theme.ThemeSetting> = ref(initThemeSettings());
|
||||
|
||||
/** Watermark time instance with controls */
|
||||
const { now: watermarkTime, pause: pauseWatermarkTime, resume: resumeWatermarkTime } = useNow({ controls: true });
|
||||
|
||||
/** Dark mode */
|
||||
const darkMode = computed(() => {
|
||||
if (settings.value.themeScheme === 'auto') {
|
||||
@@ -57,6 +62,28 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
|
||||
*/
|
||||
const settingsJson = computed(() => JSON.stringify(settings.value));
|
||||
|
||||
/** Watermark time date formatter */
|
||||
const formattedWatermarkTime = computed(() => {
|
||||
const { watermark } = settings.value;
|
||||
const date = useDateFormat(watermarkTime, watermark.timeFormat);
|
||||
return date.value;
|
||||
});
|
||||
|
||||
/** Watermark content */
|
||||
const watermarkContent = computed(() => {
|
||||
const { watermark } = settings.value;
|
||||
|
||||
if (watermark.enableUserName && authStore.userInfo.userName) {
|
||||
return authStore.userInfo.userName;
|
||||
}
|
||||
|
||||
if (watermark.enableTime) {
|
||||
return formattedWatermarkTime.value;
|
||||
}
|
||||
|
||||
return watermark.text;
|
||||
});
|
||||
|
||||
/** Reset store */
|
||||
function resetStore() {
|
||||
const themeStore = useThemeStore();
|
||||
@@ -153,6 +180,44 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
|
||||
settings.value.layout.reverseHorizontalMix = reverse;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set watermark enable user name
|
||||
*
|
||||
* @param enable Whether to enable user name watermark
|
||||
*/
|
||||
function setWatermarkEnableUserName(enable: boolean) {
|
||||
settings.value.watermark.enableUserName = enable;
|
||||
|
||||
if (enable) {
|
||||
settings.value.watermark.enableTime = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set watermark enable time
|
||||
*
|
||||
* @param enable Whether to enable time watermark
|
||||
*/
|
||||
function setWatermarkEnableTime(enable: boolean) {
|
||||
settings.value.watermark.enableTime = enable;
|
||||
|
||||
if (enable) {
|
||||
settings.value.watermark.enableUserName = false;
|
||||
}
|
||||
}
|
||||
|
||||
/** Only run timer when watermark is visible and time display is enabled */
|
||||
function updateWatermarkTimer() {
|
||||
const { watermark } = settings.value;
|
||||
const shouldRunTimer = watermark.visible && watermark.enableTime;
|
||||
|
||||
if (shouldRunTimer) {
|
||||
resumeWatermarkTime();
|
||||
} else {
|
||||
pauseWatermarkTime();
|
||||
}
|
||||
}
|
||||
|
||||
/** Cache theme settings */
|
||||
function cacheThemeSettings() {
|
||||
const isProd = import.meta.env.PROD;
|
||||
@@ -196,6 +261,15 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
// watch watermark settings to control timer
|
||||
watch(
|
||||
() => [settings.value.watermark.visible, settings.value.watermark.enableTime],
|
||||
() => {
|
||||
updateWatermarkTimer();
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
});
|
||||
|
||||
/** On scope dispose */
|
||||
@@ -209,6 +283,7 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
|
||||
themeColors,
|
||||
naiveTheme,
|
||||
settingsJson,
|
||||
watermarkContent,
|
||||
setGrayscale,
|
||||
setColourWeakness,
|
||||
resetStore,
|
||||
@@ -216,6 +291,8 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
|
||||
toggleThemeScheme,
|
||||
updateThemeColors,
|
||||
setThemeLayout,
|
||||
setLayoutReverseHorizontalMix
|
||||
setLayoutReverseHorizontalMix,
|
||||
setWatermarkEnableUserName,
|
||||
setWatermarkEnableTime
|
||||
};
|
||||
});
|
||||
|
Reference in New Issue
Block a user