feat: add login ip desc request
This commit is contained in:
@@ -380,24 +380,8 @@ const siteTitle = computed(() => {
|
||||
</div>
|
||||
<!-- 移动端主题切换入口 -->
|
||||
<button @click="toggleTheme" class="md:hidden w-full text-left px-4 py-2 text-sm hover:bg-muted dark:hover:bg-white/5 flex items-center justify-between">
|
||||
<span>外观({{ themeLabel }})</span>
|
||||
<span class="inline-flex items-center gap-2">
|
||||
<svg v-if="theme === 'dark'" class="w-4 h-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>
|
||||
</svg>
|
||||
<svg v-else class="w-4 h-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<circle cx="12" cy="12" r="5"/>
|
||||
<line x1="12" y1="1" x2="12" y2="3"/>
|
||||
<line x1="12" y1="21" x2="12" y2="23"/>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/>
|
||||
<line x1="1" y1="12" x2="3" y2="12"/>
|
||||
<line x1="21" y1="12" x2="23" y2="12"/>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>
|
||||
</svg>
|
||||
<span class="text-xs text-muted-foreground">{{ themeLabel }}</span>
|
||||
</span>
|
||||
<span class="truncate">外观</span>
|
||||
<span class="text-xs text-muted-foreground flex-shrink-0">{{ themeLabel }}</span>
|
||||
</button>
|
||||
<button @click="logout" class="w-full text-left px-4 py-2 text-sm text-destructive hover:bg-muted dark:hover:bg-white/5 transition-colors">
|
||||
<div class="flex items-center space-x-2">
|
||||
|
||||
@@ -67,15 +67,15 @@ const openIpInfo = async (ip: string) => {
|
||||
</button>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<div class="overflow-x-auto">
|
||||
<div class="min-w-full rounded-md border border-border">
|
||||
<table class="w-full text-sm">
|
||||
<div class="overflow-x-auto" style="will-change: transform;">
|
||||
<div class="min-w-full">
|
||||
<table class="w-full text-sm border-separate border-spacing-0">
|
||||
<thead>
|
||||
<tr class="bg-muted">
|
||||
<th class="px-3 py-2 text-left">用户名</th>
|
||||
<th class="px-3 py-2 text-left">IP</th>
|
||||
<th class="px-3 py-2 text-left">UA</th>
|
||||
<th class="px-3 py-2 text-left">登录时间</th>
|
||||
<tr>
|
||||
<th class="px-3 py-2 text-left border-b border-border">用户名</th>
|
||||
<th class="px-3 py-2 text-left border-b border-border">IP</th>
|
||||
<th class="px-3 py-2 text-left border-b border-border">UA</th>
|
||||
<th class="px-3 py-2 text-left border-b border-border">登录时间</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -86,7 +86,7 @@ const openIpInfo = async (ip: string) => {
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-for="item in logs" :key="item.id" class="border-t border-border">
|
||||
<tr v-for="item in logs" :key="item.id" class="border-b border-border">
|
||||
<td class="px-3 py-2">{{ item.username }}</td>
|
||||
<td class="px-3 py-2">
|
||||
<button class="text-blue-600 dark:text-blue-400 hover:underline" @click="openIpInfo(item.ip)">{{ item.ip }}</button>
|
||||
|
||||
Reference in New Issue
Block a user