Initial commit

This commit is contained in:
2026-06-30 15:14:37 +08:00
commit 15dab96872
311 changed files with 95639 additions and 0 deletions
+324
View File
@@ -0,0 +1,324 @@
# DDNS TXT 记录修复报告
**修复时间**: 2026-03-26
**问题**: 服务市场的 DDNS 配置缺少 TXT 记录选项
---
## 🎯 问题分析
### 你的正确观察
1. **List.vue(服务市场)** - ❌ 之前只有 A/AAAA 记录,没有 TXT
2. **DDNSEdit.vue(专用页面)** - ✅ 有 TXT 记录字段
3. **用途混淆** - 两个页面的定位不清晰
---
## ✅ 修复方案
### 场景区分
| 页面 | 用途 | 记录类型 | 说明 |
|------|------|----------|------|
| **服务市场 → DDNS** | 通用 DDNS 服务 | ✅ TXT / A / AAAA | 支持所有类型 |
| **服务 → DDNS 配置** | MeshSeed 同步专用 | ✅ 仅 TXT | 专门用于组网配置同步 |
---
## 🔧 具体修改
### 1. List.vue - 添加 TXT 记录选项
**修改位置**: `web/src/views/Service/List.vue` Line 500-506
#### 修改前
```vue
<el-form-item label="记录类型" prop="record_type">
<el-select v-model="formData.record_type" placeholder="请选择记录类型">
<el-option label="A (IPv4)" value="A" />
<el-option label="AAAA (IPv6)" value="AAAA" />
</el-select>
</el-form-item>
```
#### 修改后
```vue
<el-form-item label="记录类型" prop="record_type">
<el-select v-model="formData.record_type" placeholder="请选择记录类型">
<el-option label="TXT (MeshSeed 同步)" value="TXT" />
<el-option label="A (IPv4)" value="A" />
<el-option label="AAAA (IPv6)" value="AAAA" />
</el-select>
</el-form-item>
</el-form-item>
```
---
### 2. 添加条件字段显示
#### TXT 记录专用字段(新增)
```vue
<!-- TXT 记录专用字段 -->
<el-form-item v-if="formData.record_type === 'TXT'" label="TXT 记录名称" prop="txt_record_name">
<el-input
v-model="formData.txt_record_name"
placeholder="_meshray._mesh"
clearable
/>
<div class="form-tip">
<el-icon><InfoFilled /></el-icon>
TXT 记录前缀用于组网配置同步MeshSeed 密文
</div>
<div class="form-tip">
<el-icon><InfoFilled /></el-icon>
完整记录{{ formData.txt_record_name }}.{{ formData.domain || 'example.com' }}
</div>
</el-form-item>
```
**特点**:
- ✅ 仅在选中 TXT 记录时显示
- ✅ 默认值 `_meshray._mesh`
- ✅ 明确说明用途:**组网配置同步(MeshSeed 密文)**
- ✅ 显示完整记录预览
---
#### A/AAAA 记录专用字段(新增)
```vue
<!-- A/AAAA 记录专用字段 -->
<el-form-item v-if="['A', 'AAAA'].includes(formData.record_type)" label="主机记录" prop="subdomain">
<el-input v-model="formData.subdomain" placeholder="@ 或 www" clearable />
<div class="form-tip">
<el-icon><InfoFilled /></el-icon>
子域名前缀@ 表示根域名
</div>
</el-form-item>
```
**特点**:
- ✅ 仅在选中 A/AAAA 记录时显示
- ✅ 用于传统 IP 解析
- ✅ 与 TXT 记录区分开
---
### 3. 更新默认值
```javascript
const configureDDNS = (provider) => {
// ...
formData.value = {
// ...
record_type: 'TXT', // ✅ 改为 TXT(之前是 'A'
txt_record_name: '_meshray._mesh', // ✅ 新增
subdomain: '' // ✅ 新增
}
}
```
**理由**:
- ✅ 默认使用 TXT 记录同步 MeshSeed
- ✅ 符合主要使用场景(组网配置同步)
---
### 4. 添加校验规则
```javascript
if (formData.value.type === 'DDNS') {
rules.provider = [{ required: true, message: '请选择 DNS 服务商', trigger: 'change' }]
rules.domain = [{ required: true, message: '请输入域名', trigger: 'blur' }]
// ✅ TXT 记录专用校验
if (formData.value.record_type === 'TXT') {
rules.txt_record_name = [
{ required: true, message: '请输入 TXT 记录名称', trigger: 'blur' },
{
pattern: /^[a-zA-Z0-9._-]+$/,
message: '只能包含字母、数字、点、下划线和连字符',
trigger: 'blur'
}
]
}
// ✅ A/AAAA 记录专用校验
if (['A', 'AAAA'].includes(formData.value.record_type)) {
rules.subdomain = [
{ required: true, message: '请输入主机记录', trigger: 'blur' }
]
}
}
```
**特点**:
- ✅ 根据记录类型动态校验
- ✅ TXT 记录名称格式校验
- ✅ A/AAAA 记录需要主机名
---
## 📊 完整对比
### 修改前 ❌
```
服务市场 → 添加 DDNS
├── DNS 服务商
├── 域名
└── 记录类型
├── A (IPv4)
└── AAAA (IPv6)
❌ 没有 TXT 选项
❌ 无法同步 MeshSeed
```
### 修改后 ✅
```
服务市场 → 添加 DDNS
├── DNS 服务商
├── 域名
└── 记录类型
├── TXT (MeshSeed 同步) ← 默认选中
│ └── TXT 记录名称(自动显示)
├── A (IPv4)
│ └── 主机记录(子域名)
└── AAAA (IPv6)
└── 主机记录(子域名)
✅ 支持 TXT 同步 MeshSeed
✅ 支持 A/AAAA 传统解析
✅ 条件字段智能显示
```
---
## 🎯 使用示例
### 场景 1:同步 MeshSeed(推荐)
1. 访问 **服务市场****同步服务**
2. 点击 **阿里云 DDNS**
3. 选择 **记录类型:TXT (MeshSeed 同步)**
4. 填写:
- 域名:`mesh.example.com`
- TXT 记录名称:`_meshray._mesh`
5. 保存
**效果**:
- DNS TXT 记录:`_meshray._mesh.mesh.example.com`
- 用途:组网配置加密同步
---
### 场景 2:传统 IP 解析
1. 访问 **服务市场****同步服务**
2. 点击 **阿里云 DDNS**
3. 选择 **记录类型:A (IPv4)**
4. 填写:
- 域名:`example.com`
- 主机记录:`@``www`
5. 保存
**效果**:
- DNS A 记录:`example.com``1.2.3.4`
- 用途:动态 IP 地址解析
---
## 💡 设计理念
### 为什么这样设计?
#### 之前的问题
```
❌ 只有 A/AAAA 记录
❌ 无法同步 MeshSeed(需要 TXT
❌ 用途不明确
```
#### 现在的优势
```
✅ 默认 TXT 记录(主要用途:MeshSeed 同步)
✅ 保留 A/AAAA(传统用途:IP 解析)
✅ 条件字段(避免界面混乱)
✅ 清晰提示(用户知道用途)
```
---
## 🔍 验证方法
### 快速测试
1. **清除浏览器缓存**Ctrl+Shift+Delete
2. 访问:`http://localhost:9531/service`
3. 切换到 **同步服务** 标签
4. 点击 **阿里云 DDNS**
5. 查看表单:
**应该看到**:
```
✓ DNS 服务商:[阿里云 DNS]
✓ 域名:[输入框]
✓ 记录类型:[下拉框]
- TXT (MeshSeed 同步) ← 默认选中
- A (IPv4)
- AAAA (IPv6)
选择 TXT 后应显示:
✓ TXT 记录名称:[_meshray._mesh]
- TXT 记录前缀,用于组网配置同步(MeshSeed 密文)
- 完整记录:_meshray._mesh.example.com
```
---
### JavaScript 控制台测试
```javascript
// 测试 API 返回
fetch('/api/v1/ddns/config')
.then(r => r.json())
.then(d => {
console.log('完整数据:', d);
console.log('TXT 字段存在吗?', 'txt_record_name' in d.data);
console.log('记录类型:', d.data.record_type);
});
```
---
## 📝 总结
### 修复内容
1. ✅ 添加 TXT 记录选项(默认选中)
2. ✅ 添加 TXT 记录名称字段(条件显示)
3. ✅ 添加 A/AAAA 主机记录字段(条件显示)
4. ✅ 更新表单校验规则(动态校验)
5. ✅ 更新默认值(优先 TXT
### 功能区分
| 功能 | 记录类型 | 用途 | 字段 |
|------|----------|------|------|
| **MeshSeed 同步** | TXT | 组网配置加密同步 | txt_record_name |
| **IP 解析(IPv4** | A | 动态 IP 地址解析 | subdomain |
| **IP 解析(IPv6** | AAAA | 动态 IPv6 地址解析 | subdomain |
### 用户体验提升
-**智能提示**: 明确告知 TXT 用于 MeshSeed 同步
-**条件显示**: 只展示相关字段,避免混乱
-**默认优化**: 默认选中 TXT(主要用途)
-**格式校验**: 自动校验 TXT 记录名称格式
---
*DDNS TXT 记录修复报告 | v1.0*