日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

十萬火急,客戶數(shù)據(jù)被截圖泄密了,緊急需求加水印...

admin
2025年4月12日 10:12 本文熱度 138

項(xiàng)目經(jīng)理老王:?? 緊急加需求! 現(xiàn)在水印不僅要全頁面覆蓋,還要遍布每個角落!用戶就算截個按鈕局部圖,也得帶著水印!代碼必須給全,從生成到防護(hù)一條龍!B端產(chǎn)品必須要全加水印,快快快...

碼農(nóng)小彬:?? 沒問題!上完整解決方案!
直接甩出完整代碼+原理分析??


?? 全頁面動態(tài)水印(Vue3 + Canvas + 防刪監(jiān)控)

? 核心目標(biāo)

  1. 全頁面密集水印 —— 無論用戶截取哪部分頁面,必帶水印
  2. 動態(tài)綁定用戶信息 —— 顯示機(jī)密-{用戶名}-{時間}
  3. 防刪除/隱藏 —— 監(jiān)聽DOM變動自動恢復(fù)
  4. 零操作干擾 —— 透明+事件穿透

?? 完整代碼實(shí)現(xiàn)

1. 水印生成組件 Watermark.vue

這個代碼就是給整個網(wǎng)頁打上帶用戶信息和時間的透明水印,刪不掉還自動更新,防截圖防篡改。

<template>
  <!-- 水印層(覆蓋整個視口) -->
  <div ref="watermarkEl" class="global-watermark"></div>
</template>

<script setup>
import { ref, onMounted, watch } from 'vue';

const props = defineProps({
  text: { type: String, default: '內(nèi)部保密' },  // 基礎(chǔ)文本
  userId: { type: String },                    // 綁定用戶ID
  opacity: { type: Number, default: 0.1 },     // 透明度
  density: { type: Number, default: 150 },     // 水印密度(像素間隔)
});

const watermarkEl = ref(null);

// ?? 動態(tài)生成水印圖(Canvas繪制)
const generateWatermark = () => {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');
  const size = props.density; // 水印單元間距
  
  canvas.width = size * 2;
  canvas.height = size * 2;
  
  ctx.font = '14px Arial';
  ctx.fillStyle = `rgba(100, 100, 100, ${props.opacity})`;
  ctx.rotate(-25 * Math.PI / 180); // 傾斜25度
  
  // 填充文本(含動態(tài)用戶信息+時間)
  const dynamicText = `${props.text} - ${props.userId || '未知用戶'} - ${new Date().toLocaleString()}`;
  ctx.fillText(dynamicText, 10, size);
  
  return canvas.toDataURL('image/png');
};

// ?? 更新水印背景
const updateWatermark = () => {
  if (!watermarkEl.value) return;
  watermarkEl.value.style.backgroundImage = `url(${generateWatermark()})`;
};

// ?? 監(jiān)聽文本/用戶ID變化
watch([() => props.text, () => props.userId], updateWatermark);

// ??? 防刪除監(jiān)聽(MutationObserver)
const initObserver = () => {
  const observer = new MutationObserver((mutations) => {
    mutations.forEach((mutation) => {
      if (mutation.removedNodes.length) {
        const removed = Array.from(mutation.removedNodes);
        if (removed.some(node => node === watermarkEl.value)) {
          document.body.appendChild(watermarkEl.value); // 強(qiáng)制恢復(fù)水印
          console.warn('?? 檢測到水印被移除,已自動恢復(fù)!');
        }
      }
    });
  });
  
  observer.observe(document.body, { childList: true, subtree: true });
};

onMounted(() => {
  updateWatermark();
  initObserver();
});
</script>

<style scoped>
.global-watermark {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background-repeat: repeat; /* 關(guān)鍵!重復(fù)鋪滿 */
  pointer-events: none;      /* 穿透點(diǎn)擊 */
  z-index: 9999;            /* 確保在最頂層 */
  opacity: v-bind('props.opacity');
}
</style>

2. 在管理后臺入口調(diào)用

呃...這個代碼大概就是在網(wǎng)頁最外層加了個半透明的水印,寫著"機(jī)密數(shù)據(jù)",還綁定了當(dāng)前登錄用戶的ID,然后下面正常顯示網(wǎng)頁的其他內(nèi)容這樣子!

<template>
  <div id="app">
    <!-- 全屏水印(綁定當(dāng)前用戶) -->
    <Watermark 
      text="機(jī)密數(shù)據(jù)" 
      :userId="currentUser.id" 
      :opacity="0.15" 
      :density="120" 
    />
    <router-view /> <!-- 其他頁面內(nèi)容 -->
  </div>
</template>

<script setup>
import Watermark from '@/components/Watermark.vue';
import { useAuthStore } from '@/stores/auth';

const currentUser = useAuthStore().user; // 假設(shè)從Pinia獲取用戶
</script>

??? 增強(qiáng)防護(hù)

1. 禁用開發(fā)者工具(可選)

這個代碼就是...如果有人想按F12或者Ctrl+Shift+I打開瀏覽器開發(fā)者工具,網(wǎng)頁就會彈窗警告。

// 在main.js中添加
document.addEventListener('keydown', (e) => {
  if (e.key === 'F12' || (e.ctrlKey && e.shiftKey && e.key === 'I')) {
    e.preventDefault();
    alert('禁止開發(fā)者工具!');
  }
});

2. 動態(tài)水印刷新(防截圖拼接)

這個代碼就是...讓水印每隔1小時變一次!

// 每小時更新一次水印時間戳
setInterval(() => {
  updateWatermark();
}, 60 * 60 * 1000);

?? 關(guān)鍵點(diǎn)說明

特性實(shí)現(xiàn)方式效果
全頁面覆蓋background-repeat: repeat無論頁面多大,水印無限平鋪
動態(tài)內(nèi)容綁定userId+時間戳每個用戶水印唯一,可追溯
防刪除MutationObserver監(jiān)聽DOM刪除后自動重新插入
操作無阻pointer-events: none可點(diǎn)擊下方按鈕/輸入框

?? 注意事項(xiàng)

  1. 性能優(yōu)化:水印密度(density)建議≥100px,避免Canvas渲染壓力
  2. 移動端適配:測試100vh在移動端的表現(xiàn),必要時改用window.innerHeight
  3. 有時候可能還需要后端做一些操作,前端水印顯示用戶ID和時間,后端同時記錄操作日志,一旦泄露就能通過水印信息查后端日志精準(zhǔn)定位責(zé)任人(就像快遞面單+物流系統(tǒng),撕掉面單也能通過系統(tǒng)查誰寄的)。

作者:盞燈
鏈接:https://juejin.cn/post/7491920480598769705
來源:稀土掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

該文章在 2025/4/12 18:35:23 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 久操免费在线观看 | 国产亚洲精品福利在线无卡一 | 国产91精品高跟丝袜在线 | 国产精选91原创视频 | 国产玉足sm足控脚交视频 | 国产乱子伦精品免费 | 变态国产欧美激情成 | 999任你躁在线精品免费 | 日本亚洲欧美综合视频 | 国产鲁鲁视频在线观看免费 | 亚洲综合国产在不卡在线首映 | 中文字幕丰满伦孑 | 亚洲欧美日本国产—区二区三区 | 国产在线成人一区二区 | 日韩欧美一级大片 | 2025年最新高清电影 | 日韩一级一欧美一级国产 | 日本精品中文字幕在线不卡 | 亚洲s色大片在线观看 | 99欧美| 起碰97在线视频国产 | 亚洲欧美日韩国产精品 | 巨大欧美黑人xxxxbbbb | 日韩亚洲欧美精品性爱 | 日本欧美一区二区三区在线 | 国产精品一区二区三区四区五区 | 国产精品日产三级在线观看 | 91香蕉污视频下载安装 | 日本不卡在线观看 | 国产拍在线| 亚洲欧美激情在线 | 极品国产一区二区三 | 免费人成网站在线免费观看 | 国产一区二区三区四区五区加勒比 | 国语自产精品视频 | 欧美午夜理伦三级在 | 国产精品酒店在线精品 | 国产精品三级不卡电影 | 国产va免费精品高清在线 | 国产欧美精品亚洲日本一区 | 欧美一级日 |