mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 09:38:02 +00:00
fix: 账户时间线入口与路由修复
- 移除账户列表下拉/卡片的时间线入口,仅保留详情弹窗顶部按钮 - ActionDropdown 全局互斥,避免多菜单堆叠 - 账户筛选去重,避免“未知渠道”重复泄露
This commit is contained in:
@@ -44,12 +44,20 @@
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
class="flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200"
|
||||
@click="handleClose"
|
||||
>
|
||||
<i class="fas fa-times" />
|
||||
</button>
|
||||
<div class="flex items-center gap-2">
|
||||
<button
|
||||
class="flex items-center gap-2 rounded-full bg-purple-100 px-3 py-2 text-xs font-semibold text-purple-700 transition hover:bg-purple-200 dark:bg-purple-500/10 dark:text-purple-200 dark:hover:bg-purple-500/20"
|
||||
@click="goTimeline"
|
||||
>
|
||||
<i class="fas fa-clock" /> 请求时间线
|
||||
</button>
|
||||
<button
|
||||
class="flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200"
|
||||
@click="handleClose"
|
||||
>
|
||||
<i class="fas fa-times" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 内容区域 -->
|
||||
@@ -325,6 +333,7 @@
|
||||
|
||||
<script setup>
|
||||
import { computed, nextTick, onUnmounted, ref, watch } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import Chart from 'chart.js/auto'
|
||||
import { useThemeStore } from '@/stores/theme'
|
||||
@@ -343,6 +352,7 @@ const emit = defineEmits(['close'])
|
||||
|
||||
const themeStore = useThemeStore()
|
||||
const { isDarkMode } = storeToRefs(themeStore)
|
||||
const router = useRouter()
|
||||
|
||||
const chartCanvas = ref(null)
|
||||
let chartInstance = null
|
||||
@@ -579,6 +589,14 @@ const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
const goTimeline = () => {
|
||||
if (!props.account?.id) return
|
||||
router.push({
|
||||
path: `/accounts/${props.account.id}/usage-records`,
|
||||
query: { platform: props.account.platform || props.account.accountType }
|
||||
})
|
||||
}
|
||||
|
||||
watch(
|
||||
() => props.show,
|
||||
(visible) => {
|
||||
|
||||
@@ -77,7 +77,21 @@ const getActionClass = (action) => {
|
||||
return colorMap[action.color] || colorMap.gray
|
||||
}
|
||||
|
||||
const instanceId = Symbol('action-dropdown')
|
||||
const handleGlobalOpen = (event) => {
|
||||
if (event?.detail?.id !== instanceId) {
|
||||
closeDropdown()
|
||||
}
|
||||
}
|
||||
|
||||
const toggleDropdown = async () => {
|
||||
if (!isOpen.value) {
|
||||
window.dispatchEvent(
|
||||
new CustomEvent('action-dropdown-open', {
|
||||
detail: { id: instanceId }
|
||||
})
|
||||
)
|
||||
}
|
||||
isOpen.value = !isOpen.value
|
||||
if (isOpen.value) {
|
||||
await nextTick()
|
||||
@@ -164,11 +178,13 @@ onMounted(() => {
|
||||
window.addEventListener('scroll', handleScroll, true)
|
||||
window.addEventListener('resize', handleResize)
|
||||
document.addEventListener('click', handleClickOutside)
|
||||
window.addEventListener('action-dropdown-open', handleGlobalOpen)
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
window.removeEventListener('scroll', handleScroll, true)
|
||||
window.removeEventListener('resize', handleResize)
|
||||
document.removeEventListener('click', handleClickOutside)
|
||||
window.removeEventListener('action-dropdown-open', handleGlobalOpen)
|
||||
})
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user