|
@@ -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),
|
|
|
};
|
|
|
}
|