2.4.3
This commit is contained in:
@@ -133,20 +133,29 @@
|
||||
<span class="text-gray-500">已打招呼</span>
|
||||
<span class="text-blue-600 font-medium">{{ greetingStats.greetingCount }} 位</span>
|
||||
</div>
|
||||
<div class="flex items-center justify-between text-xs">
|
||||
<span class="text-gray-500">已发邀请</span>
|
||||
<span class="text-purple-600 font-medium">{{ greetingStats.inviteCount }} 个</span>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-between text-xs">
|
||||
<span class="text-gray-500">已回复</span>
|
||||
<button @click="showReplyList"
|
||||
class="text-blue-500 hover:text-blue-600 hover:underline cursor-pointer" title="查看回复列表">
|
||||
历史回复列表
|
||||
</button>
|
||||
<div class="flex items-center gap-1">
|
||||
<button @click="showReplyList"
|
||||
class="text-blue-500 hover:text-blue-600 hover:underline cursor-pointer" title="查看回复列表">
|
||||
历史回复
|
||||
</button>
|
||||
|
||||
<span class="text-emerald-600 font-medium">{{ greetingStats.replyCount || 0 }} 条</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-between text-xs">
|
||||
<span class="text-gray-500">已邀请</span>
|
||||
<button @click="showInviteList"
|
||||
class="text-purple-500 hover:text-purple-600 hover:underline cursor-pointer" title="查看邀请列表">
|
||||
回复邀请列表
|
||||
</button>
|
||||
<div class="flex items-center gap-1">
|
||||
<span class="text-purple-600 font-medium">{{ greetingStats.inviteCount || 0 }} 个</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 回复列表弹出框 -->
|
||||
<div v-if="replyListVisible"
|
||||
class="absolute left-0 right-0 bottom-full mb-1 bg-white border border-gray-200 rounded-lg shadow-lg z-50 max-h-48 overflow-hidden"
|
||||
@@ -164,7 +173,7 @@
|
||||
<div v-if="repliedSessions.length === 0" class="text-gray-400 text-xs text-center py-3">
|
||||
暂无回复记录
|
||||
</div>
|
||||
<div v-else>
|
||||
<div v-els e>
|
||||
<div v-for="(session, index) in repliedSessions" :key="index"
|
||||
class="px-3 py-1.5 text-xs text-gray-700 hover:bg-gray-50 border-b border-gray-50 last:border-0 flex items-center justify-between">
|
||||
<div class="truncate w-16" :title="session.name">
|
||||
@@ -187,6 +196,47 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 邀请列表弹出框 -->
|
||||
<div v-if="inviteListVisible"
|
||||
class="absolute left-0 right-0 bottom-full mb-1 bg-white border border-gray-200 rounded-lg shadow-lg z-50 max-h-48 overflow-hidden"
|
||||
:style="{ maxWidth: sidebarWidth + 'px' }">
|
||||
<div class="flex items-center justify-between px-3 py-2 border-b border-gray-100 bg-gray-50">
|
||||
<span class="text-xs font-semibold text-purple-600">邀请列表</span>
|
||||
<button @click="inviteListVisible = false" class="text-gray-400 hover:text-gray-600">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||
d="M6 18L18 6M6 6l12 12" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="overflow-y-auto max-h-36">
|
||||
<div v-if="invitedSessions.length === 0" class="text-gray-400 text-xs text-center py-3">
|
||||
暂无邀请记录
|
||||
</div>
|
||||
<div v-else>
|
||||
<div v-for="(session, index) in invitedSessions" :key="index"
|
||||
class="px-3 py-1.5 text-xs text-gray-700 hover:bg-gray-50 border-b border-gray-50 last:border-0 flex items-center justify-between">
|
||||
<div class="truncate w-16" :title="session.name">
|
||||
{{ session.name }}
|
||||
</div>
|
||||
<div class="flex items-center gap-2">
|
||||
<span class="text-gray-400 text-[10px]">
|
||||
视图: {{ session.viewId }}
|
||||
</span>
|
||||
<button @click="copyAnchorId(session.anchorId)"
|
||||
class="text-purple-500 hover:text-purple-600 p-1 rounded hover:bg-purple-50 transition-colors"
|
||||
title="复制 ID">
|
||||
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||
d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
@@ -213,18 +263,23 @@ const emit = defineEmits(['tabSwitch', 'goBack', 'stopAll'])
|
||||
|
||||
// 回复列表相关
|
||||
const replyListVisible = ref(false)
|
||||
/** @type {import('vue').Ref<Array<{name: string; id: string}>>} */
|
||||
const inviteListVisible = ref(false)
|
||||
/** @type {import('vue').Ref<Array<{name: string; anchorId: string; viewId: number; invited: boolean}>>} */
|
||||
const repliedSessions = ref([])
|
||||
/** @type {import('vue').Ref<Array<{name: string; anchorId: string; viewId: number; invited: boolean}>>} */
|
||||
const invitedSessions = ref([])
|
||||
|
||||
// 显示回复列表
|
||||
const showReplyList = async () => {
|
||||
replyListVisible.value = !replyListVisible.value
|
||||
inviteListVisible.value = false
|
||||
if (replyListVisible.value && window.electronAPI?.getRepliedSessions) {
|
||||
try {
|
||||
const result = await window.electronAPI.getRepliedSessions()
|
||||
console.log("回复列表里是", result)
|
||||
// 按倒序展示,最新的在最前面
|
||||
repliedSessions.value = (result || []).reverse()
|
||||
// 过滤出未邀请的会话
|
||||
repliedSessions.value = (result || []).filter(session => !session.invited).reverse()
|
||||
} catch (e) {
|
||||
console.error('获取回复列表失败:', e)
|
||||
repliedSessions.value = []
|
||||
@@ -232,6 +287,24 @@ const showReplyList = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
// 显示邀请列表
|
||||
const showInviteList = async () => {
|
||||
inviteListVisible.value = !inviteListVisible.value
|
||||
replyListVisible.value = false
|
||||
if (inviteListVisible.value && window.electronAPI?.getRepliedSessions) {
|
||||
try {
|
||||
const result = await window.electronAPI.getRepliedSessions()
|
||||
console.log("邀请列表里是", result)
|
||||
// 按倒序展示,最新的在最前面
|
||||
// 过滤出已邀请的会话
|
||||
invitedSessions.value = (result || []).filter(session => session.invited).reverse()
|
||||
} catch (e) {
|
||||
console.error('获取邀请列表失败:', e)
|
||||
invitedSessions.value = []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 复制主播 ID
|
||||
const copyAnchorId = (id) => {
|
||||
if (navigator.clipboard && window.isSecureContext) {
|
||||
|
||||
Reference in New Issue
Block a user