无码国模产在线观看免费-无码国内精品久久人妻-无码国内精品久久综合88-无码国内精品人妻少妇-无码国内精品人妻少妇蜜桃视频-无码国语中文在线播放

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

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

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

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

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


?? 全頁面動態水印(Vue3 + Canvas + 防刪監控)

? 核心目標

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

?? 完整代碼實現

1. 水印生成組件 Watermark.vue

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

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

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

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

const watermarkEl = ref(null);

// ?? 動態生成水印圖(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度
  
  // 填充文本(含動態用戶信息+時間)
  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()})`;
};

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

// ??? 防刪除監聽(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); // 強制恢復水印
          console.warn('?? 檢測到水印被移除,已自動恢復!');
        }
      }
    });
  });
  
  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; /* 關鍵!重復鋪滿 */
  pointer-events: none;      /* 穿透點擊 */
  z-index: 9999;            /* 確保在最頂層 */
  opacity: v-bind('props.opacity');
}
</style>

2. 在管理后臺入口調用

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

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

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

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

??? 增強防護

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

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

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

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

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

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

?? 關鍵點說明

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

?? 注意事項

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

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

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

主站蜘蛛池模板: 丁香五月天婷婷网 | 国产午夜精品一区二区体验国产午夜精品无码日本最新 | 无套内谢少妇毛片A片软件 无套内谢少妇毛片A片小说色噜噜 | 欧美精品高清在线x | 国内精品人妻无码久久久影院导航 | 欧美日韩亚洲另类 | 国产99精品视频一区二区三区 | 久久精品国产成人Av | 国产精品日韩欧美亚洲另类 | 蜜桃传媒一区二区亚洲AV | 麻豆视频免费观看入口 | 国产第一二三区日韩在线观看 | a级视频不卡无遮挡 | 亚洲精品国产综合AV在线观看 | 成人无码精品1区2区3区免费看 | 国产成人精品福利一区二区 | 2024精品国产品免费观看 | 久久久国产成人精品蜜臀a 久久久国产成人一区二区 久久久国产打桩机 | 99久久亚洲综合精品网站 | 91麻豆国产视频一级片 | 人妻一区二区三区四区av | 无码一区二区精品久久 | 真实国产乱子伦视频对白 | 麻豆成人AV久久无码精品 | 国产成人精品免费午夜 | 欧美制服丝袜国产日韩一区 | 丰满少妇av一区二区三区黑人 | 免费视频另类成人天堂资源www | 欧美黄视频 | 免费人妻精品一区二区三区四 | 日本高清视频在线无吗 | 久久国产日韩欧美精 | 成人区亚洲区无码区在线点播 | 福利资源在线观看 | 91精品国产免费青青碰在线观看 | 久久久精品人妻一区二区三区 | 幻女FREE性ZOZO交喷水 | 欧美激情性AAAAA片欧美 | 国产欧美日韩综合精品久久一区 | 毛片黄色片 | 漂亮的丰年轻的继坶3在线观看 |