8 changed files with 361 additions and 90 deletions
-
8src/api/system/logs.js
-
185src/utils/waterMark.js
-
50src/views/system/log/errorLog/index.vue
-
20src/views/system/log/loginLog/index.vue
-
42src/views/system/log/operateLog/index.vue
-
19src/views/system/log/search.vue
-
80src/views/system/watermarkManage/index.vue
-
39src/views/system/watermarkManage/module/form.vue
@ -0,0 +1,185 @@ |
|||||
|
// 水印添加
|
||||
|
export const watermark = (settings, className, type) => { |
||||
|
// 默认设置
|
||||
|
var defaultSettings = { |
||||
|
watermark_txt: settings.watermark_txt, |
||||
|
watermark_x: 20, // 水印起始位置x轴坐标
|
||||
|
watermark_y: 10, // 水印起始位置Y轴坐标
|
||||
|
watermark_rows: 5, // 水印行数
|
||||
|
watermark_cols: 10, // 水印列数
|
||||
|
watermark_x_space: 50, // 水印x轴间隔
|
||||
|
watermark_y_space: 100, // 水印y轴间隔
|
||||
|
watermark_color: settings.watermark_color, // 水印字体颜色
|
||||
|
watermark_alpha: settings.watermark_alpha, // 水印透明度
|
||||
|
watermark_fontsize: settings.watermark_fontsize || '15px', // 水印字体大小
|
||||
|
watermark_font: '微软雅黑', // 水印字体
|
||||
|
watermark_width: 100, // 水印宽度
|
||||
|
watermark_height: 40, // 水印长度
|
||||
|
watermark_angle: 15 // 水印倾斜度数
|
||||
|
} |
||||
|
|
||||
|
var oTemp = document.createDocumentFragment() |
||||
|
|
||||
|
// 获取页面最大宽度
|
||||
|
var page_width = Math.max(document.body.scrollWidth, document.body.clientWidth) |
||||
|
var cutWidth = page_width * 0.015 |
||||
|
page_width = page_width - cutWidth |
||||
|
// 获取页面最大高度
|
||||
|
var page_height = Math.max(document.body.scrollHeight, document.body.clientHeight) + 650 |
||||
|
// var page_height = document.body.scrollHeight+document.body.scrollTop;
|
||||
|
// 如果将水印列数设置为0,或水印列数设置过大,超过页面最大宽度,则重新计算水印列数和水印x轴间隔
|
||||
|
if ( |
||||
|
defaultSettings.watermark_cols === 0 || |
||||
|
parseInt( |
||||
|
defaultSettings.watermark_x + |
||||
|
defaultSettings.watermark_width * |
||||
|
defaultSettings.watermark_cols + |
||||
|
defaultSettings.watermark_x_space * |
||||
|
(defaultSettings.watermark_cols - 1) |
||||
|
) > page_width |
||||
|
) { |
||||
|
defaultSettings.watermark_cols = parseInt( |
||||
|
(page_width - |
||||
|
defaultSettings.watermark_x + |
||||
|
defaultSettings.watermark_x_space) / |
||||
|
(defaultSettings.watermark_width + |
||||
|
defaultSettings.watermark_x_space) - |
||||
|
1 |
||||
|
) |
||||
|
defaultSettings.watermark_x_space = parseInt( |
||||
|
(page_width - |
||||
|
defaultSettings.watermark_x - |
||||
|
defaultSettings.watermark_width * |
||||
|
defaultSettings.watermark_cols) / |
||||
|
(defaultSettings.watermark_cols - 1) - |
||||
|
10 |
||||
|
) |
||||
|
} |
||||
|
// 如果将水印行数设置为0,或水印行数设置过大,超过页面最大长度,则重新计算水印行数和水印y轴间隔
|
||||
|
if ( |
||||
|
defaultSettings.watermark_rows === 0 || |
||||
|
parseInt( |
||||
|
defaultSettings.watermark_y + |
||||
|
defaultSettings.watermark_height * |
||||
|
defaultSettings.watermark_rows + |
||||
|
defaultSettings.watermark_y_space * |
||||
|
(defaultSettings.watermark_rows - 1) |
||||
|
) > page_height |
||||
|
) { |
||||
|
defaultSettings.watermark_rows = parseInt( |
||||
|
(defaultSettings.watermark_y_space + |
||||
|
page_height - |
||||
|
defaultSettings.watermark_y) / |
||||
|
(defaultSettings.watermark_height + |
||||
|
defaultSettings.watermark_y_space) |
||||
|
) |
||||
|
defaultSettings.watermark_y_space = parseInt((page_height - defaultSettings.watermark_y - defaultSettings.watermark_height * defaultSettings.watermark_rows) / (defaultSettings.watermark_rows - 1)) |
||||
|
} |
||||
|
var x |
||||
|
var y |
||||
|
for (var i = 0; i < defaultSettings.watermark_rows; i++) { |
||||
|
y = defaultSettings.watermark_y + (defaultSettings.watermark_y_space + defaultSettings.watermark_height) * i |
||||
|
for (var j = 0; j < defaultSettings.watermark_cols; j++) { |
||||
|
x = defaultSettings.watermark_x + (defaultSettings.watermark_width + defaultSettings.watermark_x_space) * j |
||||
|
|
||||
|
const dom = document.getElementsByClassName(className) |
||||
|
const canvas = document.createElement('canvas') |
||||
|
const cxt = canvas.getContext('2d') |
||||
|
const divImg = document.createElement('div') |
||||
|
|
||||
|
const imgScale = 0.4 |
||||
|
// canvas.width = 200
|
||||
|
|
||||
|
var mask_div = document.createElement('div') |
||||
|
|
||||
|
mask_div.id = 'mask_div' + i + j |
||||
|
mask_div.className = 'mask_div' |
||||
|
|
||||
|
mask_div.appendChild(document.createTextNode(defaultSettings.watermark_txt)) |
||||
|
|
||||
|
if (type === 'img') { |
||||
|
// 创建新的图片对象
|
||||
|
const img = new Image() |
||||
|
// 指定图片的URL
|
||||
|
img.src = defaultSettings.watermark_txt |
||||
|
// 浏览器加载图片完毕后再绘制图片
|
||||
|
img.onload = function() { |
||||
|
// cxt.drawImage(img,0,0);
|
||||
|
cxt.rotate(-20 * Math.PI / 180) |
||||
|
// const whScale = img.width / img.height
|
||||
|
cxt.clearRect(0, 0, canvas.width, canvas.height) |
||||
|
cxt.drawImage(img, // 规定要使用的图像、画布或视频。
|
||||
|
0, 0, // 开始剪切的 x 坐标位置。
|
||||
|
img.width, img.height, // 被剪切图像的高度。
|
||||
|
0, 100, // 在画布上放置图像的 x 、y坐标位置。
|
||||
|
img.width * imgScale, img.height * imgScale // 要使用的图像的宽度、高度
|
||||
|
) |
||||
|
divImg.style.opacity = defaultSettings.watermark_alpha |
||||
|
divImg.style.background = 'url(' + canvas.toDataURL('image/png') + ') left top repeat' |
||||
|
drawImage(divImg, dom) |
||||
|
} |
||||
|
} else { |
||||
|
// 设置水印div倾斜显示
|
||||
|
mask_div.style.webkitTransform = 'rotate(-' + defaultSettings.watermark_angle + 'deg)' |
||||
|
mask_div.style.MozTransform = 'rotate(-' + defaultSettings.watermark_angle + 'deg)' |
||||
|
mask_div.style.msTransform = 'rotate(-' + defaultSettings.watermark_angle + 'deg)' |
||||
|
mask_div.style.OTransform = 'rotate(-' + defaultSettings.watermark_angle + 'deg)' |
||||
|
mask_div.style.transform = 'rotate(-' + defaultSettings.watermark_angle + 'deg)' |
||||
|
mask_div.style.visibility = '' |
||||
|
mask_div.style.position = 'absolute' |
||||
|
mask_div.style.left = x + 'px' |
||||
|
mask_div.style.top = y + 'px' |
||||
|
mask_div.style.overflow = 'hidden' |
||||
|
mask_div.style.zIndex = '9999' |
||||
|
mask_div.style.pointerEvents = 'none' // pointer-events:none 让水印不遮挡页面的点击事件
|
||||
|
mask_div.style.opacity = defaultSettings.watermark_alpha |
||||
|
mask_div.style.fontSize = defaultSettings.watermark_fontsize |
||||
|
mask_div.style.fontFamily = defaultSettings.watermark_font |
||||
|
mask_div.style.color = defaultSettings.watermark_color |
||||
|
mask_div.style.textAlign = 'center' |
||||
|
mask_div.style.width = defaultSettings.watermark_width + 'px' |
||||
|
mask_div.style.height = defaultSettings.watermark_height + 'px' |
||||
|
mask_div.style.display = 'block' |
||||
|
oTemp.appendChild(mask_div) |
||||
|
|
||||
|
const parent = document.getElementsByClassName(className)[0] |
||||
|
const child = parent.getElementsByClassName('mask_div') |
||||
|
if (child.length > 0) { |
||||
|
for (let i = 0; i < child.length; i++) { |
||||
|
parent.removeChild(child[i]) |
||||
|
} |
||||
|
} |
||||
|
parent.appendChild(oTemp.cloneNode(true)) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
// document.body.appendChild(oTemp)
|
||||
|
} |
||||
|
|
||||
|
var drawImage = function(div, dom) { |
||||
|
div.style.pointerEvents = 'none' |
||||
|
div.className = 'weterbox' |
||||
|
div.style.top = 0 |
||||
|
div.style.left = 0 |
||||
|
div.style.position = 'absolute' |
||||
|
div.style.zIndex = '100000' |
||||
|
div.style.width = '100%' |
||||
|
div.style.height = '100%' |
||||
|
// console.log(dom)
|
||||
|
if (dom.length > 0) { |
||||
|
for (let i = 0; i < dom.length; i++) { |
||||
|
const child = dom[i].getElementsByClassName('weterbox') |
||||
|
if (child.length > 0) { |
||||
|
dom[i].removeChild(child[0]) |
||||
|
} |
||||
|
const childTxt = dom[i].getElementsByClassName('mask_div') |
||||
|
if (childTxt.length > 0) { |
||||
|
for (let j = 0; j < childTxt.length; j++) { |
||||
|
dom[i].removeChild(childTxt[j]) |
||||
|
} |
||||
|
} |
||||
|
dom[i].appendChild(div.cloneNode(true)) |
||||
|
// console.log(i,dom[i])
|
||||
|
} |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue