|
|
|
@ -1,8 +1,11 @@ |
|
|
|
import type { Watermark, WatermarkOptions } from 'watermark-js-plus'; |
|
|
|
|
|
|
|
import { nextTick, onUnmounted, ref } from 'vue'; |
|
|
|
import { nextTick, onUnmounted, readonly, ref } from 'vue'; |
|
|
|
|
|
|
|
import { updatePreferences } from '@vben/preferences'; |
|
|
|
|
|
|
|
const watermark = ref<Watermark>(); |
|
|
|
const unmountedHooked = ref<boolean>(false); |
|
|
|
const cachedOptions = ref<Partial<WatermarkOptions>>({ |
|
|
|
advancedStyle: { |
|
|
|
colorStops: [ |
|
|
|
@ -45,7 +48,7 @@ export function useWatermark() { |
|
|
|
...options, |
|
|
|
}; |
|
|
|
watermark.value = new Watermark(cachedOptions.value); |
|
|
|
|
|
|
|
updatePreferences({ app: { watermark: true } }); |
|
|
|
await watermark.value?.create(); |
|
|
|
} |
|
|
|
|
|
|
|
@ -62,16 +65,24 @@ export function useWatermark() { |
|
|
|
} |
|
|
|
|
|
|
|
function destroyWatermark() { |
|
|
|
watermark.value?.destroy(); |
|
|
|
if (watermark.value) { |
|
|
|
watermark.value.destroy(); |
|
|
|
watermark.value = undefined; |
|
|
|
} |
|
|
|
updatePreferences({ app: { watermark: false } }); |
|
|
|
} |
|
|
|
|
|
|
|
onUnmounted(() => { |
|
|
|
destroyWatermark(); |
|
|
|
}); |
|
|
|
// 只在第一次调用时注册卸载钩子,防止重复注册以致于在路由切换时销毁了水印
|
|
|
|
if (!unmountedHooked.value) { |
|
|
|
unmountedHooked.value = true; |
|
|
|
onUnmounted(() => { |
|
|
|
destroyWatermark(); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
return { |
|
|
|
destroyWatermark, |
|
|
|
updateWatermark, |
|
|
|
watermark, |
|
|
|
watermark: readonly(watermark), |
|
|
|
}; |
|
|
|
} |
|
|
|
|