From f56718e93a737e5b5871fae0fedea1666f006b34 Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Wed, 15 Apr 2026 13:16:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=B3=BB=E7=BB=9F=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E6=98=AF=E4=B8=80=E4=B8=AA=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E5=88=99=E7=9B=B4=E6=8E=A5=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/component/Account/message/system.vue | 9 ++++++++- src/tool/util.js | 14 +++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/component/Account/message/system.vue b/src/component/Account/message/system.vue index 8795031f..3b98a772 100644 --- a/src/component/Account/message/system.vue +++ b/src/component/Account/message/system.vue @@ -32,6 +32,7 @@ import { Https } from "@/tool/https"; import { useRouter,useRoute } from 'vue-router' import { useStore } from "vuex"; import { useI18n } from 'vue-i18n' +import { isValidUrl } from '@/tool/util'; export default defineComponent({ components:{ }, @@ -70,7 +71,13 @@ export default defineComponent({ accountMessage.isNoData = true }) } - let setRead = (item:any)=>{ + let setRead = (item: any) => { + const content = item.content.content + console.log('111', isValidUrl(content)); + if (isValidUrl(content)) { + window.open(content, '_blank'); + } + prop.setReadStatus(item).then((rv:any)=>{ item.isRead = 1 }).catch((err:any)=>{ diff --git a/src/tool/util.js b/src/tool/util.js index b8f095c7..1111bca4 100644 --- a/src/tool/util.js +++ b/src/tool/util.js @@ -672,6 +672,17 @@ function sketchToMask(sketchImage) { img.src = sketchImage; }); } + +function isValidUrl(string) { + try { + const url = new URL(string) + // 通常我们只需要 http 或 https 协议 + return url.protocol === "http:" || url.protocol === "https:" + } catch (err) { + return false + } +} + export { isEmail, getUploadUrl, @@ -695,5 +706,6 @@ export { calculateGradientCoordinate, segmentImage, UrlToFile, - sketchToMask + sketchToMask, + isValidUrl } \ No newline at end of file