rebuild: split core into separate repo; move wg-go integration to internal/ctr/corebind
- go.mod: require git.zkcoi.com/zkcoi/meshray/core, replace => ../Meshray - internal/ctr/corebind: EnhancedBind + registry + adapter (wg-go integration isolated) - cmd/mr-wg migrated from old core/cmd/meshray-core - core/ removed; CHANGELOG updated; fix checkdb vet warning
This commit is contained in:
+183
-8
@@ -261,16 +261,191 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 其他页面占位 -->
|
||||
<div v-if="['devices', 'services', 'settings'].includes(currentPage)">
|
||||
<h2 class="text-2xl font-bold mb-6">
|
||||
{{ currentPage === 'devices' ? '设备管理' :
|
||||
currentPage === 'services' ? '服务管理' : '系统设置' }}
|
||||
</h2>
|
||||
<div class="card p-6 text-center text-gray-500">
|
||||
<p>页面开发中...</p>
|
||||
<!-- 设备管理页面 -->
|
||||
<div v-if="currentPage === 'devices'">
|
||||
<h2 class="text-2xl font-bold mb-6">设备管理</h2>
|
||||
<div class="card p-6">
|
||||
<el-button type="primary" @click="openCreateDevice">
|
||||
<el-icon><Plus /></el-icon>
|
||||
创建设备
|
||||
</el-button>
|
||||
<el-table :data="devices" style="width: 100%; margin-top: 20px;">
|
||||
<el-table-column prop="id" label="ID" width="80"></el-table-column>
|
||||
<el-table-column prop="name" label="名称"></el-table-column>
|
||||
<el-table-column prop="network_id" label="网络ID" width="100"></el-table-column>
|
||||
<el-table-column prop="virtual_ip" label="虚拟IP"></el-table-column>
|
||||
<el-table-column prop="status" label="状态" width="100">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status === 'online' ? 'success' : 'info'">
|
||||
{{ row.status === 'online' ? '在线' : '离线' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template #default="{ row }">
|
||||
<el-button size="small" @click="downloadDeviceConfig(row)">配置</el-button>
|
||||
<el-button size="small" type="danger" @click="deleteDevice(row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div v-if="devices.length === 0" class="text-center text-gray-400 py-8">
|
||||
暂无设备,点击「创建设备」开始
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 服务管理页面 -->
|
||||
<div v-if="currentPage === 'services'">
|
||||
<h2 class="text-2xl font-bold mb-6">服务管理</h2>
|
||||
<div class="card p-6">
|
||||
<el-button type="primary" @click="openCreateService">
|
||||
<el-icon><Plus /></el-icon>
|
||||
创建服务
|
||||
</el-button>
|
||||
<el-table :data="services" style="width: 100%; margin-top: 20px;">
|
||||
<el-table-column prop="id" label="ID" width="200"></el-table-column>
|
||||
<el-table-column prop="name" label="名称"></el-table-column>
|
||||
<el-table-column prop="type" label="类型" width="100"></el-table-column>
|
||||
<el-table-column prop="address" label="地址"></el-table-column>
|
||||
<el-table-column prop="port" label="端口" width="80"></el-table-column>
|
||||
<el-table-column label="操作" width="260">
|
||||
<template #default="{ row }">
|
||||
<el-button size="small" @click="editService(row)">编辑</el-button>
|
||||
<el-button size="small" @click="testService(row)">测试</el-button>
|
||||
<el-button size="small" type="danger" @click="deleteService(row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div v-if="services.length === 0" class="text-center text-gray-400 py-8">
|
||||
暂无服务
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 系统设置页面 -->
|
||||
<div v-if="currentPage === 'settings'">
|
||||
<h2 class="text-2xl font-bold mb-6">系统设置</h2>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<div class="card p-6">
|
||||
<h3 class="text-lg font-bold mb-4">基础设置</h3>
|
||||
<el-form label-width="100px">
|
||||
<el-form-item label="监听端口">
|
||||
<el-input-number v-model="settings.server_port" :min="1" :max="65535"></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="日志级别">
|
||||
<el-select v-model="settings.log_level" style="width: 100%">
|
||||
<el-option label="Debug" value="debug"></el-option>
|
||||
<el-option label="Info" value="info"></el-option>
|
||||
<el-option label="Warn" value="warn"></el-option>
|
||||
<el-option label="Error" value="error"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="主题">
|
||||
<el-select v-model="settings.theme" style="width: 100%">
|
||||
<el-option label="浅色" value="light"></el-option>
|
||||
<el-option label="深色" value="dark"></el-option>
|
||||
<el-option label="跟随系统" value="auto"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="语言">
|
||||
<el-select v-model="settings.language" style="width: 100%">
|
||||
<el-option label="简体中文" value="zh-CN"></el-option>
|
||||
<el-option label="English" value="en-US"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="saveSettings">保存设置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div class="card p-6">
|
||||
<h3 class="text-lg font-bold mb-4">安全</h3>
|
||||
<el-form label-width="100px">
|
||||
<el-form-item label="旧密码">
|
||||
<el-input v-model="passwordForm.old_password" type="password" show-password></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="新密码">
|
||||
<el-input v-model="passwordForm.new_password" type="password" show-password></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="确认新密码">
|
||||
<el-input v-model="passwordForm.confirm" type="password" show-password></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="changePassword">修改密码</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="card p-6 mt-6">
|
||||
<h3 class="text-lg font-bold mb-4">运行状态</h3>
|
||||
<p class="mb-2">WireGuard 模式:<el-tag>{{ wgModeDisplay || wgMode || '未知' }}</el-tag></p>
|
||||
<el-button type="warning" @click="restartCore">重启核心服务</el-button>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<!-- 创建设备对话框 -->
|
||||
<el-dialog v-model="showCreateDeviceDialog" title="创建设备" width="500px">
|
||||
<el-form label-width="100px">
|
||||
<el-form-item label="所属组网">
|
||||
<el-select v-model="deviceForm.network_id" placeholder="请选择组网" style="width: 100%">
|
||||
<el-option v-for="n in networks" :key="n.id" :label="n.name" :value="n.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="设备名称">
|
||||
<el-input v-model="deviceForm.name" placeholder="请输入设备名称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="虚拟IP">
|
||||
<el-input v-model="deviceForm.virtual_ip" placeholder="留空则自动分配"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="showCreateDeviceDialog = false">取消</el-button>
|
||||
<el-button type="primary" @click="createDevice">创建</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 设备配置对话框 -->
|
||||
<el-dialog v-model="showDeviceConfigDialog" title="设备 WireGuard 配置" width="600px">
|
||||
<el-input type="textarea" :rows="12" v-model="deviceConfigText" readonly></el-input>
|
||||
<template #footer>
|
||||
<el-button type="primary" @click="() => { navigator.clipboard && navigator.clipboard.writeText(deviceConfigText); ElementPlus.ElMessage.success('已复制到剪贴板') }">复制</el-button>
|
||||
<el-button @click="showDeviceConfigDialog = false">关闭</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 服务对话框 -->
|
||||
<el-dialog v-model="showServiceDialog" :title="serviceDialogTitle" width="500px">
|
||||
<el-form label-width="100px">
|
||||
<el-form-item label="服务名称">
|
||||
<el-input v-model="serviceForm.name" placeholder="请输入服务名称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型">
|
||||
<el-select v-model="serviceForm.type" style="width: 100%">
|
||||
<el-option v-for="t in serviceTypes" :key="t.value" :label="t.label" :value="t.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="地址">
|
||||
<el-input v-model="serviceForm.address" placeholder="例如 stun.example.com"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="端口">
|
||||
<el-input-number v-model="serviceForm.port" :min="0" :max="65535"></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户名">
|
||||
<el-input v-model="serviceForm.auth_username" placeholder="可选"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码">
|
||||
<el-input v-model="serviceForm.auth_password" type="password" show-password placeholder="可选,留空不修改"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="showServiceDialog = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveService">保存</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</el-container>
|
||||
|
||||
Reference in New Issue
Block a user