perf(technitium): 添加Technitium DNS Server插件支持

- 新增Technitium DNS Server插件,包含DNS提供商和授权配置
- 实现DNS记录创建、删除和域名列表获取功能
- 添加默认DNS传播等待时间配置
- 优化用户取消操作时的错误处理
- 为图标选择组件添加过滤功能
- 更新DNS提供商开发文档
This commit is contained in:
xiaojunnuo
2026-04-17 19:22:10 +08:00
parent 23b4658672
commit edeb817c39
14 changed files with 7863 additions and 13 deletions
+14
View File
@@ -145,6 +145,20 @@ async doRequest(req: { action: string, data?: any }) {
utils: typeof utils;
accessService: IAccessService;
}
// this.ctx.http 只有request方法
// 方法参数
export type HttpRequestConfig<D = any> = {
skipSslVerify?: boolean;
skipCheckRes?: boolean;
logParams?: boolean;
logRes?: boolean;
logData?: boolean;
httpProxy?: string;
returnOriginRes?: boolean;
} & AxiosRequestConfig<D>;
*/
const res = await this.ctx.http.request({
url: "https://api.demo.cn/api/",
+43 -4
View File
@@ -105,6 +105,28 @@ async removeRecord(options: RemoveRecordOptions<DemoRecord>): Promise<void> {
}
```
### 6. 实现 getDomainListPage 方法
```typescript
/**
* 实现获取域名列表
*/
async getDomainListPage(req: PageSearch): Promise<PageRes<DomainRecord>> {
const pager = new Pager(req);
const res = await this.http.request({
// 请求接口获取域名列表
})
const list = res.Domains?.map(item => ({
id: item.Id,
domain: item.DomainName,
})) || []
return {
list,
total: res.Total,
}
}
```
### 6. 实例化插件
```typescript
@@ -204,11 +226,28 @@ export class DemoDnsProvider extends AbstractDnsProvider<DemoRecord> {
this.logger.info('删除域名解析成功:', fullRecord, value);
}
/**
* 实现获取域名列表
*/
async getDomainListPage(req: PageSearch): Promise<PageRes<DomainRecord>> {
const pager = new Pager(req);
const res = await this.http.request({
// 请求接口获取域名列表
})
const list = res.Domains?.map(item => ({
id: item.Id,
domain: item.DomainName,
})) || []
return {
list,
total: res.Total,
}
}
}
// 实例化这个 provider,将其自动注册到系统中
if (isDev()) {
// 你的实现 要去掉这个 if,不然生产环境将不会显示
new DemoDnsProvider();
}
new DemoDnsProvider();
```