From de142c4729d8304174e6ecf1ca51c9f8c2197c80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=8E=AB=E5=94=90=E5=B0=BC?= Date: Fri, 5 Jun 2026 13:20:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增getDomainOnly工具函数用于提取URL域名 2. 新增postTrackersCounter接口调用方法 3. 在文章详情页添加访问数据上报 #31 #41 --- api/v2/all.api.js | 6 +++++- pagesA/article-detail/article-detail.vue | 16 ++++++++++++++++ utils/url.params.js | 9 +++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/api/v2/all.api.js b/api/v2/all.api.js index 7ad25fe..1cdf1d8 100644 --- a/api/v2/all.api.js +++ b/api/v2/all.api.js @@ -177,5 +177,9 @@ export default { getDoubanDetail: (url) => { return HttpHandler.Get(`/apis/api.douban.moony.la/v1alpha1/doubanmovies/-/getDoubanDetail`, { url }) - } + }, + + postTrackersCounter: (data) => { + return HttpHandler.Post(`/apis/api.halo.run/v1alpha1/trackers/counter`, data) + }, } \ No newline at end of file diff --git a/pagesA/article-detail/article-detail.vue b/pagesA/article-detail/article-detail.vue index 3a7a55b..7440361 100644 --- a/pagesA/article-detail/article-detail.vue +++ b/pagesA/article-detail/article-detail.vue @@ -401,6 +401,7 @@ import ArticleDouban from '@/components/article-douban/article-douban.vue'; import barrage from '@/components/barrage/barrage.vue'; import { getAppConfigs } from '@/config/index.js'; import { upvote } from '@/utils/upvote.js'; +import { getDomainOnly } from '@/utils/url.params.js' import { checkPostRestrictRead, copyToClipboard, getRestrictReadTypeName, getShowableContent } from '@/utils/restrictRead'; import HaloTokenConfig from '@/config/uhalo.config'; import RestrictReadSkeleton from '@/components/restrict-read-skeleton/restrict-read-skeleton.vue'; @@ -636,6 +637,7 @@ export default { this.reloadVote = true; this.fnHandleSetFlotButtonItems(this.haloConfigs); this.handleQueryCommentListScrollTop(); + this.fnTrackersCounter(); }) .catch((err) => { console.log('错误', err); @@ -740,6 +742,20 @@ export default { uni.$tm.toast('点赞失败'); }); }, + fnTrackersCounter(){ + const winInfo = uni.getWindowInfo() + const appBaseInfo = uni.getAppBaseInfo() + this.$httpApi.v2.postTrackersCounter({ + group: 'content.halo.run', + plural: 'posts', + name: this.result?.metadata?.name, + hostname: getDomainOnly(HaloTokenConfig.BASE_API), + screen: `${winInfo.screenWidth}x${winInfo.screenHeight}`, + language: appBaseInfo.language, + url: `/archives/${HaloTokenConfig.BASE_API}`, + referrer: `${HaloTokenConfig.BASE_API}/` + }) + }, async fnShowShare() { this.poster.show = true; await this.handleCreatePoster(); diff --git a/utils/url.params.js b/utils/url.params.js index 8c1165c..3b407b0 100644 --- a/utils/url.params.js +++ b/utils/url.params.js @@ -50,3 +50,12 @@ export function jsonToUrlParams2(json) { }) ).join('&') } + +/** +* 仅获取域名 +* @param {String} url +* @returns {String} +*/ +export function getDomainOnly(url){ + return url.replace(/^(https?:\/\/)/, '').split('/')[0] +} \ No newline at end of file