前端页面

This commit is contained in:
robin
2026-02-24 19:10:27 +08:00
parent 60dc87e0f2
commit 2eb32b9f1f
59 changed files with 1537 additions and 890 deletions

View File

@@ -1,8 +1,4 @@
<second-menu>
<menu-item :href="'/httpdns/clusters/cluster?clusterId=' + cluster.id">{{cluster.name}}</menu-item>
<second-menu>
<a class="item" :href="'/httpdns/clusters/cluster?clusterId=' + cluster.id">{{cluster.name}}</a>
<span class="item disabled" style="padding-left: 0; padding-right: 0">&raquo;</span>
<menu-item :href="'/httpdns/clusters/cluster?clusterId=' + cluster.id" code="index">节点列表</menu-item>
<menu-item :href="'/httpdns/clusters/createNode?clusterId=' + cluster.id" code="createNode">创建节点</menu-item>
<menu-item :href="'/httpdns/clusters/cluster/settings?clusterId=' + cluster.id" code="settings">集群设置</menu-item>
<menu-item :href="'/httpdns/clusters/delete?clusterId=' + cluster.id" code="delete">删除集群</menu-item>
</second-menu>
</second-menu>

View File

@@ -1,10 +1,11 @@
{$layout}
{$template "cluster_menu"}
<div class="ui margin"></div>
<div class="right-menu">
<a :href="'/httpdns/clusters/createNode?clusterId=' + clusterId" class="item">[创建节点]</a>
</div>
<second-menu>
<a class="item" :href="'/httpdns/clusters/cluster?clusterId=' + cluster.id">{{cluster.name}}</a>
<span class="item disabled" style="padding-left: 0; padding-right: 0">&raquo;</span>
<div class="item"><strong>节点列表</strong></div>
<a class="item" :href="'/httpdns/clusters/createNode?clusterId=' + clusterId">创建节点</a>
</second-menu>
<form class="ui form" action="/httpdns/clusters/cluster">
<input type="hidden" name="clusterId" :value="clusterId" />
@@ -43,6 +44,9 @@
<tr>
<th>节点名称</th>
<th>IP地址</th>
<th class="center">CPU</th>
<th class="center">内存</th>
<th class="center">负载</th>
<th class="width-5 center">状态</th>
<th class="two op">操作</th>
</tr>
@@ -64,11 +68,21 @@
<div class="ui label tiny basic">{{addr.ip}}
<span class="small" v-if="addr.name.length > 0">{{addr.name}}</span>
<span class="small red" v-if="!addr.canAccess" title="不公开访问">[内]</span>
<span class="small red" v-if="!addr.isOn">[下线]</span>
<span class="small red" v-if="!addr.isUp" title="健康检查失败">[宕机]</span>
</div>
</div>
</td>
<td class="center">
<span v-if="node.status != null && node.status.isActive">{{node.status.cpuUsageText}}</span>
<span v-else class="disabled">-</span>
</td>
<td class="center">
<span v-if="node.status != null && node.status.isActive">{{node.status.memUsageText}}</span>
<span v-else class="disabled">-</span>
</td>
<td class="center">
<span v-if="node.status != null && node.status.isActive && node.status.load1m > 0">{{node.status.load1m}}</span>
<span v-else class="disabled">-</span>
</td>
<td class="center">
<div v-if="!node.isUp">
<span class="red">宕机</span>
@@ -88,4 +102,4 @@
</tr>
</tbody>
</table>
<div class="page" v-html="page"></div>
<div class="page" v-html="page"></div>

View File

@@ -1,31 +1,57 @@
{$layout}
{$template "cluster_menu"}
<div class="ui margin"></div>
<h3 class="ui header">集群设置</h3>
<p><strong>{{cluster.name}}</strong></p>
{$var "header"}
<script src="/servers/certs/datajs" type="text/javascript"></script>
<script src="/js/sortable.min.js" type="text/javascript"></script>
{$end}
<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
<input type="hidden" name="clusterId" :value="cluster.id" />
<table class="ui table definition selectable">
<tr>
<td class="title">集群名称 *</td>
<td>
<input type="text" name="name" maxlength="50" ref="focus" v-model="cluster.name" />
<p class="comment">用于区分不同环境的解析节点池。</p>
</td>
</tr>
<tr>
<td>集群服务域名 *</td>
<td>
<input type="text" name="gatewayDomain" maxlength="255" v-model="settings.gatewayDomain" placeholder="例如 gw-hz.httpdns.example.com" />
<p class="comment">该集群下应用用于 SDK 接入的 HTTPDNS 服务域名。</p>
</td>
</tr>
<tr>
<td colspan="2"><more-options-indicator></more-options-indicator></td>
</tr>
<tbody v-show="moreOptionsVisible">
<second-menu>
<a class="item" :href="'/httpdns/clusters/cluster?clusterId=' + cluster.id">{{cluster.name}}</a>
<span class="item disabled" style="padding-left: 0; padding-right: 0">&raquo;</span>
<div class="item"><strong>集群设置</strong></div>
</second-menu>
{$template "/left_menu_with_menu"}
<div class="right-box with-menu">
<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
<input type="hidden" name="clusterId" :value="cluster.id" />
<table class="ui table definition selectable" v-show="activeSection == 'basic'">
<tr>
<td class="title">集群名称 *</td>
<td>
<input type="text" name="name" maxlength="50" ref="focus" v-model="cluster.name" />
<p class="comment">用于在系统内部标识该 HTTPDNS 集群。</p>
</td>
</tr>
<tr>
<td>服务域名 *</td>
<td>
<input type="text" name="gatewayDomain" maxlength="255" v-model="settings.gatewayDomain"
placeholder="例如 gw-hz.httpdns.example.com" />
<p class="comment">当前集群对外提供 HTTPDNS 服务的接入域名。</p>
</td>
</tr>
<tr>
<td>节点安装根目录</td>
<td>
<input type="text" name="installDir" maxlength="100" v-model="settings.installDir" />
<p class="comment">边缘节点安装 HTTPDNS 服务的默认所在目录,此目录将被用于下发配置。通常保持默认即可。</p>
</td>
</tr>
<tr>
<td>默认解析 TTL</td>
<td>
<div class="ui input right labeled">
<input type="text" name="cacheTtl" maxlength="5" v-model="settings.cacheTtl"
style="width: 6em" />
<span class="ui label"></span>
</div>
<p class="comment">SDK 向 HTTPDNS 请求域名解析时,返回的默认缓存有效期 (TTL)。SDK 超时后将重新发起请求。</p>
</td>
</tr>
<tr>
<td>降级超时容忍度</td>
<td>
@@ -34,38 +60,46 @@
style="width: 6em" />
<span class="ui label">毫秒</span>
</div>
<p class="comment">HTTPDNS 网关请求源站超时多长时间后强制降级返回缓存兜底IP保障 P99 响应延迟)。</p>
</td>
</tr>
<tr>
<td>本地内存缓存</td>
<td>
<div class="ui input right labeled">
<input type="text" name="cacheTtl" maxlength="5" v-model="settings.cacheTtl"
style="width: 6em" />
<span class="ui label"></span>
</div>
<p class="comment">在网关节点内存中缓存解析结果的时长,缓解峰值查询压力。</p>
</td>
</tr>
<tr>
<td>节点安装根目录</td>
<td>
<input type="text" name="installDir" maxlength="100" v-model="settings.installDir" />
<p class="comment">此集群下新加网关节点的主程序默认部署路径。</p>
<p class="comment">HTTPDNS 节点在回源查询其它 DNS 时的最大等待时间。超出此时间将触发服务降级逻辑(返回上一有效缓存或错误)。</p>
</td>
</tr>
<tr>
<td>启用当前集群</td>
<td>
<div class="ui checkbox">
<input type="checkbox" name="isOn" value="1" v-model="settings.isOn" />
<input type="checkbox" name="isOn" value="1" v-model="settings.isOn"
@change="syncDefaultCluster" />
<label></label>
</div>
<p class="comment">如果取消启用,此集群下的所有 HTTPDNS 网关节点将停止处理解析请求</p>
<p class="comment">如果取消启用,整个集群的 HTTPDNS 解析服务将停止</p>
</td>
</tr>
</tbody>
</table>
<submit-btn></submit-btn>
</form>
<tr>
<td>默认集群</td>
<td>
<div class="ui checkbox">
<input type="checkbox" name="isDefaultCluster" value="1" v-model="settings.isDefaultCluster" />
<label>设置为默认部署集群</label>
</div>
<p class="comment">全局设置。如果应用未单独指定集群,将默认分配和部署到该集群中。</p>
</td>
</tr>
</table>
<table class="ui table selectable definition" v-show="activeSection == 'tls'">
<tr>
<td class="title">绑定端口 *</td>
<td>
<network-addresses-box :v-url="'/httpdns/addPortPopup'" :v-addresses="tlsConfig.listen"
:v-protocol="'tls'" :v-support-range="true"></network-addresses-box>
</td>
</tr>
</table>
<!-- SSL配置 -->
<ssl-config-box v-show="activeSection == 'tls'" :v-ssl-policy="tlsConfig.sslPolicy"
:v-protocol="'tls'"></ssl-config-box>
<submit-btn></submit-btn>
</form>
</div>

View File

@@ -1,3 +1,11 @@
Tea.context(function () {
Tea.context(function () {
this.success = NotifyReloadSuccess("保存成功");
this.activeSection = this.activeSection || "basic";
this.tlsAdvancedVisible = false;
if (!this.settings) {
this.settings = {};
}
});

View File

@@ -1,5 +1,10 @@
{$layout}
{$template "cluster_menu"}
<second-menu>
<a class="item" :href="'/httpdns/clusters/cluster?clusterId=' + cluster.id">{{cluster.name}}</a>
<span class="item disabled" style="padding-left: 0; padding-right: 0">&raquo;</span>
<div class="item"><strong>创建节点</strong></div>
</second-menu>
<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
<input type="hidden" name="clusterId" :value="clusterId" />

View File

@@ -1,6 +1,10 @@
{$layout}
{$template "cluster_menu"}
<div class="ui margin"></div>
<second-menu>
<a class="item" :href="'/httpdns/clusters/cluster?clusterId=' + cluster.id">{{cluster.name}}</a>
<span class="item disabled" style="padding-left: 0; padding-right: 0">&raquo;</span>
<div class="item"><strong>删除集群</strong></div>
</second-menu>
<div class="buttons-box">
<button class="ui button red" type="button" @click.prevent="deleteCluster(cluster.id)">删除当前集群</button>

View File

@@ -1,6 +1,8 @@
{$layout}
{$template "menu"}
<div class="ui margin"></div>
<div>
<div v-if="hasErrorLogs" class="ui icon message small error">
<i class="icon warning circle"></i>
@@ -66,3 +68,4 @@
<div class="page" v-html="page"></div>
</div>