diff --git a/src/api/system/logs.js b/src/api/system/logs.js index 1278eb5..bef8aa5 100644 --- a/src/api/system/logs.js +++ b/src/api/system/logs.js @@ -1,6 +1,13 @@ import request from '@/utils/request' import qs from 'qs' +export function getErrDetail(id) { + return request({ + url: 'api/log/getErrorLogDetail?id=' + id, + method: 'get' + }) +} + // 清空登录日志 export function FetchClearLoginLog(data) { return request({ @@ -56,6 +63,7 @@ export function userMsgDel(data) { } export default { + getErrDetail, FetchClearLoginLog, FetchClearLog, FetchClearErrorLog, diff --git a/src/utils/waterMark.js b/src/utils/waterMark.js new file mode 100644 index 0000000..31051d4 --- /dev/null +++ b/src/utils/waterMark.js @@ -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]) + } + } +} diff --git a/src/views/system/log/errorLog/index.vue b/src/views/system/log/errorLog/index.vue index d0afa7d..7239a2f 100644 --- a/src/views/system/log/errorLog/index.vue +++ b/src/views/system/log/errorLog/index.vue @@ -2,7 +2,7 @@
效果预览
-是否启用
-