docs: add open-source license and attribution statements to internal/sdk and internal/tunnel source files

This commit is contained in:
duorameng
2026-06-26 09:24:08 +08:00
parent bdeda51b22
commit 79fcf26c88
41 changed files with 500 additions and 26 deletions
@@ -38,7 +38,7 @@ onMounted(() => {
<template>
<div class="space-y-4">
<div class="flex flex-col md:flex-row md:items-center justify-between gap-4">
<div class="flex flex-col md:flex-row md:flex-wrap md:items-center justify-between gap-4">
<div class="flex flex-col shrink-0">
<div class="flex items-center gap-2">
<h2 class="text-xl sm:text-2xl font-bold tracking-tight">互联管理</h2>
@@ -47,43 +47,44 @@ onMounted(() => {
<p class="text-muted-foreground text-xs mt-0.5 ml-0.5">集中监控其他面板的状态并可无缝穿越到子节点进行管理</p>
</div>
<div class="flex flex-col sm:flex-row items-center gap-2 w-full md:w-auto md:ml-auto md:justify-end">
<div class="flex flex-row items-center flex-wrap gap-2 w-full md:w-auto md:ml-auto md:justify-end">
<!-- 搜索框 (仅节点管理时显示) -->
<div class="relative w-full sm:w-[200px] md:w-[240px] group shrink-0" v-if="activeTab === 'nodes'">
<div class="relative w-full sm:flex-1 md:flex-none md:w-[180px] xl:w-[240px] group shrink-0" v-if="activeTab === 'nodes'">
<Search class="absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground group-focus-within:text-primary transition-colors" />
<Input v-model="searchQuery" placeholder="搜索节点..." class="h-9 pl-9 w-full bg-muted/20 border-muted-foreground/10 focus:bg-background text-sm" />
</div>
<!-- 按钮控制组 -->
<div class="flex items-center gap-2 w-full sm:w-auto sm:justify-end overflow-x-auto scrollbar-none pb-1 -mb-1 sm:pb-0 sm:mb-0">
<!-- 刷新按钮 -->
<Button variant="outline" size="icon" class="h-9 w-9 shrink-0" @click="fetchNodes" :disabled="loading" title="刷新">
<RefreshCw class="h-4 w-4" :class="{ 'animate-spin': loading }" />
</Button>
<!-- 取消主控角色按钮 -->
<Button variant="outline" class="flex-1 sm:flex-none shrink-0 px-2 md:px-3 h-9 shadow-sm text-destructive border-destructive/20 hover:bg-destructive/10" @click="emit('cancel')">
取消主控
</Button>
<div class="flex items-center gap-2 flex-1 sm:flex-none sm:ml-0">
<!-- 取消主控角色按钮 -->
<Button variant="outline" class="flex-1 sm:flex-none shrink-0 px-3 h-9 shadow-sm text-destructive border-destructive/20 hover:bg-destructive/10" @click="emit('cancel')">
取消主控
</Button>
<!-- 添加子节点按钮 -->
<Button v-if="activeTab === 'nodes'" @click="masterListRef?.openAddDialog()" class="flex-1 sm:flex-none shrink-0 px-2 md:px-3 h-9 shadow-sm font-medium" title="添加子节点">
<Plus class="h-4 w-4 md:mr-1.5" /> <span class="hidden md:inline">添加子节点</span>
</Button>
<!-- Tabs 切换 -->
<Tabs :model-value="activeTab" @update:model-value="(v: string | number) => activeTab = String(v)" class="shrink-0 flex-1 sm:flex-none min-w-[120px]">
<TabsList class="h-9 p-0.5 bg-muted/20 border border-border/40 rounded-lg w-full flex">
<TabsTrigger value="nodes" class="flex-1 sm:flex-none px-3 h-8 text-xs gap-1.5 font-medium transition-all">
<Server class="w-3.5 h-3.5 opacity-70" />
<span>节点</span>
</TabsTrigger>
<TabsTrigger value="sync" class="flex-1 sm:flex-none px-3 h-8 text-xs gap-1.5 font-medium transition-all">
<ArrowRightLeft class="w-3.5 h-3.5 opacity-70" />
<span>同步</span>
</TabsTrigger>
</TabsList>
</Tabs>
<!-- 添加子节点按钮 -->
<Button v-if="activeTab === 'nodes'" @click="masterListRef?.openAddDialog()" class="flex-1 sm:flex-none shrink-0 px-3 h-9 shadow-sm font-medium gap-1" title="添加子节点">
<Plus class="h-4 w-4" /><span>添加</span>
</Button>
<!-- Tabs 切换 -->
<Tabs :model-value="activeTab" @update:model-value="(v: string | number) => activeTab = String(v)" class="flex-1 sm:flex-none shrink-0 min-w-[120px]">
<TabsList class="h-9 p-0.5 bg-muted/20 border border-border/40 rounded-lg w-full flex">
<TabsTrigger value="nodes" class="flex-1 px-3 h-8 text-xs gap-1.5 font-medium transition-all">
<Server class="w-3.5 h-3.5 opacity-70" />
<span>节点</span>
</TabsTrigger>
<TabsTrigger value="sync" class="flex-1 px-3 h-8 text-xs gap-1.5 font-medium transition-all">
<ArrowRightLeft class="w-3.5 h-3.5 opacity-70" />
<span>同步</span>
</TabsTrigger>
</TabsList>
</Tabs>
</div>
</div>
</div>
</div>