From 8276b3e87f56665298dc09d9f93020829c26f986 Mon Sep 17 00:00:00 2001 From: Echo <1711788888@qq.com> Date: Tue, 2 Sep 2025 22:08:50 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=96=B0=E5=A2=9E=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E6=97=B6=E6=B0=B4=E5=8D=B0=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/bot_logo.png | Bin 0 -> 35826 bytes src/components/bottomInfo/bottomInfo.vue | 22 +--- src/components/richtext/rich-edit.vue | 147 +++++++++++++++++++++++ src/pathInfo.json | 1 + src/view/bot/bot/botForm.vue | 2 - 5 files changed, 151 insertions(+), 21 deletions(-) create mode 100644 src/assets/bot_logo.png diff --git a/src/assets/bot_logo.png b/src/assets/bot_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ea9a6c7bdedfb62236cd00bd839e5e74e0e916 GIT binary patch literal 35826 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 A=l}o! literal 0 HcmV?d00001 diff --git a/src/components/bottomInfo/bottomInfo.vue b/src/components/bottomInfo/bottomInfo.vue index 376de05..9d362bd 100644 --- a/src/components/bottomInfo/bottomInfo.vue +++ b/src/components/bottomInfo/bottomInfo.vue @@ -11,22 +11,12 @@ Gin-Vue-Admin - - - -
- Copyright - - flipped-aurora团队Echo
+ @@ -35,10 +25,4 @@ name: 'BottomInfo' }) - console.log( - `%c powered by %c flipped-aurorae %c`, - 'background:#0081ff; padding: 1px; border-radius: 3px 0 0 3px; color: #fff', - 'background:#354855; padding: 1px 5px; border-radius: 0 3px 3px 0; color: #fff; font-weight: bold;', - 'background:transparent' - ) diff --git a/src/components/richtext/rich-edit.vue b/src/components/richtext/rich-edit.vue index 25158da..e238518 100644 --- a/src/components/richtext/rich-edit.vue +++ b/src/components/richtext/rich-edit.vue @@ -27,6 +27,7 @@ import { ElMessage } from 'element-plus' import { getUrl } from '@/utils/image' + import botLogo from '@/assets/bot_logo.png' const emits = defineEmits(['change', 'update:modelValue']) @@ -39,6 +40,10 @@ modelValue: { type: String, default: '' + }, + useWatermark: { + type: Boolean, + default: false } }) @@ -54,6 +59,60 @@ fieldName: 'file', maxFileSize: 1024 * 1024 * 10, // 限制图片大小为10MB maxNumberOfFiles: 1, + async customUpload(file, insertFn) { + // 未开启水印则直接上传原图 + if (!props.useWatermark) { + const formData = new FormData() + formData.append('file', file) + const resp = await fetch(basePath + '/fileUploadAndDownload/upload?noSave=1', { method: 'POST', body: formData }) + const res = await resp.json() + if (res.code === 0) { + const urlPath = getUrl(res.data.file.url) + insertFn(urlPath, res.data.file.name) + } else { + ElMessage.error(res.msg || '上传失败') + } + return + } + try { + const watermarkedBlob = await addBottomWatermark(file, { + stripRatio: 0.18, // 水印条高度占原图高度比例 + background: 'rgba(255,255,255,0.96)', + text: '老陈机器人', + textColor: '#333', + fontFamily: 'PingFang SC, Microsoft YaHei, Arial', + logo: botLogo + }) + + const newFile = new File([watermarkedBlob], file.name, { type: watermarkedBlob.type || file.type }) + const formData = new FormData() + formData.append('file', newFile) + const resp = await fetch(basePath + '/fileUploadAndDownload/upload?noSave=1', { + method: 'POST', + body: formData + }) + const res = await resp.json() + if (res.code === 0) { + const urlPath = getUrl(res.data.file.url) + insertFn(urlPath, res.data.file.name) + } else { + ElMessage.error(res.msg || '上传失败') + } + } catch { + ElMessage.error('处理水印失败') + // 降级:直接走原图上传 + const formData = new FormData() + formData.append('file', file) + const resp = await fetch(basePath + '/fileUploadAndDownload/upload?noSave=1', { method: 'POST', body: formData }) + const res = await resp.json() + if (res.code === 0) { + const urlPath = getUrl(res.data.file.url) + insertFn(urlPath, res.data.file.name) + } else { + ElMessage.error(res.msg || '上传失败') + } + } + }, customInsert(res, insertFn) { if (res.code === 0) { const urlPath = getUrl(res.data.file.url) @@ -110,6 +169,94 @@ valueHtml.value = props.modelValue } ) + + async function addBottomWatermark(file, options) { + const { stripRatio = 0.18, background = 'rgba(255,255,255,0.96)', text = '', textColor = '#333', fontFamily = 'Arial', logo } = options || {} + + const img = await fileToImage(file) + const width = img.naturalWidth || img.width + const height = img.naturalHeight || img.height + const stripHeight = Math.max(60, Math.floor(height * stripRatio)) + + const canvas = document.createElement('canvas') + canvas.width = width + canvas.height = height + stripHeight + const ctx = canvas.getContext('2d') + + // 原图 + ctx.drawImage(img, 0, 0, width, height) + + // 底部水印条背景 + ctx.fillStyle = background + ctx.fillRect(0, height, width, stripHeight) + + // 左侧 Logo(可选) + let logoSize = Math.floor(stripHeight * 0.6) + let logoPadding = Math.floor(stripHeight * 0.2) + if (logo) { + try { + const logoImg = await srcToImage(logo) + const ratio = logoImg.width / logoImg.height + const drawW = logoSize + const drawH = Math.floor(drawW / ratio) + const y = height + Math.floor((stripHeight - drawH) / 2) + ctx.drawImage(logoImg, logoPadding, y, drawW, drawH) + } catch { void 0 } + } + + // 右侧文字 + ctx.fillStyle = textColor + const fontSize = Math.floor(stripHeight * 0.38) + ctx.font = `${fontSize}px ${fontFamily}` + ctx.textBaseline = 'middle' + ctx.textAlign = 'right' + const textPadding = Math.floor(stripHeight * 0.25) + ctx.fillText(text, width - textPadding, height + Math.floor(stripHeight / 2)) + + const blob = await canvasToBlob(canvas, file.type || 'image/png') + return blob + } + + function fileToImage(file) { + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.onload = () => { + const img = new Image() + img.onload = () => resolve(img) + img.onerror = reject + img.src = reader.result + } + reader.onerror = reject + reader.readAsDataURL(file) + }) + } + + function srcToImage(src) { + return new Promise((resolve, reject) => { + const img = new Image() + img.crossOrigin = 'anonymous' + img.onload = () => resolve(img) + img.onerror = reject + img.src = src + }) + } + + function canvasToBlob(canvas, mime) { + return new Promise((resolve) => { + if (canvas.toBlob) { + canvas.toBlob((blob) => resolve(blob), mime, 0.92) + } else { + // 兼容处理 + const dataURL = canvas.toDataURL(mime) + const arr = dataURL.split(',') + const bstr = atob(arr[1]) + let n = bstr.length + const u8arr = new Uint8Array(n) + while (n--) u8arr[n] = bstr.charCodeAt(n) + resolve(new Blob([u8arr], { type: mime })) + } + }) + } diff --git a/src/pathInfo.json b/src/pathInfo.json index e688821..0fa9f30 100644 --- a/src/pathInfo.json +++ b/src/pathInfo.json @@ -26,6 +26,7 @@ "/src/view/goods/article/edit.vue": "Edit", "/src/view/goods/article/index.vue": "Index", "/src/view/goods/index.vue": "goods", + "/src/view/goods/vip/index.vue": "VipList", "/src/view/init/index.vue": "Init", "/src/view/layout/aside/asideComponent/asyncSubmenu.vue": "AsyncSubmenu", "/src/view/layout/aside/asideComponent/index.vue": "AsideComponent", diff --git a/src/view/bot/bot/botForm.vue b/src/view/bot/bot/botForm.vue index 3afe384..b4773c9 100644 --- a/src/view/bot/bot/botForm.vue +++ b/src/view/bot/bot/botForm.vue @@ -29,8 +29,6 @@ defineOptions({ name: 'BotForm' }) -// 自动获取字典 -import { getDictFunc } from '@/utils/format' import { useRoute, useRouter } from "vue-router" import { ElMessage } from 'element-plus' import { ref, reactive } from 'vue'