diff --git a/dns.md b/dns.md new file mode 100644 index 0000000..fedf70b --- /dev/null +++ b/dns.md @@ -0,0 +1,873 @@ +# DNS 管理 API 文档 + +## 概述 + +本文档描述了 DNS 管理系统的 API 接口,包括 DNS 服务器、DNS 区域和 DNS 记录的增删改查操作。 + +## 基础信息 + +- 基础路径: `/dns` +- 请求方法: POST +- 认证: 需要在请求头中携带认证 token + +## 常量定义 + +### DNS 服务器状态 + +| 值 | 说明 | +|----|------| +| 0 | 已停止 | +| 1 | 运行中 | +| 2 | 错误 | + +### DNS 记录类型 + +| 值 | 类型 | 说明 | +|----|------|------| +| 1 | A | IPv4 地址记录 | +| 28 | AAAA | IPv6 地址记录 | +| 5 | CNAME | 别名记录 | +| 15 | MX | 邮件交换记录 | +| 2 | NS | 名称服务器记录 | +| 6 | SOA | 起始授权记录 | +| 16 | TXT | 文本记录 | +| 33 | SRV | 服务位置记录 | + +## DNS 服务器接口 + +### 1. 创建 DNS 服务器 + +**接口路径**: `/dns/server/create` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| name | string | 是 | DNS 服务器名称 | +| port | uint | 否 | 监听端口,默认 53 | +| listen_ip | string | 否 | 监听 IP,默认 0.0.0.0 | +| upstream_dns | string | 否 | 上游 DNS 服务器,多个用逗号分隔 | +| enable_recursion | bool | 否 | 是否启用递归查询 | +| description | string | 否 | 描述 | + +**请求示例**: + +```json +{ + "name": "我的 DNS 服务器", + "port": 53, + "listen_ip": "0.0.0.0", + "upstream_dns": "8.8.8.8,8.8.4.4", + "enable_recursion": true, + "description": "个人 DNS 服务器" +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "创建DNS服务器成功", + "data": { + "ID": 1, + "CreatedAt": "2024-01-01T00:00:00Z", + "UpdatedAt": "2024-01-01T00:00:00Z", + "DeletedAt": null, + "user_id": 1, + "name": "我的 DNS 服务器", + "port": 53, + "listen_ip": "0.0.0.0", + "upstream_dns": "8.8.8.8,8.8.4.4", + "enable_recursion": true, + "status": 0, + "description": "个人 DNS 服务器" + } +} +``` + +### 2. 获取 DNS 服务器 + +**接口路径**: `/dns/server/get` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| server_id | uint | 否 | DNS 服务器 ID,0 表示获取全部 | +| get_type | int | 否 | 获取类型:0 获取自己的,1 获取全部(管理员) | + +**请求示例**: + +```json +{ + "server_id": 1, + "get_type": 0 +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "获取DNS服务器成功", + "data": [ + { + "ID": 1, + "CreatedAt": "2024-01-01T00:00:00Z", + "UpdatedAt": "2024-01-01T00:00:00Z", + "DeletedAt": null, + "user_id": 1, + "name": "我的 DNS 服务器", + "port": 53, + "listen_ip": "0.0.0.0", + "upstream_dns": "8.8.8.8,8.8.4.4", + "enable_recursion": true, + "status": 0, + "description": "个人 DNS 服务器" + } + ] +} +``` + +### 3. 更新 DNS 服务器 + +**接口路径**: `/dns/server/update` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| server_id | uint | 是 | DNS 服务器 ID | +| name | string | 否 | DNS 服务器名称 | +| port | uint | 否 | 监听端口 | +| listen_ip | string | 否 | 监听 IP | +| upstream_dns | string | 否 | 上游 DNS 服务器 | +| enable_recursion | bool | 否 | 是否启用递归查询 | +| status | uint | 否 | 状态:0 停止,1 运行中,2 错误 | +| description | string | 否 | 描述 | + +**请求示例**: + +```json +{ + "server_id": 1, + "name": "更新后的 DNS 服务器", + "status": 1 +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "更新DNS服务器成功", + "data": { + "ID": 1, + "CreatedAt": "2024-01-01T00:00:00Z", + "UpdatedAt": "2024-01-01T01:00:00Z", + "DeletedAt": null, + "user_id": 1, + "name": "更新后的 DNS 服务器", + "port": 53, + "listen_ip": "0.0.0.0", + "upstream_dns": "8.8.8.8,8.8.4.4", + "enable_recursion": true, + "status": 1, + "description": "个人 DNS 服务器" + } +} +``` + +### 4. 删除 DNS 服务器 + +**接口路径**: `/dns/server/delete` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| server_id | uint | 否 | DNS 服务器 ID | +| del_type | uint | 是 | 删除类型:0 删除单条,1 删除所有 | + +**请求示例**: + +```json +{ + "server_id": 1, + "del_type": 0 +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "删除DNS服务器成功" +} +``` + +## DNS 区域接口 + +### 5. 创建 DNS 区域 + +**接口路径**: `/dns/zone/create` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| server_id | uint | 是 | 所属 DNS 服务器 ID | +| domain | string | 是 | 域名,如 example.com | +| soa_mname | string | 否 | SOA 记录的主域名服务器 | +| soa_rname | string | 否 | SOA 记录的管理员邮箱 | +| soa_serial | uint | 否 | SOA 记录的序列号,默认 1 | +| soa_refresh | uint | 否 | SOA 记录的刷新时间(秒),默认 86400 | +| soa_retry | uint | 否 | SOA 记录的重试时间(秒),默认 7200 | +| soa_expire | uint | 否 | SOA 记录的过期时间(秒),默认 3600000 | +| soa_minimum | uint | 否 | SOA 记录的最小 TTL(秒),默认 3600 | +| ttl | uint | 否 | 默认 TTL(秒),默认 3600 | +| description | string | 否 | 描述 | + +**请求示例**: + +```json +{ + "server_id": 1, + "domain": "example.com", + "soa_mname": "ns1.example.com", + "soa_rname": "admin.example.com", + "description": "示例域名" +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "创建DNS区域成功", + "data": { + "ID": 1, + "CreatedAt": "2024-01-01T00:00:00Z", + "UpdatedAt": "2024-01-01T00:00:00Z", + "DeletedAt": null, + "server_id": 1, + "domain": "example.com", + "soa_mname": "ns1.example.com", + "soa_rname": "admin.example.com", + "soa_serial": 1, + "soa_refresh": 86400, + "soa_retry": 7200, + "soa_expire": 3600000, + "soa_minimum": 3600, + "ttl": 3600, + "description": "示例域名" + } +} +``` + +### 6. 获取 DNS 区域 + +**接口路径**: `/dns/zone/get` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| zone_id | uint | 否 | Zone ID,0 表示获取全部 | +| server_id | uint | 否 | DNS 服务器 ID,用于过滤 | +| get_type | int | 否 | 获取类型:0 获取自己的,1 获取全部(管理员) | + +**请求示例**: + +```json +{ + "zone_id": 1, + "get_type": 0 +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "获取DNS区域成功", + "data": [ + { + "ID": 1, + "CreatedAt": "2024-01-01T00:00:00Z", + "UpdatedAt": "2024-01-01T00:00:00Z", + "DeletedAt": null, + "server_id": 1, + "domain": "example.com", + "soa_mname": "ns1.example.com", + "soa_rname": "admin.example.com", + "soa_serial": 1, + "soa_refresh": 86400, + "soa_retry": 7200, + "soa_expire": 3600000, + "soa_minimum": 3600, + "ttl": 3600, + "description": "示例域名" + } + ] +} +``` + +### 7. 更新 DNS 区域 + +**接口路径**: `/dns/zone/update` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| zone_id | uint | 是 | Zone ID | +| domain | string | 否 | 域名 | +| soa_mname | string | 否 | SOA 记录的主域名服务器 | +| soa_rname | string | 否 | SOA 记录的管理员邮箱 | +| soa_serial | uint | 否 | SOA 记录的序列号 | +| soa_refresh | uint | 否 | SOA 记录的刷新时间(秒) | +| soa_retry | uint | 否 | SOA 记录的重试时间(秒) | +| soa_expire | uint | 否 | SOA 记录的过期时间(秒) | +| soa_minimum | uint | 否 | SOA 记录的最小 TTL(秒) | +| ttl | uint | 否 | 默认 TTL(秒) | +| description | string | 否 | 描述 | + +**请求示例**: + +```json +{ + "zone_id": 1, + "description": "更新后的描述" +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "更新DNS区域成功", + "data": { + "ID": 1, + "CreatedAt": "2024-01-01T00:00:00Z", + "UpdatedAt": "2024-01-01T01:00:00Z", + "DeletedAt": null, + "server_id": 1, + "domain": "example.com", + "soa_mname": "ns1.example.com", + "soa_rname": "admin.example.com", + "soa_serial": 1, + "soa_refresh": 86400, + "soa_retry": 7200, + "soa_expire": 3600000, + "soa_minimum": 3600, + "ttl": 3600, + "description": "更新后的描述" + } +} +``` + +### 8. 删除 DNS 区域 + +**接口路径**: `/dns/zone/delete` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| zone_id | uint | 否 | Zone ID | +| del_type | uint | 是 | 删除类型:0 删除单条,1 删除所有 | + +**请求示例**: + +```json +{ + "zone_id": 1, + "del_type": 0 +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "删除DNS区域成功" +} +``` + +## DNS 记录接口 + +### 9. 创建 DNS 记录 + +**接口路径**: `/dns/record/create` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| zone_id | uint | 是 | 所属 Zone ID | +| name | string | 是 | 记录名称,如 www 或 @ | +| type | uint | 是 | 记录类型:1=A, 28=AAAA, 5=CNAME, 15=MX 等 | +| value | string | 否 | 记录值 | +| ttl | uint | 否 | TTL(秒),如果为 0 则使用 Zone 的默认 TTL | +| priority | uint | 否 | 优先级(用于 MX、SRV 等记录) | +| weight | uint | 否 | 权重(用于 SRV 记录) | +| port | uint | 否 | 端口(用于 SRV 记录) | +| target | string | 否 | 目标(用于 SRV 记录) | + +**请求示例 - A 记录**: + +```json +{ + "zone_id": 1, + "name": "www", + "type": 1, + "value": "192.168.1.1", + "ttl": 3600 +} +``` + +**请求示例 - CNAME 记录**: + +```json +{ + "zone_id": 1, + "name": "mail", + "type": 5, + "value": "mailserver.example.com", + "ttl": 3600 +} +``` + +**请求示例 - MX 记录**: + +```json +{ + "zone_id": 1, + "name": "@", + "type": 15, + "value": "mx1.example.com", + "ttl": 3600, + "priority": 10 +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "创建DNS记录成功", + "data": { + "ID": 1, + "CreatedAt": "2024-01-01T00:00:00Z", + "UpdatedAt": "2024-01-01T00:00:00Z", + "DeletedAt": null, + "zone_id": 1, + "name": "www", + "type": 1, + "value": "192.168.1.1", + "ttl": 3600, + "priority": 0, + "weight": 0, + "port": 0, + "target": "" + } +} +``` + +### 10. 获取 DNS 记录 + +**接口路径**: `/dns/record/get` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| record_id | uint | 否 | 记录 ID,0 表示获取全部 | +| zone_id | uint | 否 | Zone ID,用于过滤 | +| get_type | int | 否 | 获取类型:0 获取自己的,1 获取全部(管理员) | + +**请求示例**: + +```json +{ + "record_id": 1, + "get_type": 0 +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "获取DNS记录成功", + "data": [ + { + "ID": 1, + "CreatedAt": "2024-01-01T00:00:00Z", + "UpdatedAt": "2024-01-01T00:00:00Z", + "DeletedAt": null, + "zone_id": 1, + "name": "www", + "type": 1, + "value": "192.168.1.1", + "ttl": 3600, + "priority": 0, + "weight": 0, + "port": 0, + "target": "" + } + ] +} +``` + +### 11. 更新 DNS 记录 + +**接口路径**: `/dns/record/update` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| record_id | uint | 是 | 记录 ID | +| name | string | 否 | 记录名称 | +| type | uint | 否 | 记录类型 | +| value | string | 否 | 记录值 | +| ttl | uint | 否 | TTL(秒) | +| priority | uint | 否 | 优先级 | +| weight | uint | 否 | 权重 | +| port | uint | 否 | 端口 | +| target | string | 否 | 目标 | + +**请求示例**: + +```json +{ + "record_id": 1, + "value": "192.168.1.2" +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "更新DNS记录成功", + "data": { + "ID": 1, + "CreatedAt": "2024-01-01T00:00:00Z", + "UpdatedAt": "2024-01-01T01:00:00Z", + "DeletedAt": null, + "zone_id": 1, + "name": "www", + "type": 1, + "value": "192.168.1.2", + "ttl": 3600, + "priority": 0, + "weight": 0, + "port": 0, + "target": "" + } +} +``` + +### 12. 删除 DNS 记录 + +**接口路径**: `/dns/record/delete` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| record_id | uint | 否 | 记录 ID | +| del_type | uint | 是 | 删除类型:0 删除单条,1 删除所有 | + +**请求示例**: + +```json +{ + "record_id": 1, + "del_type": 0 +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "删除DNS记录成功" +} +``` + +## DNS 服务运行管理接口 + +### 13. 启动 DNS 服务器 + +**接口路径**: `/dns/server/start` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| server_id | uint | 是 | DNS 服务器 ID | + +**请求示例**: + +```json +{ + "server_id": 1 +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "启动DNS服务器成功", + "data": { + "server_id": 1, + "config": { + "ID": 1, + "CreatedAt": "2024-01-01T00:00:00Z", + "UpdatedAt": "2024-01-01T00:00:00Z", + "DeletedAt": null, + "user_id": 1, + "name": "我的 DNS 服务器", + "port": 53, + "listen_ip": "0.0.0.0", + "upstream_dns": "8.8.8.8,8.8.4.4", + "enable_recursion": true, + "status": 1, + "description": "个人 DNS 服务器" + }, + "running": true + } +} +``` + +### 14. 停止 DNS 服务器 + +**接口路径**: `/dns/server/stop` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| server_id | uint | 是 | DNS 服务器 ID | + +**请求示例**: + +```json +{ + "server_id": 1 +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "停止DNS服务器成功" +} +``` + +### 15. 重启 DNS 服务器 + +**接口路径**: `/dns/server/restart` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| server_id | uint | 是 | DNS 服务器 ID | + +**请求示例**: + +```json +{ + "server_id": 1 +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "重启DNS服务器成功", + "data": { + "server_id": 1, + "config": { + "ID": 1, + "CreatedAt": "2024-01-01T00:00:00Z", + "UpdatedAt": "2024-01-01T00:00:00Z", + "DeletedAt": null, + "user_id": 1, + "name": "我的 DNS 服务器", + "port": 53, + "listen_ip": "0.0.0.0", + "upstream_dns": "8.8.8.8,8.8.4.4", + "enable_recursion": true, + "status": 1, + "description": "个人 DNS 服务器" + }, + "running": true + } +} +``` + +### 16. 获取 DNS 服务器运行状态 + +**接口路径**: `/dns/server/status` + +**请求参数**: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| server_id | uint | 是 | DNS 服务器 ID | + +**请求示例**: + +```json +{ + "server_id": 1 +} +``` + +**响应示例**: + +```json +{ + "code": 0, + "message": "获取DNS服务器状态成功", + "data": { + "server_id": 1, + "config": { + "ID": 1, + "CreatedAt": "2024-01-01T00:00:00Z", + "UpdatedAt": "2024-01-01T00:00:00Z", + "DeletedAt": null, + "user_id": 1, + "name": "我的 DNS 服务器", + "port": 53, + "listen_ip": "0.0.0.0", + "upstream_dns": "8.8.8.8,8.8.4.4", + "enable_recursion": true, + "status": 1, + "description": "个人 DNS 服务器" + }, + "running": true + } +} +``` + +## 数据模型 + +### DNSServer + +| 字段 | 类型 | 说明 | +|------|------|------| +| ID | uint | 主键 ID | +| CreatedAt | time.Time | 创建时间 | +| UpdatedAt | time.Time | 更新时间 | +| DeletedAt | *time.Time | 删除时间 | +| user_id | uint | 用户 ID | +| name | string | DNS 服务器名称 | +| port | uint | 监听端口 | +| listen_ip | string | 监听 IP | +| upstream_dns | string | 上游 DNS 服务器 | +| enable_recursion | bool | 是否启用递归查询 | +| status | uint | 状态:0 停止,1 运行中,2 错误 | +| description | string | 描述 | + +### DNSZone + +| 字段 | 类型 | 说明 | +|------|------|------| +| ID | uint | 主键 ID | +| CreatedAt | time.Time | 创建时间 | +| UpdatedAt | time.Time | 更新时间 | +| DeletedAt | *time.Time | 删除时间 | +| server_id | uint | 所属 DNS 服务器 ID | +| domain | string | 域名 | +| soa_mname | string | SOA 记录的主域名服务器 | +| soa_rname | string | SOA 记录的管理员邮箱 | +| soa_serial | uint | SOA 记录的序列号 | +| soa_refresh | uint | SOA 记录的刷新时间(秒) | +| soa_retry | uint | SOA 记录的重试时间(秒) | +| soa_expire | uint | SOA 记录的过期时间(秒) | +| soa_minimum | uint | SOA 记录的最小 TTL(秒) | +| ttl | uint | 默认 TTL(秒) | +| description | string | 描述 | + +### DNSRecord + +| 字段 | 类型 | 说明 | +|------|------|------| +| ID | uint | 主键 ID | +| CreatedAt | time.Time | 创建时间 | +| UpdatedAt | time.Time | 更新时间 | +| DeletedAt | *time.Time | 删除时间 | +| zone_id | uint | 所属 Zone ID | +| name | string | 记录名称 | +| type | uint | 记录类型 | +| value | string | 记录值 | +| ttl | uint | TTL(秒) | +| priority | uint | 优先级 | +| weight | uint | 权重 | +| port | uint | 端口 | +| target | string | 目标 | + +### DNSServiceInstance + +| 字段 | 类型 | 说明 | +|------|------|------| +| server_id | uint | DNS 服务器 ID | +| config | DNSServer | DNS 服务器配置 | +| running | bool | 是否正在运行 | + +## 错误码说明 + +| 错误码 | 说明 | +|--------|------| +| 0 | 成功 | +| 1 | 参数错误 | +| 2 | 系统错误 | + +## 功能特性 + +### 基础功能 +- 支持多 DNS 服务器实例管理 +- 每个 DNS 服务器可以管理多个域名区域(Zone) +- 每个域名区域可以添加多条 DNS 记录 +- 支持常见 DNS 记录类型:A、AAAA、CNAME、MX、NS、TXT、SRV、SOA +- 完整的 SOA 记录配置 + +### 运行时管理 +- 支持 DNS 服务的启动、停止、重启操作 +- 同时支持 UDP 和 TCP 协议 +- 配置修改后自动重启运行中的服务 +- 实时获取服务运行状态 +- 支持递归查询,可配置上游 DNS 服务器 + +### 权限说明 +- 普通用户只能操作自己创建的 DNS 服务器、区域和记录 +- 管理员可以操作所有 DNS 服务器、区域和记录 +- 删除操作会级联删除相关的子资源(删除服务器会删除其下的区域,删除区域会删除其下的记录) + +### 自动重启特性 +当 DNS 服务器的配置(端口、监听IP、上游DNS等)被修改时,如果服务正在运行,系统会自动重启服务以应用新的配置。 diff --git a/src/api/dns.js b/src/api/dns.js new file mode 100644 index 0000000..bb14551 --- /dev/null +++ b/src/api/dns.js @@ -0,0 +1,79 @@ +import request from '@/utils/request.js' + +// 转换数据为 URLSearchParams 格式 +const toFormData = (data) => { + const params = new URLSearchParams(); + for (let key in data) { + if (data[key] !== null && data[key] !== undefined && data[key] !== '') { + params.append(key, data[key]); + } + } + return params; +} + +// DNS 服务器接口 +export const createDNSServer = (data) => { + return request.post('/dns/server/create', toFormData(data)) +} + +export const getDNSServerList = (data) => { + return request.post('/dns/server/get', toFormData(data)) +} + +export const updateDNSServer = (data) => { + return request.post('/dns/server/update', toFormData(data)) +} + +export const deleteDNSServer = (data) => { + return request.post('/dns/server/delete', toFormData(data)) +} + +export const startDNSServer = (data) => { + return request.post('/dns/server/start', toFormData(data)) +} + +export const stopDNSServer = (data) => { + return request.post('/dns/server/stop', toFormData(data)) +} + +export const restartDNSServer = (data) => { + return request.post('/dns/server/restart', toFormData(data)) +} + +export const getDNSServerStatus = (data) => { + return request.post('/dns/server/status', toFormData(data)) +} + +// DNS 区域接口 +export const createDNSZone = (data) => { + return request.post('/dns/zone/create', toFormData(data)) +} + +export const getDNSZoneList = (data) => { + return request.post('/dns/zone/get', toFormData(data)) +} + +export const updateDNSZone = (data) => { + return request.post('/dns/zone/update', toFormData(data)) +} + +export const deleteDNSZone = (data) => { + return request.post('/dns/zone/delete', toFormData(data)) +} + +// DNS 记录接口 +export const createDNSRecord = (data) => { + return request.post('/dns/record/create', toFormData(data)) +} + +export const getDNSRecordList = (data) => { + return request.post('/dns/record/get', toFormData(data)) +} + +export const updateDNSRecord = (data) => { + return request.post('/dns/record/update', toFormData(data)) +} + +export const deleteDNSRecord = (data) => { + return request.post('/dns/record/delete', toFormData(data)) +} diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue index 6905bc8..952e707 100644 --- a/src/layout/Layout.vue +++ b/src/layout/Layout.vue @@ -69,6 +69,9 @@ import { UserFilled, OfficeBuilding, Connection, + Setting as ServerIcon, + Link as ZoneIcon, + DocumentCopy as RecordIcon, } from "@element-plus/icons-vue"; const router = useRouter(); @@ -139,6 +142,24 @@ const menuList = ref([ icon: Connection, show: true, }, + { + path: "/dnsServer", + title: "DNS服务器配置", + icon: ServerIcon, + show: true, + }, + { + path: "/dnsZone", + title: "DNS区域管理", + icon: ZoneIcon, + show: true, + }, + { + path: "/dnsRecord", + title: "DNS记录管理", + icon: RecordIcon, + show: true, + }, ]); const toggleCollapse = () => { diff --git a/src/router/index.js b/src/router/index.js index 9db9eff..d540a9e 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -14,6 +14,9 @@ import Chat from "@/views/Chat.vue" import Group from "@/views/Group.vue" import File from "@/views/FileList.vue" import Shell from "@/views/ShellList.vue" +import DNSServer from "@/views/DNSServer.vue" +import DNSZone from "@/views/DNSZone.vue" +import DNSRecord from "@/views/DNSRecord.vue" import callback from "@/views/callback.vue"; import projectSelect from "@/views/project-select.vue"; @@ -94,6 +97,21 @@ const routes = [ path: 'projectSelect', name: 'projectSelect', component: projectSelect + }, + { + path: 'dnsServer', + name: 'DNSServer', + component: DNSServer + }, + { + path: 'dnsZone', + name: 'DNSZone', + component: DNSZone + }, + { + path: 'dnsRecord', + name: 'DNSRecord', + component: DNSRecord } ] }, diff --git a/src/views/DNSRecord.vue b/src/views/DNSRecord.vue new file mode 100644 index 0000000..f6f6a47 --- /dev/null +++ b/src/views/DNSRecord.vue @@ -0,0 +1,472 @@ + + + + + diff --git a/src/views/DNSServer.vue b/src/views/DNSServer.vue new file mode 100644 index 0000000..989f732 --- /dev/null +++ b/src/views/DNSServer.vue @@ -0,0 +1,290 @@ + + + + + diff --git a/src/views/DNSZone.vue b/src/views/DNSZone.vue new file mode 100644 index 0000000..b4b0954 --- /dev/null +++ b/src/views/DNSZone.vue @@ -0,0 +1,251 @@ + + + + + diff --git a/src/views/Menu.vue b/src/views/Menu.vue index 09c3892..b3dff7a 100644 --- a/src/views/Menu.vue +++ b/src/views/Menu.vue @@ -58,6 +58,24 @@ @click.prevent="handleMenuSelect('/projectSelect')" >项目选择 + DNS服务器配置 + DNS区域管理 + DNS记录管理