日本xxxx18视频在线观看-日本xxxx1819-日本xxxwww在线观看-日本xxx-日本xx-日本www在线视频

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

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

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

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

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


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

? 核心目標(biāo)

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

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

1. 水印生成組件 Watermark.vue

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

<template>
  <!-- 水印層(覆蓋整個(gè)視口) -->
  <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);

// ?? 動(dòng)態(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度
  
  // 填充文本(含動(dòng)態(tài)用戶信息+時(shí)間)
  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('?? 檢測到水印被移除,已自動(dòng)恢復(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)用

呃...這個(gè)代碼大概就是在網(wǎng)頁最外層加了個(gè)半透明的水印,寫著"機(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ā)者工具(可選)

這個(gè)代碼就是...如果有人想按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. 動(dòng)態(tài)水印刷新(防截圖拼接)

這個(gè)代碼就是...讓水印每隔1小時(shí)變一次!

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

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

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

?? 注意事項(xiàng)

  1. 性能優(yōu)化:水印密度(density)建議≥100px,避免Canvas渲染壓力
  2. 移動(dòng)端適配:測試100vh在移動(dòng)端的表現(xiàn),必要時(shí)改用window.innerHeight
  3. 有時(shí)候可能還需要后端做一些操作,前端水印顯示用戶ID和時(shí)間,后端同時(shí)記錄操作日志,一旦泄露就能通過水印信息查后端日志精準(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)報(bào)表等業(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),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品天干天干在线观看 | 欧美肉大捧一进一出免费视频 | 国产久热精品 | 日本成a人片在线播放 | 国产精品精品一区二区三区 | 91.精品国产 | 国产精品美脚玉足脚交欧美 | 国产亚洲成a人片在线观看 国产v欧美v日韩v综合精品 | 日韩一区二区三区视频 | 欧美3571 | 国产在线精品成人一区二 | 久中文字幕中文字幕亚洲无线 | 国产福利91精品在线观看 | 国产精品自产拍在线观看花钱看 | 国产精品亚洲片在线观看不卡 | 国产亚洲精品日韩已满十八 | 国产两性色午夜视频 | 2025最新韩剧在线观看 | 91tv官网精品观看 | 日本精品在线网址 | 91影院| 91风韵犹存沙发69国产 | 成人精品国产日本语音 | 国产一二 | 欧美一区二区三区四区视频 | 欧美午夜全部免费影院 | 国产伦理一区二区三区在线观看 | 99亚洲精品高清一二区 | 成年女人免费永久看片 | 精品国产影片在线观看 | 成人免费精品视频 | 欧美日韩视频在线第一区 | 窝窝午夜看片七次郎青草视频 | 日本那些又骚又爽的视频 | 欧美一级欧美三级在线观看 | 东京干男人都知道的 | 欧美亚洲日韩午夜激情影院 | 免费看成年视频在线入口完整版 | 国产在线观看精品高清 | 国产水手服19禁在线视频网站 | 国产一区二区三区在线性观看 |