From c64a385ffcd23a5588ee3f6ad6d451a54ed86e2a Mon Sep 17 00:00:00 2001 From: luo-bo <603509782@qq.com> Date: Tue, 24 Mar 2026 03:45:22 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(cloudflare):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=BF=AB=E9=80=9F=E6=B7=BB=E5=8A=A0TXT=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在主机名验证对话框中增加快速添加TXT记录按钮 - 实现convertFullHostnameToRecordName函数用于转换完整主机名为记录名 - 添加quickAddTxtRecord函数处理TXT记录的快速添加逻辑 - 在前端页面中集成快速添加功能,支持一键添加证书验证所需的TXT记录 - 移除SSL配置中的bundle_method和certificate_authority字段 ``` --- .codex-tmp/hostnames.page.check.js | 78 ++++++++++++++++++++++++++++++ app/controller/Cloudflare.php | 6 --- app/view/cloudflare/hostnames.html | 78 ++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+), 6 deletions(-) diff --git a/.codex-tmp/hostnames.page.check.js b/.codex-tmp/hostnames.page.check.js index e6ff357..5499b50 100644 --- a/.codex-tmp/hostnames.page.check.js +++ b/.codex-tmp/hostnames.page.check.js @@ -1,4 +1,5 @@ var currentVerificationHostnameId = ''; +var currentDomainName = '6byj.cn'; $(document).ready(function(){ $("#form-store").bootstrapValidator(); @@ -191,6 +192,7 @@ function renderVerificationDialog(row){ renderCopyInput('记录类型', ownership.type || 'txt', false) + renderCopyInput('TXT 名称', ownership.name || '', true) + renderCopyTextarea('TXT 值', ownership.value || '', true, 3) + + renderQuickAddTxtButton(ownership.name || '', ownership.value || '', '快速添加所有权 TXT') ); } @@ -213,6 +215,7 @@ function renderVerificationDialog(row){ recordsHtml += '
'; recordsHtml += renderCopyInput('TXT 名称', item.txt_name || '', true); recordsHtml += renderCopyTextarea('TXT 值', item.txt_value || '', true, 3); + recordsHtml += renderQuickAddTxtButton(item.txt_name || '', item.txt_value || '', '快速添加 TXT'); recordsHtml += renderCopyInput('CNAME 名称', item.cname_name || '', true); recordsHtml += renderCopyTextarea('CNAME 目标', item.cname_target || '', true, 2); recordsHtml += renderCopyTextarea('HTTP URL', item.http_url || '', true, 2); @@ -274,6 +277,15 @@ function renderCopyTextarea(label, value, copyable, rows){ return html; } +function renderQuickAddTxtButton(name, value, label){ + var txtName = String(name || '').trim(); + var txtValue = String(value || '').trim(); + if(!txtName || !txtValue){ + return ''; + } + return '
'; +} + function formatStatusText(value){ var text = value || '-'; if(text === '-'){ @@ -316,6 +328,72 @@ function fallbackCopyText(text){ $temp.remove(); } +function quickAddTxtRecord(btn){ + var fullName = decodeURIComponent($(btn).attr('data-name') || ''); + var value = decodeURIComponent($(btn).attr('data-value') || ''); + var rr = convertFullHostnameToRecordName(fullName); + if(rr === null){ + layer.alert('TXT 记录名称与当前域名不匹配,无法自动添加,请手动到解析页添加', {icon: 2}); + return; + } + + layer.confirm('确定要快速添加 TXT 记录吗?
' + htmlEscape(fullName) + '', {title: '提示', icon: 0}, function(){ + var ii = layer.load(2); + $.ajax({ + type: 'POST', + url: '/record/add/1', + data: { + name: rr, + type: 'TXT', + value: value, + line: '0', + ttl: 600, + mx: 1, + weight: 0, + remark: 'Cloudflare证书校验' + }, + dataType: 'json', + success: function(res){ + layer.close(ii); + if(res.code === 0){ + layer.closeAll(); + $("#modal-verification").modal('show'); + layer.msg('TXT 记录添加成功', {icon: 1, time: 1200}); + }else{ + layer.alert(res.msg, {icon: 2}); + } + }, + error: function(){ + layer.close(ii); + layer.alert('服务器错误', {icon: 2}); + } + }); + }); +} + +function convertFullHostnameToRecordName(fullName){ + var name = String(fullName || '').trim().replace(/\.$/, ''); + var domain = String(currentDomainName || '').trim().replace(/\.$/, ''); + if(!name || !domain){ + return null; + } + var lowerName = name.toLowerCase(); + var lowerDomain = domain.toLowerCase(); + if(lowerName === lowerDomain){ + return '@'; + } + if(lowerName.endsWith('.' + lowerDomain)){ + return name.slice(0, name.length - domain.length - 1); + } + if(name === '@'){ + return '@'; + } + if(name.indexOf('.') === -1){ + return name; + } + return null; +} + function deleteHostname(id, hostname){ layer.confirm('确定要删除自定义主机名 ' + hostname + ' 吗?', {title: '提示', icon: 0}, function(){ var ii = layer.load(2); diff --git a/app/controller/Cloudflare.php b/app/controller/Cloudflare.php index bb2163c..9d7ae58 100644 --- a/app/controller/Cloudflare.php +++ b/app/controller/Cloudflare.php @@ -641,12 +641,6 @@ class Cloudflare extends BaseController if ($payload['type'] === '') { $payload['type'] = 'dv'; } - if (!empty($ssl['bundle_method'])) { - $payload['bundle_method'] = trim((string)$ssl['bundle_method']); - } - if (!empty($ssl['certificate_authority'])) { - $payload['certificate_authority'] = trim((string)$ssl['certificate_authority']); - } return $payload; } diff --git a/app/view/cloudflare/hostnames.html b/app/view/cloudflare/hostnames.html index 0ccbeeb..17016c7 100644 --- a/app/view/cloudflare/hostnames.html +++ b/app/view/cloudflare/hostnames.html @@ -100,6 +100,7 @@