From cbbf3082243abb64d045aea7c6b6fe6b816420ca Mon Sep 17 00:00:00 2001 From: Megghy Date: Fri, 29 Mar 2024 11:59:05 +0800 Subject: [PATCH] danmaku support openId --- src/api/api-models.ts | 1 + src/components/DanmakuContainer.vue | 37 ++++++++++++++++----------- src/components/DanmakuItem.vue | 6 ++--- src/views/manage/LiveDetailManage.vue | 2 +- src/views/obs/LiveRequestOBS.vue | 8 ++++-- 5 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/api/api-models.ts b/src/api/api-models.ts index f177f0d..577a88e 100644 --- a/src/api/api-models.ts +++ b/src/api/api-models.ts @@ -545,6 +545,7 @@ export interface DanmakuModel { price: number | null isEmoji: boolean num: number + ouId: string } export interface ResponseFeedbackModel { message: string diff --git a/src/components/DanmakuContainer.vue b/src/components/DanmakuContainer.vue index 73c9f5c..9f5cf24 100644 --- a/src/components/DanmakuContainer.vue +++ b/src/components/DanmakuContainer.vue @@ -33,6 +33,7 @@ import { NSwitch, NTag, NTooltip, + useMessage, } from 'naive-ui' import { computed, nextTick, onMounted, ref, watch } from 'vue' import LiveInfoContainer from './LiveInfoContainer.vue' @@ -43,7 +44,7 @@ enum RankType { Paid, } interface RankInfo { - uId: number + ouId: string uName: string Paid: number Danmakus: number @@ -106,7 +107,7 @@ const { to = 'space', } = defineProps() const emit = defineEmits<{ - (e: 'onClickName', uId: number): boolean + (e: 'onClickName', uId: number, ouId: string): boolean }>() defineExpose({ InsertDanmakus, @@ -146,19 +147,24 @@ const existEnterMessage = ref(false) const exportType = ref<'json' | 'xml' | 'csv'>('json') const onlyExportFilteredDanmakus = ref(false) const isExporting = ref(false) +const message = useMessage() -function OnNameClick(uId: number) { +function OnNameClick(uId: number, ouId: string) { if (isInModal) { - emit('onClickName', uId) + emit('onClickName', uId, ouId) return } switch (to) { case 'userDanmakus': { - userDanmakus.value = currentDanmakus.filter((d) => d.uId == uId) + userDanmakus.value = currentDanmakus.filter((d) => (d.uId ? d.uId == uId : d.ouId == ouId)) showModal.value = true break } case 'space': { + if (!uId) { + message.error('从开放平台获取的弹幕已不再支持前往用户空间') + return + } showModal.value = false nextTick(() => { window.open('https://space.bilibili.com/' + uId, '_blank') @@ -204,15 +210,16 @@ function OnRank(isRank: boolean) { function OnRankDirect(type: RankType, refresh: boolean, orderByDescending = true) { if (refresh) { var rank = {} as { - [uId: number]: RankInfo + [ouId: string]: RankInfo } currentDanmakus.forEach((danmaku) => { - if (danmaku.uId in rank) { - if (danmaku.type == EventDataTypes.Message) rank[danmaku.uId].Danmakus++ - rank[danmaku.uId].Paid += danmaku.price ?? 0 + if (danmaku.ouId in rank) { + if (danmaku.type == EventDataTypes.Message) rank[danmaku.ouId].Danmakus++ + rank[danmaku.ouId].Paid += danmaku.price ?? 0 } else { - rank[danmaku.uId] = { - uId: danmaku.uId, + rank[danmaku.ouId] = { + //uId: danmaku.uId, + ouId: danmaku.ouId, uName: danmaku.uName, Paid: danmaku.price ?? 0, Danmakus: danmaku.type == EventDataTypes.Message ? 1 : 0, @@ -318,7 +325,7 @@ function GetFilteredDanmakus(targetDanmakus?: DanmakuModel[]) { if (orderDecreasing.value) tempDanmakus = tempDanmakus.reverse() var index = 0 tempDanmakus.forEach((d) => { - d.id = `${d.uId}_${d.time}_${index}` + d.id = `${d.ouId}_${d.time}_${index}` index++ }) return tempDanmakus @@ -563,14 +570,14 @@ onMounted(() => { - + {{ user.Index }} - - + + {{ format(danmaku.time, 'yyyy-MM-dd HH:mm:ss') }} - + {{ danmaku.uName }} @@ -110,7 +110,7 @@ defineEmits<{