mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 13:10:26 +08:00 
			
		
		
		
	删除不必要的文件
This commit is contained in:
		@@ -1,4 +0,0 @@
 | 
				
			|||||||
<first-menu>
 | 
					 | 
				
			||||||
    <menu-item href="/ns/clusters" code="index">集群列表</menu-item>
 | 
					 | 
				
			||||||
    <menu-item href="/ns/clusters/create" code="create">创建集群</menu-item>
 | 
					 | 
				
			||||||
</first-menu>
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
.access-log-row em {
 | 
					 | 
				
			||||||
  font-style: italic !important;
 | 
					 | 
				
			||||||
  font-size: 1em !important;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
/*# sourceMappingURL=index.css.map */
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
{"version":3,"sources":["index.less"],"names":[],"mappings":"AAAA,eACC;EACC,6BAAA;EACA,yBAAA","file":"index.css"}
 | 
					 | 
				
			||||||
@@ -1,59 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "/datepicker"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<first-menu>
 | 
					 | 
				
			||||||
    <div class="item right">
 | 
					 | 
				
			||||||
        <form method="get" class="ui form small" :action="path" autocomplete="off">
 | 
					 | 
				
			||||||
            <div class="ui fields inline">
 | 
					 | 
				
			||||||
                <div class="ui field">
 | 
					 | 
				
			||||||
                    <input type="text" name="keyword" v-model="keyword" placeholder="IP、域名、记录等..."/>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
                <div class="ui field">
 | 
					 | 
				
			||||||
                    <input type="text" name="day" maxlength="10" placeholder="选择日期" style="width:7.8em" id="day-input" v-model="day"/>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
                <div class="ui field">
 | 
					 | 
				
			||||||
                    <button class="ui button small" type="submit">查找</button>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
        </form>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
</first-menu>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<p class="comment" v-if="accessLogs.length == 0">暂时还没有访问日志。</p>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<table class="ui table selectable" v-if="accessLogs.length > 0">
 | 
					 | 
				
			||||||
    <thead>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <th class="two wide">集群</th>
 | 
					 | 
				
			||||||
            <th class="two wide">节点</th>
 | 
					 | 
				
			||||||
            <th class="two wide">域名</th>
 | 
					 | 
				
			||||||
            <th>概要</th>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
    </thead>
 | 
					 | 
				
			||||||
    <tr v-for="accessLog in accessLogs" :key="accessLog.requestId">
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <div v-if="accessLog.node.cluster != null">
 | 
					 | 
				
			||||||
                <link-icon :href="'/ns/clusters/cluster?clusterId=' + accessLog.node.cluster.id">{{accessLog.node.cluster.name}}</link-icon>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <div v-if="accessLog.node != null">
 | 
					 | 
				
			||||||
                <link-icon :href="'/ns/clusters/cluster/node?clusterId=' + accessLog.node.cluster.id + '&nodeId=' + accessLog.node.id">{{accessLog.node.name}}</link-icon>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <div v-if="accessLog.domain != null">
 | 
					 | 
				
			||||||
                <link-icon :href="'/ns/domains/domain?domainId=' + accessLog.domain.id">{{accessLog.domain.name}}</link-icon>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
        <td><ns-access-log-box :v-access-log="accessLog" :v-keyword="keyword"></ns-access-log-box></td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div v-if="accessLogs.length > 0">
 | 
					 | 
				
			||||||
    <a :href="path + '?requestId=' + lastRequestId + '&day=' + day + '&keyword=' + keyword" v-if="hasPrev">上一页</a>
 | 
					 | 
				
			||||||
    <span v-else class="disabled">上一页</span>
 | 
					 | 
				
			||||||
    <span class="disabled">  |  </span>
 | 
					 | 
				
			||||||
    <a :href="path + '?requestId=' + nextRequestId + '&day=' + day + '&keyword=' + keyword" v-if="hasMore">下一页</a>
 | 
					 | 
				
			||||||
    <span v-else class="disabled">下一页</span>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
@@ -1,32 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	let that = this
 | 
					 | 
				
			||||||
	this.accessLogs.forEach(function (accessLog) {
 | 
					 | 
				
			||||||
		// 区域
 | 
					 | 
				
			||||||
		if (typeof (that.regions[accessLog.remoteAddr]) == "string") {
 | 
					 | 
				
			||||||
			accessLog.region = that.regions[accessLog.remoteAddr]
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			accessLog.region = ""
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// 节点
 | 
					 | 
				
			||||||
		if (typeof (that.nodes[accessLog.nsNodeId]) != "undefined") {
 | 
					 | 
				
			||||||
			accessLog["node"] = that.nodes[accessLog.nsNodeId]
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			accessLog["node"] = null
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// 域名
 | 
					 | 
				
			||||||
		if (typeof (that.domains[accessLog.nsDomainId]) != "undefined") {
 | 
					 | 
				
			||||||
			accessLog["domain"] = that.domains[accessLog.nsDomainId]
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			accessLog["domain"] = null
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	this.$delay(function () {
 | 
					 | 
				
			||||||
		let that = this
 | 
					 | 
				
			||||||
		teaweb.datepicker("day-input", function (v) {
 | 
					 | 
				
			||||||
			that.day = v
 | 
					 | 
				
			||||||
		})
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
.access-log-row {
 | 
					 | 
				
			||||||
	em {
 | 
					 | 
				
			||||||
		font-style: italic !important;
 | 
					 | 
				
			||||||
		font-size: 1em !important;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
<second-menu>
 | 
					 | 
				
			||||||
	<menu-item :href="'/ns/clusters/cluster?clusterId=' + clusterId" code="index">节点列表</menu-item>
 | 
					 | 
				
			||||||
	<menu-item :href="'/ns/clusters/cluster/createNode?clusterId=' + clusterId" code="create">创建节点</menu-item>
 | 
					 | 
				
			||||||
	<!--<menu-item :href="'/ns/clusters/cluster/installManual?clusterId=' + clusterId" code="install">安装升级</menu-item>
 | 
					 | 
				
			||||||
	<menu-item :href="'/ns/clusters/cluster/groups?clusterId=' + clusterId" code="group">节点分组</menu-item>-->
 | 
					 | 
				
			||||||
</second-menu>
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
.left-box {
 | 
					 | 
				
			||||||
  top: 10em;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.right-box {
 | 
					 | 
				
			||||||
  top: 10em;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
/*# sourceMappingURL=createNode.css.map */
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
{"version":3,"sources":["createNode.less"],"names":[],"mappings":"AAAA;EACC,SAAA;;AAGD;EACC,SAAA","file":"createNode.css"}
 | 
					 | 
				
			||||||
@@ -1,22 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
 | 
					 | 
				
			||||||
    <input type="hidden" name="clusterId" :value="clusterId"/>
 | 
					 | 
				
			||||||
    <table class="ui table definition selectable">
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td class="title">节点名称 *</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <input type="text" name="name" maxlength="50" ref="focus"/>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>IP地址 *</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <node-ip-addresses-box role="ns"></node-ip-addresses-box>
 | 
					 | 
				
			||||||
                <p class="comment">用于访问节点和域名解析等。</p>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
    </table>
 | 
					 | 
				
			||||||
    <submit-btn></submit-btn>
 | 
					 | 
				
			||||||
</form>
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.success = NotifySuccess("保存成功", "/ns/clusters/cluster?clusterId=" + this.clusterId);
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
.left-box {
 | 
					 | 
				
			||||||
	top: 10em;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.right-box {
 | 
					 | 
				
			||||||
	top: 10em;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
.buttons-box {
 | 
					 | 
				
			||||||
  text-align: center;
 | 
					 | 
				
			||||||
  margin-top: 2em;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.buttons-box button {
 | 
					 | 
				
			||||||
  width: 20em;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
/*# sourceMappingURL=delete.css.map */
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
{"version":3,"sources":["delete.less"],"names":[],"mappings":"AAAA;EACC,kBAAA;EACA,eAAA;;AAFD,YAIC;EACC,WAAA","file":"delete.css"}
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div class="buttons-box">
 | 
					 | 
				
			||||||
	<button class="ui button red" type="button" @click.prevent="deleteCluster(clusterId)">删除当前集群</button>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
@@ -1,16 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
    this.deleteCluster = function (clusterId) {
 | 
					 | 
				
			||||||
        let that = this
 | 
					 | 
				
			||||||
        teaweb.confirm("确定要删除此集群吗?", function () {
 | 
					 | 
				
			||||||
            that.$post("/ns/clusters/cluster/delete")
 | 
					 | 
				
			||||||
                .params({
 | 
					 | 
				
			||||||
                    clusterId: clusterId
 | 
					 | 
				
			||||||
                })
 | 
					 | 
				
			||||||
                .success(function () {
 | 
					 | 
				
			||||||
                    teaweb.success("删除成功", function () {
 | 
					 | 
				
			||||||
                        window.location = "/ns/clusters"
 | 
					 | 
				
			||||||
                    })
 | 
					 | 
				
			||||||
                })
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
.buttons-box {
 | 
					 | 
				
			||||||
	text-align: center;
 | 
					 | 
				
			||||||
	margin-top: 2em;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	button {
 | 
					 | 
				
			||||||
		width: 20em;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,105 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<form class="ui form" action="/ns/clusters/cluster" v-show="countAll > 0">
 | 
					 | 
				
			||||||
	<input type="hidden" name="clusterId" :value="clusterId"/>
 | 
					 | 
				
			||||||
	<div class="ui fields inline">
 | 
					 | 
				
			||||||
		<div class="ui field">
 | 
					 | 
				
			||||||
			<select class="ui dropdown" name="installedState" v-model="installState">
 | 
					 | 
				
			||||||
				<option value="0">[安装状态]</option>
 | 
					 | 
				
			||||||
				<option value="1">已安装</option>
 | 
					 | 
				
			||||||
				<option value="2">未安装</option>
 | 
					 | 
				
			||||||
			</select>
 | 
					 | 
				
			||||||
		</div>
 | 
					 | 
				
			||||||
		<div class="ui field">
 | 
					 | 
				
			||||||
			<select class="ui dropdown" name="activeState" v-model="activeState">
 | 
					 | 
				
			||||||
				<option value="0">[在线状态]</option>
 | 
					 | 
				
			||||||
				<option value="1">在线</option>
 | 
					 | 
				
			||||||
				<option value="2">不在线</option>
 | 
					 | 
				
			||||||
			</select>
 | 
					 | 
				
			||||||
		</div>
 | 
					 | 
				
			||||||
		<div class="ui field">
 | 
					 | 
				
			||||||
			<input type="text" name="keyword" placeholder="关键词" v-model="keyword" style="width:10em"/>
 | 
					 | 
				
			||||||
		</div>
 | 
					 | 
				
			||||||
		<div class="ui field">
 | 
					 | 
				
			||||||
			<button class="ui button" type="submit">搜索</button>
 | 
					 | 
				
			||||||
		</div>
 | 
					 | 
				
			||||||
	</div>
 | 
					 | 
				
			||||||
</form>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div v-if="countAll == 0">
 | 
					 | 
				
			||||||
   <not-found-box message="当前集群下还没有节点,至少添加一个节点后才能提供服务。">
 | 
					 | 
				
			||||||
       <div style="margin-top: 0.5em">
 | 
					 | 
				
			||||||
           <a :href="'/ns/clusters/cluster/createNode?clusterId=' + clusterId">[创建节点]</a>
 | 
					 | 
				
			||||||
       </div>
 | 
					 | 
				
			||||||
   </not-found-box>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
<div v-if="countAll > 0">
 | 
					 | 
				
			||||||
    <p class="comment" v-if="nodes.length == 0">暂时还没有节点。</p>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<table class="ui table selectable celled" v-if="nodes.length > 0">
 | 
					 | 
				
			||||||
	<thead>
 | 
					 | 
				
			||||||
	<tr>
 | 
					 | 
				
			||||||
		<th>节点名称</th>
 | 
					 | 
				
			||||||
		<th>IP</th>
 | 
					 | 
				
			||||||
		<th class="width5 center">CPU</th>
 | 
					 | 
				
			||||||
		<th class="width5 center">内存</th>
 | 
					 | 
				
			||||||
		<!--<th>流量</th>
 | 
					 | 
				
			||||||
		<th>连接数</th>-->
 | 
					 | 
				
			||||||
		<th class="two wide center">状态</th>
 | 
					 | 
				
			||||||
		<th class="two op">操作</th>
 | 
					 | 
				
			||||||
	</tr>
 | 
					 | 
				
			||||||
	</thead>
 | 
					 | 
				
			||||||
	<tr v-for="node in nodes">
 | 
					 | 
				
			||||||
        <td><a :href="'/ns/clusters/cluster/node?clusterId=' + clusterId + '&nodeId=' + node.id"><keyword :v-word="keyword">{{node.name}}</keyword></a></td>
 | 
					 | 
				
			||||||
		<td>
 | 
					 | 
				
			||||||
			<span v-if="node.ipAddresses.length == 0" class="disabled">-</span>
 | 
					 | 
				
			||||||
			<div v-else class="address-box">
 | 
					 | 
				
			||||||
				<div v-for="addr in node.ipAddresses" style="margin-bottom:0.3em">
 | 
					 | 
				
			||||||
					<div class="ui label tiny basic">{{addr.ip}}
 | 
					 | 
				
			||||||
						<span class="small" v-if="addr.name.length > 0">({{addr.name}}<span v-if="!addr.canAccess">,不可访问</span>)</span>
 | 
					 | 
				
			||||||
						<span class="small" v-if="addr.name.length == 0 && !addr.canAccess">(不可访问)</span>
 | 
					 | 
				
			||||||
					</div>
 | 
					 | 
				
			||||||
				</div>
 | 
					 | 
				
			||||||
			</div>
 | 
					 | 
				
			||||||
		</td>
 | 
					 | 
				
			||||||
		<td class="center">
 | 
					 | 
				
			||||||
			<span v-if="node.status.isActive" :class="{red:node.status.cpuUsage > 0.80}">{{node.status.cpuUsageText}}</span>
 | 
					 | 
				
			||||||
			<span v-else class="disabled">-</span>
 | 
					 | 
				
			||||||
		</td>
 | 
					 | 
				
			||||||
		<td class="center">
 | 
					 | 
				
			||||||
			<span v-if="node.status.isActive" :class="{red:node.status.memUsage > 0.80}">{{node.status.memUsageText}}</span>
 | 
					 | 
				
			||||||
			<span v-else class="disabled">-</span>
 | 
					 | 
				
			||||||
		</td>
 | 
					 | 
				
			||||||
		<td class="center">
 | 
					 | 
				
			||||||
			<div v-if="!node.isUp">
 | 
					 | 
				
			||||||
				<span class="red">健康问题下线</span>
 | 
					 | 
				
			||||||
                <div>
 | 
					 | 
				
			||||||
                    <a href="" @click.prevent="upNode(node.id)">[上线]</a>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
			</div>
 | 
					 | 
				
			||||||
			<div v-else-if="!node.isOn">
 | 
					 | 
				
			||||||
				<label-on :v-is-on="node.isOn"></label-on>
 | 
					 | 
				
			||||||
			</div>
 | 
					 | 
				
			||||||
			<div v-else-if="node.isInstalled">
 | 
					 | 
				
			||||||
				<div v-if="node.status.isActive">
 | 
					 | 
				
			||||||
					<span class="green">运行中</span>
 | 
					 | 
				
			||||||
				</div>
 | 
					 | 
				
			||||||
				<span v-else-if="node.status.updatedAt > 0" class="red">已断开</span>
 | 
					 | 
				
			||||||
				<span v-else-if="node.status.updatedAt == 0" class="red">未连接</span>
 | 
					 | 
				
			||||||
			</div>
 | 
					 | 
				
			||||||
			<div v-else>
 | 
					 | 
				
			||||||
				<span v-if="node.installStatus.isRunning" class="red">安装中</span>
 | 
					 | 
				
			||||||
				<a v-if="node.installStatus.isFinished && !node.installStatus.isOk" :href="'/ns/clusters/cluster/node/install?clusterId=' + clusterId + '&nodeId=' + node.id" title="点击看安装错误"><span class="red">安装出错</span></a>
 | 
					 | 
				
			||||||
				<a v-else class="red" :href="'/ns/clusters/cluster/node/install?clusterId=' + clusterId + '&nodeId=' + node.id" title="点击进安装界面"><span class="red">未安装</span></a>
 | 
					 | 
				
			||||||
			</div>
 | 
					 | 
				
			||||||
		</td>
 | 
					 | 
				
			||||||
		<td>
 | 
					 | 
				
			||||||
			<a :href="'/ns/clusters/cluster/node?clusterId=' + clusterId + '&nodeId=' + node.id">详情</a>   <a href="" @click.prevent="deleteNode(node.id)">删除</a>
 | 
					 | 
				
			||||||
		</td>
 | 
					 | 
				
			||||||
	</tr>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div class="page" v-html="page"></div>
 | 
					 | 
				
			||||||
@@ -1,21 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
    this.deleteNode = function (nodeId) {
 | 
					 | 
				
			||||||
        teaweb.confirm("确定要删除这个节点吗?", function () {
 | 
					 | 
				
			||||||
            this.$post("/ns/clusters/cluster/deleteNode")
 | 
					 | 
				
			||||||
                .params({
 | 
					 | 
				
			||||||
                    nodeId: nodeId
 | 
					 | 
				
			||||||
                })
 | 
					 | 
				
			||||||
                .refresh();
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.upNode = function (nodeId) {
 | 
					 | 
				
			||||||
        teaweb.confirm("确定要手动上线此节点吗?", function () {
 | 
					 | 
				
			||||||
            this.$post("/ns/clusters/cluster/node/up")
 | 
					 | 
				
			||||||
                .params({
 | 
					 | 
				
			||||||
                    nodeId: nodeId
 | 
					 | 
				
			||||||
                })
 | 
					 | 
				
			||||||
                .refresh()
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
<second-menu>
 | 
					 | 
				
			||||||
	<menu-item :href="'/ns/clusters/cluster?clusterId=' + clusterId">节点列表</menu-item>
 | 
					 | 
				
			||||||
	<span class="item">|</span>
 | 
					 | 
				
			||||||
	<menu-item :href="'/ns/clusters/cluster/node?clusterId=' + clusterId + '&nodeId=' + nodeId" code="node">节点详情</menu-item>
 | 
					 | 
				
			||||||
    <menu-item :href="'/ns/clusters/cluster/node/logs?clusterId=' + clusterId + '&nodeId=' + nodeId" code="log">运行日志</menu-item>
 | 
					 | 
				
			||||||
	<menu-item :href="'/ns/clusters/cluster/node/update?clusterId=' + clusterId + '&nodeId=' + nodeId" code="update">修改设置</menu-item>
 | 
					 | 
				
			||||||
	<menu-item :href="'/ns/clusters/cluster/node/install?clusterId=' + clusterId + '&nodeId=' + nodeId" code="install">安装节点</menu-item>
 | 
					 | 
				
			||||||
</second-menu>
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
a.underline {
 | 
					 | 
				
			||||||
  border-bottom: 1px #db2828 dashed;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
/*# sourceMappingURL=index.css.map */
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
{"version":3,"sources":["index.less"],"names":[],"mappings":"AAAA,CAAC;EACA,iCAAA","file":"index.css"}
 | 
					 | 
				
			||||||
@@ -1,143 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{$template "node_menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<h3>节点详情</h3>
 | 
					 | 
				
			||||||
<table class="ui table definition selectable">
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td class="title">节点名称</td>
 | 
					 | 
				
			||||||
        <td>{{node.name}}</td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td>状态</td>
 | 
					 | 
				
			||||||
        <td><label-on :v-is-on="node.isOn"></label-on></td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td>IP地址</td>
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <div v-if="node.ipAddresses.length > 0">
 | 
					 | 
				
			||||||
                <div>
 | 
					 | 
				
			||||||
                    <div v-for="(address, index) in node.ipAddresses" class="ui label tiny basic">
 | 
					 | 
				
			||||||
                        {{address.ip}}
 | 
					 | 
				
			||||||
                        <span class="small" v-if="address.name.length > 0">({{address.name}}<span v-if="!address.canAccess">,不可访问</span>)</span>  
 | 
					 | 
				
			||||||
                        <span class="small red" v-if="!address.isOn">[off]</span>
 | 
					 | 
				
			||||||
                        <span class="small red" v-if="!address.isUp">[down]</span>
 | 
					 | 
				
			||||||
                        <span class="small" v-if="address.name.length == 0 && !address.canAccess">(不可访问)</span>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            <div v-else>
 | 
					 | 
				
			||||||
                <span class="disabled">暂时还没有填写IP地址。</span>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td colspan="2"><more-options-indicator></more-options-indicator></td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    <tbody v-show="moreOptionsVisible">
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>SSH主机地址</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <div v-if="node.login != null && node.login.params != null && node.login.params.host != null">
 | 
					 | 
				
			||||||
                    <span v-if="node.login.params.host.length > 0">{{node.login.params.host}}</span>
 | 
					 | 
				
			||||||
                    <span v-else class="disabled">尚未设置</span>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
                <div v-else class="disabled">
 | 
					 | 
				
			||||||
                    尚未设置
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>SSH主机端口</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <div v-if="node.login != null && node.login.params != null && node.login.params.host != null">
 | 
					 | 
				
			||||||
                    <span v-if="node.login.params.port > 0">{{node.login.params.port}}</span>
 | 
					 | 
				
			||||||
                    <span v-else class="disabled">尚未设置</span>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
                <span v-else class="disabled">
 | 
					 | 
				
			||||||
                            尚未设置
 | 
					 | 
				
			||||||
                        </span>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>SSH登录认证</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <div v-if="node.login != null && node.login.grant != null && node.login.grant.id > 0">
 | 
					 | 
				
			||||||
                    <a :href="'/clusters/grants/grant?grantId=' + node.login.grant.id">{{node.login.grant.name}}<span class="small grey">({{node.login.grant.methodName}})</span><span class="small grey" v-if="node.login.grant.username.length > 0">({{node.login.grant.username}})</span></a>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
                <span v-else class="disabled">
 | 
					 | 
				
			||||||
                            尚未设置
 | 
					 | 
				
			||||||
                        </span>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
    </tbody>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
<div class="ui divider"></div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<h3>运行状态</h3>
 | 
					 | 
				
			||||||
<table class="ui table definition selectable">
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td class="title">是否在运行</td>
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <div  v-if="node.status.isActive">
 | 
					 | 
				
			||||||
                <span class="green">运行中</span>  
 | 
					 | 
				
			||||||
                <a href="" @click.prevent="stopNode()" v-if="!isStopping"><span>[通过SSH停止]</span></a>
 | 
					 | 
				
			||||||
                <span v-if="isStopping">[停止中...]</span>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            <div v-else>
 | 
					 | 
				
			||||||
                <span class="red">已断开</span>  
 | 
					 | 
				
			||||||
                <a href="" @click.prevent="startNode()" v-if="node.isInstalled && !isStarting"><span>[通过SSH启动]</span></a>
 | 
					 | 
				
			||||||
                <span v-if="node.isInstalled && isStarting">[启动中...]</span>
 | 
					 | 
				
			||||||
                <a v-if="!node.isInstalled" :href="'/ns/clusters/cluster/node/install?clusterId=' + clusterId + '&nodeId=' + node.id" ><span>去安装></span></a>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    <tbody v-show="node.status.isActive">
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>CPU用量</td>
 | 
					 | 
				
			||||||
            <td>{{node.status.cpuUsageText}}   <span v-if="node.status.cpuPhysicalCount > 0" class="small grey">({{node.status.cpuPhysicalCount}}核心/{{node.status.cpuLogicalCount}}线程)</span></td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>内存用量</td>
 | 
					 | 
				
			||||||
            <td>{{node.status.memUsageText}}</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>负载</td>
 | 
					 | 
				
			||||||
            <td>{{node.status.load1m}}   {{node.status.load5m}}   {{node.status.load15m}}   <tip-icon content="三个数字分别代表1分钟、5分钟、15分钟平均负载"></tip-icon></td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>版本</td>
 | 
					 | 
				
			||||||
            <td>v{{node.status.buildVersion}}
 | 
					 | 
				
			||||||
                  <a :href="'/ns/clusters/cluster/upgradeRemote?clusterId=' + clusterId" v-if="shouldUpgrade"><span class="red">发现新版本v{{newVersion}} »</span></a>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
    </tbody>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
<p class="comment" v-if="node.status.isActive">每隔30秒钟更新一次运行状态。</p>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div class="ui divider"></div>
 | 
					 | 
				
			||||||
<h3>安装信息</h3>
 | 
					 | 
				
			||||||
<table class="ui table definition selectable">
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td>节点ID<em>(id)</em></td>
 | 
					 | 
				
			||||||
        <td>{{node.uniqueId}}</td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td>密钥<em>(secret)</em></td>
 | 
					 | 
				
			||||||
        <td>{{node.secret}}</td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td class="title">安装目录</td>
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <div v-if="node.installDir.length == 0">使用集群设置<span v-if="node.cluster != null && node.cluster.installDir.length > 0">({{node.cluster.installDir}})</span></div>
 | 
					 | 
				
			||||||
            <span v-else>{{node.installDir}}</span>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td>是否已安装</td>
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <span v-if="node.isInstalled" class="green">已安装</span>
 | 
					 | 
				
			||||||
            <a v-else :href="'/ns/clusters/cluster/node/install?clusterId=' + clusterId + '&nodeId=' + nodeId" class="underline" title="点击进入安装界面"><span class="red">未安装</span></a>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
@@ -1,35 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.isStarting = false
 | 
					 | 
				
			||||||
	this.startNode = function () {
 | 
					 | 
				
			||||||
		this.isStarting = true
 | 
					 | 
				
			||||||
		this.$post("/ns/clusters/cluster/node/start")
 | 
					 | 
				
			||||||
			.params({
 | 
					 | 
				
			||||||
				nodeId: this.node.id
 | 
					 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
			.success(function () {
 | 
					 | 
				
			||||||
				teaweb.success("启动成功", function () {
 | 
					 | 
				
			||||||
					teaweb.reload()
 | 
					 | 
				
			||||||
				})
 | 
					 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
			.done(function () {
 | 
					 | 
				
			||||||
				this.isStarting = false
 | 
					 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	this.isStopping = false
 | 
					 | 
				
			||||||
	this.stopNode = function () {
 | 
					 | 
				
			||||||
		this.isStopping = true
 | 
					 | 
				
			||||||
		this.$post("/ns/clusters/cluster/node/stop")
 | 
					 | 
				
			||||||
			.params({
 | 
					 | 
				
			||||||
				nodeId: this.node.id
 | 
					 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
			.success(function () {
 | 
					 | 
				
			||||||
				teaweb.success("执行成功", function () {
 | 
					 | 
				
			||||||
					teaweb.reload()
 | 
					 | 
				
			||||||
				})
 | 
					 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
			.done(function () {
 | 
					 | 
				
			||||||
				this.isStopping = false
 | 
					 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
a.underline {
 | 
					 | 
				
			||||||
	border-bottom: 1px #db2828 dashed;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
.installing-box {
 | 
					 | 
				
			||||||
  line-height: 1.8;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.installing-box .blue {
 | 
					 | 
				
			||||||
  color: #2185d0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
/*# sourceMappingURL=install.css.map */
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
{"version":3,"sources":["install.less"],"names":[],"mappings":"AAAA;EACC,gBAAA;;AADD,eAGC;EACC,cAAA","file":"install.css"}
 | 
					 | 
				
			||||||
@@ -1,77 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "node_menu"}
 | 
					 | 
				
			||||||
{$template "/code_editor"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!-- 已安装 -->
 | 
					 | 
				
			||||||
<div v-if="node.isInstalled">
 | 
					 | 
				
			||||||
    <div class="ui message green">当前节点为已安装状态。</div>
 | 
					 | 
				
			||||||
    <a href="" @click.prevent="updateNodeIsInstalled(false)">[重新安装]</a>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h4>配置文件</h4>
 | 
					 | 
				
			||||||
    <table class="ui table definition selectable">
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>配置文件<em>(configs/api.yaml)</em><br/>
 | 
					 | 
				
			||||||
                <em><download-link :v-element="'rpc-code'" :v-file="'api.yaml'">[下载]</download-link ></em></td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <source-code-box id="rpc-code" type="text/yaml">rpc:
 | 
					 | 
				
			||||||
    endpoints: [ {{apiEndpoints}} ]
 | 
					 | 
				
			||||||
nodeId: "{{node.uniqueId}}"
 | 
					 | 
				
			||||||
secret: "{{node.secret}}"</source-code-box>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td class="title">安装目录</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <div v-if="node.installDir.length == 0">使用集群设置<span
 | 
					 | 
				
			||||||
                        v-if="node.cluster != null && node.cluster.installDir.length > 0">({{node.cluster.installDir}})</span>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
                <span v-else>{{node.installDir}}</span>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
    </table>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<!-- 未安装 -->
 | 
					 | 
				
			||||||
<div v-if="!node.isInstalled">
 | 
					 | 
				
			||||||
    <h4>方法1:通过SSH自动安装</h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <div v-if="installStatus != null && (installStatus.isRunning || installStatus.isFinished)"
 | 
					 | 
				
			||||||
         class="ui segment installing-box">
 | 
					 | 
				
			||||||
        <div v-if="installStatus.isRunning" class="blue">安装中...</div>
 | 
					 | 
				
			||||||
        <div v-if="installStatus.isFinished">
 | 
					 | 
				
			||||||
            <span v-if="installStatus.isOk" class="green">已安装成功</span>
 | 
					 | 
				
			||||||
            <span v-if="!installStatus.isOk" class="red">安装过程中发生错误:{{installStatus.error}}</span>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div v-if="installStatus != null && installStatus.isFinished">
 | 
					 | 
				
			||||||
        <button class="ui button small" type="button" @click.prevent="install()">重新安装</button>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div v-if="installStatus == null || (!installStatus.isFinished && !installStatus.isRunning)">
 | 
					 | 
				
			||||||
        <button class="ui button small" type="button" @click.prevent="install()">开始安装</button>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h4>方法2:手动安装</h4>
 | 
					 | 
				
			||||||
    <table class="ui table definition selectable">
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>配置文件<em>(configs/api.yaml)</em><br/>
 | 
					 | 
				
			||||||
            <em><download-link :v-element="'rpc-code'" :v-file="'api.yaml'">[下载]</download-link ></em></td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
					<source-code-box id="rpc-code" type="text/yaml">rpc:
 | 
					 | 
				
			||||||
    endpoints: [ {{apiEndpoints}} ]
 | 
					 | 
				
			||||||
nodeId: "{{node.uniqueId}}"
 | 
					 | 
				
			||||||
secret: "{{node.secret}}"</source-code-box>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td class="title">安装目录</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <div v-if="node.installDir.length == 0">使用集群设置<span
 | 
					 | 
				
			||||||
                            v-if="node.cluster != null && node.cluster.installDir.length > 0">({{node.cluster.installDir}})</span>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
                <span v-else>{{node.installDir}}</span>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
    </table>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <a href="" @click.prevent="updateNodeIsInstalled(true)">[修改为已安装状态]</a>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
@@ -1,105 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
    let isInstalling = false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.$delay(function () {
 | 
					 | 
				
			||||||
        this.reloadStatus(this.nodeId)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // 开始安装
 | 
					 | 
				
			||||||
    this.install = function () {
 | 
					 | 
				
			||||||
        isInstalling = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.$post("$")
 | 
					 | 
				
			||||||
            .params({
 | 
					 | 
				
			||||||
                nodeId: this.nodeId
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
            .success(function () {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // 设置节点安装状态
 | 
					 | 
				
			||||||
    this.updateNodeIsInstalled = function (isInstalled) {
 | 
					 | 
				
			||||||
        teaweb.confirm("确定要将当前节点修改为未安装状态?", function () {
 | 
					 | 
				
			||||||
            this.$post("/ns/clusters/cluster/node/updateInstallStatus")
 | 
					 | 
				
			||||||
                .params({
 | 
					 | 
				
			||||||
                    nodeId: this.nodeId,
 | 
					 | 
				
			||||||
                    isInstalled: isInstalled ? 1 : 0
 | 
					 | 
				
			||||||
                })
 | 
					 | 
				
			||||||
                .refresh()
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // 刷新状态
 | 
					 | 
				
			||||||
    this.reloadStatus = function (nodeId) {
 | 
					 | 
				
			||||||
        let that = this
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.$post("/ns/clusters/cluster/node/status")
 | 
					 | 
				
			||||||
            .params({
 | 
					 | 
				
			||||||
                nodeId: nodeId
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
            .success(function (resp) {
 | 
					 | 
				
			||||||
                this.installStatus = resp.data.installStatus
 | 
					 | 
				
			||||||
                this.node.isInstalled = resp.data.isInstalled
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (!isInstalling) {
 | 
					 | 
				
			||||||
                    return
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                let nodeId = this.node.id
 | 
					 | 
				
			||||||
                let errMsg = this.installStatus.error
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (this.installStatus.errorCode.length > 0) {
 | 
					 | 
				
			||||||
                    isInstalling = false
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                switch (this.installStatus.errorCode) {
 | 
					 | 
				
			||||||
                    case "EMPTY_LOGIN":
 | 
					 | 
				
			||||||
                    case "EMPTY_SSH_HOST":
 | 
					 | 
				
			||||||
                    case "EMPTY_SSH_PORT":
 | 
					 | 
				
			||||||
                    case "EMPTY_GRANT":
 | 
					 | 
				
			||||||
                        teaweb.warn("需要填写SSH登录信息", function () {
 | 
					 | 
				
			||||||
                            teaweb.popup("/ns/clusters/cluster/updateNodeSSH?nodeId=" + nodeId, {
 | 
					 | 
				
			||||||
								height: "30em",
 | 
					 | 
				
			||||||
                                callback: function () {
 | 
					 | 
				
			||||||
                                    that.install()
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            })
 | 
					 | 
				
			||||||
                        })
 | 
					 | 
				
			||||||
                        return
 | 
					 | 
				
			||||||
                    case "SSH_LOGIN_FAILED":
 | 
					 | 
				
			||||||
                        teaweb.warn("SSH登录失败,请检查设置", function () {
 | 
					 | 
				
			||||||
                            teaweb.popup("/ns/clusters/cluster/updateNodeSSH?nodeId=" + nodeId, {
 | 
					 | 
				
			||||||
								height: "30em",
 | 
					 | 
				
			||||||
                                callback: function () {
 | 
					 | 
				
			||||||
                                    that.install()
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            })
 | 
					 | 
				
			||||||
                        })
 | 
					 | 
				
			||||||
                        return
 | 
					 | 
				
			||||||
                    case "CREATE_ROOT_DIRECTORY_FAILED":
 | 
					 | 
				
			||||||
                        teaweb.warn("创建根目录失败,请检查目录权限或者手工创建:" + errMsg)
 | 
					 | 
				
			||||||
                        return
 | 
					 | 
				
			||||||
                    case "INSTALL_HELPER_FAILED":
 | 
					 | 
				
			||||||
                        teaweb.warn("安装助手失败:" + errMsg)
 | 
					 | 
				
			||||||
                        return
 | 
					 | 
				
			||||||
                    case "TEST_FAILED":
 | 
					 | 
				
			||||||
                        teaweb.warn("环境测试失败:" + errMsg)
 | 
					 | 
				
			||||||
                        return
 | 
					 | 
				
			||||||
                    case "RPC_TEST_FAILED":
 | 
					 | 
				
			||||||
                        teaweb.confirm("html:要安装的节点到API服务之间的RPC通讯测试失败,具体错误:" + errMsg + ",<br/>现在修改API信息?", function () {
 | 
					 | 
				
			||||||
                            window.location = "/api"
 | 
					 | 
				
			||||||
                        })
 | 
					 | 
				
			||||||
                        return
 | 
					 | 
				
			||||||
                    default:
 | 
					 | 
				
			||||||
                        shouldReload = true
 | 
					 | 
				
			||||||
                    //teaweb.warn("安装失败:" + errMsg)
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
            .done(function () {
 | 
					 | 
				
			||||||
                this.$delay(function () {
 | 
					 | 
				
			||||||
                    this.reloadStatus(nodeId)
 | 
					 | 
				
			||||||
                }, 1000)
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
.installing-box {
 | 
					 | 
				
			||||||
	line-height: 1.8;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	.blue {
 | 
					 | 
				
			||||||
		color: #2185d0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
pre.log-box {
 | 
					 | 
				
			||||||
  margin: 0;
 | 
					 | 
				
			||||||
  padding: 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
/*# sourceMappingURL=logs.css.map */
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
{"version":3,"sources":["logs.less"],"names":[],"mappings":"AAAA,GAAG;EACF,SAAA;EACA,UAAA","file":"logs.css"}
 | 
					 | 
				
			||||||
@@ -1,51 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "node_menu"}
 | 
					 | 
				
			||||||
{$template "/datepicker"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<form method="get" action="/ns/clusters/cluster/node/logs" class="ui form" autocomplete="off">
 | 
					 | 
				
			||||||
    <input type="hidden" name="clusterId" :value="clusterId"/>
 | 
					 | 
				
			||||||
    <input type="hidden" name="nodeId" :value="nodeId"/>
 | 
					 | 
				
			||||||
    <div class="ui fields inline">
 | 
					 | 
				
			||||||
        <div class="ui field">
 | 
					 | 
				
			||||||
            <input type="text" name="dayFrom" placeholder="开始日期" v-model="dayFrom" value="" style="width:8em" id="day-from-picker"/>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="ui field">
 | 
					 | 
				
			||||||
            <input type="text" name="dayTo" placeholder="结束日期" v-model="dayTo" value="" style="width:8em" id="day-to-picker"/>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="ui field">
 | 
					 | 
				
			||||||
            <select class="ui dropdown" name="level" v-model="level">
 | 
					 | 
				
			||||||
                <option value="">[级别]</option>
 | 
					 | 
				
			||||||
                <option value="error">错误</option>
 | 
					 | 
				
			||||||
                <option value="warning">警告</option>
 | 
					 | 
				
			||||||
                <option value="info">信息</option>
 | 
					 | 
				
			||||||
                <option value="success">成功</option>
 | 
					 | 
				
			||||||
            </select>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="ui field">
 | 
					 | 
				
			||||||
            <input type="text" name="keyword" style="width:10em" v-model="keyword" placeholder="关键词"/>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="ui field">
 | 
					 | 
				
			||||||
            <button type="submit" class="ui button">查询</button>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="ui field" v-if="dayFrom.length > 0 || dayTo.length > 0 || keyword.length > 0 || level.length > 0">
 | 
					 | 
				
			||||||
            <a :href="'/ns/clusters/cluster/node/logs?clusterId=' + clusterId + '&nodeId=' + nodeId">[清除条件]</a>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
</form>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<p class="comment" v-if="logs.length == 0">暂时还没有日志。</p>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<table class="ui table selectable" v-if="logs.length > 0">
 | 
					 | 
				
			||||||
    <thead>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
    </thead>
 | 
					 | 
				
			||||||
    <tr v-for="log in logs">
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <node-log-row :v-log="log" :v-keyword="keyword"></node-log-row>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div class="page" v-html="page"></div>
 | 
					 | 
				
			||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.$delay(function () {
 | 
					 | 
				
			||||||
		teaweb.datepicker("day-from-picker")
 | 
					 | 
				
			||||||
		teaweb.datepicker("day-to-picker")
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
pre.log-box {
 | 
					 | 
				
			||||||
	margin: 0;
 | 
					 | 
				
			||||||
	padding: 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,68 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{$template "node_menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<h3>修改节点</h3>
 | 
					 | 
				
			||||||
<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
 | 
					 | 
				
			||||||
    <input type="hidden" name="nodeId" :value="node.id"/>
 | 
					 | 
				
			||||||
    <input type="hidden" name="loginId" :value="loginId"/>
 | 
					 | 
				
			||||||
    <table class="ui table definition selectable">
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td class="title">节点名称 *</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <input type="text" name="name" maxlength="50" ref="focus" v-model="node.name"/>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>IP地址 *</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <node-ip-addresses-box role="ns" :v-ip-addresses="node.ipAddresses"></node-ip-addresses-box>
 | 
					 | 
				
			||||||
                <p class="comment">用于访问节点和域名解析等。</p>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>所属集群</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <select class="ui dropdown" name="clusterId" style="width:10em" v-model="clusterId">
 | 
					 | 
				
			||||||
                    <option v-for="cluster in clusters" :value="cluster.id">{{cluster.name}}</option>
 | 
					 | 
				
			||||||
                </select>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td colspan="2"><more-options-indicator></more-options-indicator></td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tbody v-show="moreOptionsVisible">
 | 
					 | 
				
			||||||
            <tr>
 | 
					 | 
				
			||||||
                <td>SSH主机地址</td>
 | 
					 | 
				
			||||||
                <td>
 | 
					 | 
				
			||||||
                    <input type="text" name="sshHost" maxlength="64" v-model="sshHost"/>
 | 
					 | 
				
			||||||
                    <p class="comment">比如192.168.1.100</p>
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            </tr>
 | 
					 | 
				
			||||||
            <tr>
 | 
					 | 
				
			||||||
                <td>SSH主机端口</td>
 | 
					 | 
				
			||||||
                <td>
 | 
					 | 
				
			||||||
                    <input type="text" name="sshPort" maxlength="5" v-model="sshPort"/>
 | 
					 | 
				
			||||||
                    <p class="comment">比如22。</p>
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            </tr>
 | 
					 | 
				
			||||||
            <tr>
 | 
					 | 
				
			||||||
                <td>SSH登录认证</td>
 | 
					 | 
				
			||||||
                <td>
 | 
					 | 
				
			||||||
                    <grant-selector :v-grant="grant" :v-ns-cluster-id="clusterId"></grant-selector>
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            </tr>
 | 
					 | 
				
			||||||
            <tr>
 | 
					 | 
				
			||||||
                <td>是否启用</td>
 | 
					 | 
				
			||||||
                <td>
 | 
					 | 
				
			||||||
                    <div class="ui checkbox">
 | 
					 | 
				
			||||||
                        <input type="checkbox" name="isOn" value="1" v-model="node.isOn"/>
 | 
					 | 
				
			||||||
                        <label></label>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                    <p class="comment">如果不启用此节点,此节点上的所有服务将不能访问。</p>
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            </tr>
 | 
					 | 
				
			||||||
        </tbody>
 | 
					 | 
				
			||||||
    </table>
 | 
					 | 
				
			||||||
    <submit-btn></submit-btn>
 | 
					 | 
				
			||||||
</form>
 | 
					 | 
				
			||||||
@@ -1,35 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.clusterId = 0;
 | 
					 | 
				
			||||||
	if (this.node.cluster != null && this.node.cluster.id > 0) {
 | 
					 | 
				
			||||||
		this.clusterId = this.node.cluster.id;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	this.success = NotifySuccess("保存成功", "/ns/clusters/cluster/node?clusterId=" + this.clusterId + "&nodeId=" + this.node.id);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// 认证相关
 | 
					 | 
				
			||||||
	this.grant = null
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	this.sshHost = ""
 | 
					 | 
				
			||||||
	this.sshPort = ""
 | 
					 | 
				
			||||||
	this.loginId = 0
 | 
					 | 
				
			||||||
	if (this.node.login != null) {
 | 
					 | 
				
			||||||
		this.loginId = this.node.login.id
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (this.node.login.params != null) {
 | 
					 | 
				
			||||||
			this.sshHost = this.node.login.params.host
 | 
					 | 
				
			||||||
			if (this.node.login.params.port > 0) {
 | 
					 | 
				
			||||||
				this.sshPort = this.node.login.params.port
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (this.node.login.grant != null && typeof this.node.login.grant.id != "undefined") {
 | 
					 | 
				
			||||||
			this.grant = {
 | 
					 | 
				
			||||||
				id: this.node.login.grant.id,
 | 
					 | 
				
			||||||
				name: this.node.login.grant.name,
 | 
					 | 
				
			||||||
				method: this.node.login.grant.method,
 | 
					 | 
				
			||||||
				methodName: this.node.login.grant.methodName,
 | 
					 | 
				
			||||||
				username: this.node.login.grant.username
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,11 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "/left_menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div class="right-box">
 | 
					 | 
				
			||||||
    <form class="ui form" data-tea-action="$" data-tea-success="success">
 | 
					 | 
				
			||||||
        <csrf-token></csrf-token>
 | 
					 | 
				
			||||||
        <input type="hidden" name="clusterId" :value="clusterId"/>
 | 
					 | 
				
			||||||
        <ns-access-log-ref-box :v-access-log-ref="accessLogRef" :v-is-parent="false"></ns-access-log-ref-box>
 | 
					 | 
				
			||||||
        <submit-btn></submit-btn>
 | 
					 | 
				
			||||||
    </form>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.success = NotifyReloadSuccess("保存成功")
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,27 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "/left_menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div class="right-box">
 | 
					 | 
				
			||||||
	<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
 | 
					 | 
				
			||||||
        <csrf-token></csrf-token>
 | 
					 | 
				
			||||||
		<input type="hidden" name="clusterId" :value="cluster.id"/>
 | 
					 | 
				
			||||||
		<table class="ui table selectable definition">
 | 
					 | 
				
			||||||
			<tr>
 | 
					 | 
				
			||||||
				<td class="title">集群名称 *</td>
 | 
					 | 
				
			||||||
				<td><input type="text" name="name" maxlength="50" ref="focus" v-model="cluster.name"/></td>
 | 
					 | 
				
			||||||
			</tr>
 | 
					 | 
				
			||||||
            <tr>
 | 
					 | 
				
			||||||
                <td colspan="2"><more-options-indicator></more-options-indicator></td>
 | 
					 | 
				
			||||||
            </tr>
 | 
					 | 
				
			||||||
            <tbody v-show="moreOptionsVisible">
 | 
					 | 
				
			||||||
                <tr>
 | 
					 | 
				
			||||||
                    <td>是否启用</td>
 | 
					 | 
				
			||||||
                    <td>
 | 
					 | 
				
			||||||
                        <checkbox name="isOn" value="1" v-model="cluster.isOn"></checkbox>
 | 
					 | 
				
			||||||
                    </td>
 | 
					 | 
				
			||||||
                </tr>
 | 
					 | 
				
			||||||
            </tbody>
 | 
					 | 
				
			||||||
		</table>
 | 
					 | 
				
			||||||
		<submit-btn></submit-btn>
 | 
					 | 
				
			||||||
	</form>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.success = NotifyReloadSuccess("保存成功")
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,12 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "/left_menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div class="right-box">
 | 
					 | 
				
			||||||
    <form class="ui form" data-tea-action="$" data-tea-success="success">
 | 
					 | 
				
			||||||
        <csrf-token></csrf-token>
 | 
					 | 
				
			||||||
        <input type="hidden" name="clusterId" :value="clusterId"/>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <ns-recursion-config-box :v-recursion-config="config"></ns-recursion-config-box>
 | 
					 | 
				
			||||||
        <submit-btn></submit-btn>
 | 
					 | 
				
			||||||
    </form>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.success = NotifyReloadSuccess("保存成功")
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,31 +0,0 @@
 | 
				
			|||||||
{$layout "layout_popup"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<h3>修改节点"{{node.name}}"的SSH登录信息</h3>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
 | 
					 | 
				
			||||||
	<input type="hidden" name="nodeId" :value="node.id"/>
 | 
					 | 
				
			||||||
	<input type="hidden" name="loginId" :value="loginId"/>
 | 
					 | 
				
			||||||
	<table class="ui table definition">
 | 
					 | 
				
			||||||
		<tr>
 | 
					 | 
				
			||||||
			<td class="title">SSH主机地址 *</td>
 | 
					 | 
				
			||||||
			<td>
 | 
					 | 
				
			||||||
				<input type="text" name="sshHost" maxlength="64" v-model="params.host" ref="focus"/>
 | 
					 | 
				
			||||||
				<p class="comment">比如192.168.1.100</p>
 | 
					 | 
				
			||||||
			</td>
 | 
					 | 
				
			||||||
		</tr>
 | 
					 | 
				
			||||||
		<tr>
 | 
					 | 
				
			||||||
			<td>SSH主机端口 *</td>
 | 
					 | 
				
			||||||
			<td>
 | 
					 | 
				
			||||||
				<input type="text" name="sshPort" maxlength="5" v-model="params.port" style="width:6em"/>
 | 
					 | 
				
			||||||
				<p class="comment">比如22。</p>
 | 
					 | 
				
			||||||
			</td>
 | 
					 | 
				
			||||||
		</tr>
 | 
					 | 
				
			||||||
		<tr>
 | 
					 | 
				
			||||||
			<td>SSH登录认证 *</td>
 | 
					 | 
				
			||||||
			<td>
 | 
					 | 
				
			||||||
				<grant-selector :v-grant="grant" :v-ns-cluster-id="clusterId"></grant-selector>
 | 
					 | 
				
			||||||
			</td>
 | 
					 | 
				
			||||||
		</tr>
 | 
					 | 
				
			||||||
	</table>
 | 
					 | 
				
			||||||
	<submit-btn></submit-btn>
 | 
					 | 
				
			||||||
</form>
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	if (this.params.port <= 0) {
 | 
					 | 
				
			||||||
		this.params.port = 22
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<p class="ui message error">此功能暂未开放。</p>
 | 
					 | 
				
			||||||
@@ -1,20 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div class="ui margin"></div>
 | 
					 | 
				
			||||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
 | 
					 | 
				
			||||||
    <csrf-token></csrf-token>
 | 
					 | 
				
			||||||
    <table class="ui table definition selectable">
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td class="title">集群名称 *</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <input type="text" name="name" maxlength="50" ref="focus"/>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
    </table>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h3>访问日志设置</h3>
 | 
					 | 
				
			||||||
    <ns-access-log-ref-box :v-access-log-ref="accessLogRef"></ns-access-log-ref-box>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <submit-btn></submit-btn>
 | 
					 | 
				
			||||||
</form>
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.success = NotifySuccess("保存成功", "/ns/clusters")
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,39 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<p class="comment" v-if="clusters.length == 0">暂时还没有集群。</p>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<table class="ui table selectable celled" v-if="clusters.length > 0">
 | 
					 | 
				
			||||||
    <thead>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <th>集群名称</th>
 | 
					 | 
				
			||||||
            <th class="center width10">节点数</th>
 | 
					 | 
				
			||||||
            <th class="center width10">在线节点数</th>
 | 
					 | 
				
			||||||
            <th class="two wide">集群状态</th>
 | 
					 | 
				
			||||||
            <th class="two op">操作</th>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
    </thead>
 | 
					 | 
				
			||||||
    <tr v-for="cluster in clusters">
 | 
					 | 
				
			||||||
        <td><a :href="'/ns/clusters/cluster?clusterId=' + cluster.id">{{cluster.name}}</a></td>
 | 
					 | 
				
			||||||
        <td class="center">
 | 
					 | 
				
			||||||
            <a :href="'/ns/clusters/cluster?clusterId=' + cluster.id" v-if="cluster.countAllNodes > 0"><span :class="{red:cluster.countAllNodes > cluster.countActiveNodes}">{{cluster.countAllNodes}}</span></a>
 | 
					 | 
				
			||||||
            <span class="disabled" v-else="">-</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <div v-if="cluster.countUpgradeNodes > 0" style="margin-top:0.5em">
 | 
					 | 
				
			||||||
                <a :href="'/ns/clusters/cluster/upgradeRemote?clusterId=' + cluster.id" title="点击进入远程升级页面"><span class="red">有节点需要升级</span></a>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
        <td class="center">
 | 
					 | 
				
			||||||
            <a :href="'/ns/clusters/cluster?clusterId=' + cluster.id + '&activeState=1'" v-if="cluster.countActiveNodes > 0"><span class="green">{{cluster.countActiveNodes}}</span></a>
 | 
					 | 
				
			||||||
            <span class="disabled" v-else>-</span>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <label-on :v-is-on="cluster.isOn"></label-on>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <a :href="'/ns/clusters/cluster?clusterId=' + cluster.id">详情</a>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div class="page" v-html="page"></div>
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
pre.log-box {
 | 
					 | 
				
			||||||
  margin: 0;
 | 
					 | 
				
			||||||
  padding: 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
/*# sourceMappingURL=index.css.map */
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
{"version":3,"sources":["index.less"],"names":[],"mappings":"AAAA,GAAG;EACF,SAAA;EACA,UAAA","file":"index.css"}
 | 
					 | 
				
			||||||
@@ -1,55 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "/datepicker"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div class="margin"></div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<form method="get" action="/ns/clusters/logs" class="ui form" autocomplete="off">
 | 
					 | 
				
			||||||
    <div class="ui fields inline">
 | 
					 | 
				
			||||||
        <div class="ui field">
 | 
					 | 
				
			||||||
            <input type="text" name="dayFrom" placeholder="开始日期" v-model="dayFrom" value="" style="width:8em" id="day-from-picker"/>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="ui field">
 | 
					 | 
				
			||||||
            <input type="text" name="dayTo" placeholder="结束日期" v-model="dayTo" value="" style="width:8em" id="day-to-picker"/>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="ui field">
 | 
					 | 
				
			||||||
            <select class="ui dropdown" name="level" v-model="level">
 | 
					 | 
				
			||||||
                <option value="">[级别]</option>
 | 
					 | 
				
			||||||
                <option value="error">错误</option>
 | 
					 | 
				
			||||||
                <option value="warning">警告</option>
 | 
					 | 
				
			||||||
                <option value="info">信息</option>
 | 
					 | 
				
			||||||
                <option value="success">成功</option>
 | 
					 | 
				
			||||||
            </select>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="ui field">
 | 
					 | 
				
			||||||
            <input type="text" name="keyword" style="width:10em" v-model="keyword" placeholder="关键词"/>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="ui field">
 | 
					 | 
				
			||||||
            <button type="submit" class="ui button">查询</button>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="ui field" v-if="dayFrom.length > 0 || dayTo.length > 0 || keyword.length > 0 || level.length > 0">
 | 
					 | 
				
			||||||
            <a href="/ns/clusters/logs">[清除条件]</a>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
</form>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<p class="comment" v-if="logs.length == 0">暂时还没有日志。</p>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<table class="ui table selectable celled" v-if="logs.length > 0">
 | 
					 | 
				
			||||||
    <thead>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <th>集群</th>
 | 
					 | 
				
			||||||
            <th>节点</th>
 | 
					 | 
				
			||||||
            <th>信息</th>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
    </thead>
 | 
					 | 
				
			||||||
    <tr v-for="log in logs">
 | 
					 | 
				
			||||||
        <td nowrap=""><link-icon :href="'/ns/clusters/cluster?clusterId=' + log.node.cluster.id">{{log.node.cluster.name}}</link-icon></td>
 | 
					 | 
				
			||||||
        <td nowrap=""><link-icon :href="'/ns/clusters/cluster/node?clusterId=' + log.node.cluster.id + '&nodeId=' + log.node.id">{{log.node.name}}</link-icon></td>
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <node-log-row :v-log="log" :v-keyword="keyword"></node-log-row>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div class="page" v-html="page"></div>
 | 
					 | 
				
			||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.$delay(function () {
 | 
					 | 
				
			||||||
		teaweb.datepicker("day-from-picker")
 | 
					 | 
				
			||||||
		teaweb.datepicker("day-to-picker")
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
pre.log-box {
 | 
					 | 
				
			||||||
	margin: 0;
 | 
					 | 
				
			||||||
	padding: 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,9 +0,0 @@
 | 
				
			|||||||
<first-menu>
 | 
					 | 
				
			||||||
    <menu-item href="/ns/domains">所有域名</menu-item>
 | 
					 | 
				
			||||||
    <span class="item disabled">|</span>
 | 
					 | 
				
			||||||
    <menu-item :href="'/ns/domains/domain?domainId=' + domain.id" code="index">详情<span class="grey small">({{domain.name}})</span></menu-item>
 | 
					 | 
				
			||||||
    <menu-item :href="'/ns/domains/records?domainId=' + domain.id" code="record">记录({{domain.countRecords}})</menu-item>
 | 
					 | 
				
			||||||
    <menu-item :href="'/ns/domains/keys?domainId=' + domain.id" code="key">密钥({{domain.countKeys}})</menu-item>
 | 
					 | 
				
			||||||
    <menu-item :href="'/ns/domains/tsig?domainId=' + domain.id" code="tsig">TSIG</menu-item>
 | 
					 | 
				
			||||||
    <menu-item :href="'/ns/domains/update?domainId=' + domain.id" code="update">修改</menu-item>
 | 
					 | 
				
			||||||
</first-menu>
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
<first-menu>
 | 
					 | 
				
			||||||
    <menu-item href="/ns/domains" code="index">域名列表</menu-item>
 | 
					 | 
				
			||||||
    <menu-item href="/ns/domains/create" code="create">添加域名</menu-item>
 | 
					 | 
				
			||||||
</first-menu>
 | 
					 | 
				
			||||||
<div class="margin"></div>
 | 
					 | 
				
			||||||
@@ -1,37 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div v-if="countClusters == 0">
 | 
					 | 
				
			||||||
    <not-found-box>
 | 
					 | 
				
			||||||
        暂时还没有集群,请先 <a href="/ns/clusters/create">创建集群</a>。
 | 
					 | 
				
			||||||
    </not-found-box>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div v-show="countClusters > 0">
 | 
					 | 
				
			||||||
    <form class="ui form" data-tea-action="$" data-tea-success="success">
 | 
					 | 
				
			||||||
        <csrf-token></csrf-token>
 | 
					 | 
				
			||||||
        <table class="ui table definition selectable">
 | 
					 | 
				
			||||||
            <tr>
 | 
					 | 
				
			||||||
                <td>域名 *</td>
 | 
					 | 
				
			||||||
                <td>
 | 
					 | 
				
			||||||
                    <input type="text" name="name" maxlength="255" ref="focus"/>
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            </tr>
 | 
					 | 
				
			||||||
            <tr>
 | 
					 | 
				
			||||||
                <td class="title">所属集群 *</td>
 | 
					 | 
				
			||||||
                <td>
 | 
					 | 
				
			||||||
                    <ns-cluster-selector></ns-cluster-selector>
 | 
					 | 
				
			||||||
                    <p class="comment">需要部署域名服务的集群。</p>
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            </tr>
 | 
					 | 
				
			||||||
            <tr>
 | 
					 | 
				
			||||||
                <td>所属用户</td>
 | 
					 | 
				
			||||||
                <td>
 | 
					 | 
				
			||||||
                    <ns-user-selector></ns-user-selector>
 | 
					 | 
				
			||||||
                    <p class="comment">当前域名所属的平台用户。</p>
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            </tr>
 | 
					 | 
				
			||||||
        </table>
 | 
					 | 
				
			||||||
        <submit-btn></submit-btn>
 | 
					 | 
				
			||||||
    </form>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.success = NotifySuccess("保存成功", "/ns/domains")
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,30 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "domain_menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<table class="ui table definition selectable">
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td class="title">域名</td>
 | 
					 | 
				
			||||||
        <td>{{domain.name}}</td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td>状态</td>
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <label-on :v-is-on="domain.isOn"></label-on>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td>所属集群</td>
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            {{domain.cluster.name}}<link-icon :href="'/ns/clusters/cluster?clusterId=' + domain.cluster.id"></link-icon>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        <td>所属用户</td>
 | 
					 | 
				
			||||||
        <td>
 | 
					 | 
				
			||||||
            <span v-if="domain.user != null">
 | 
					 | 
				
			||||||
                {{domain.user.fullname}} ({{domain.user.username}})
 | 
					 | 
				
			||||||
            </span>
 | 
					 | 
				
			||||||
            <span v-else class="disabled">-</span>
 | 
					 | 
				
			||||||
        </td>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
@@ -1,65 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div v-if="countClusters == 0">
 | 
					 | 
				
			||||||
    <not-found-box>
 | 
					 | 
				
			||||||
        暂时还没有集群,请先 <a href="/ns/clusters/create">创建集群</a>。
 | 
					 | 
				
			||||||
    </not-found-box>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div v-if="countClusters > 0">
 | 
					 | 
				
			||||||
    <form class="ui form" method="get" action="/ns/domains">
 | 
					 | 
				
			||||||
        <div class="ui fields inline">
 | 
					 | 
				
			||||||
            <div class="ui field">
 | 
					 | 
				
			||||||
                <ns-cluster-selector :v-cluster-id="clusterId"></ns-cluster-selector>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            <div class="ui field">
 | 
					 | 
				
			||||||
                <ns-user-selector :v-user-id="userId"></ns-user-selector>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            <div class="ui field">
 | 
					 | 
				
			||||||
                <input type="text" name="keyword" v-model="keyword" placeholder="域名..."/>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            <div class="ui field">
 | 
					 | 
				
			||||||
                <button class="ui button" type="submit">搜索</button>
 | 
					 | 
				
			||||||
                 
 | 
					 | 
				
			||||||
                <a :href="Tea.url('.')" v-if="clusterId > 0 || userId > 0 || keyword.length > 0">[清除条件]</a>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
    </form>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <div v-if="domains.length == 0">
 | 
					 | 
				
			||||||
        <div class="margin"></div>
 | 
					 | 
				
			||||||
        <p class="comment">暂时还没有域名。</p>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <!-- 域名列表 -->
 | 
					 | 
				
			||||||
    <table class="ui table selectable celled" v-if="domains.length > 0">
 | 
					 | 
				
			||||||
        <thead>
 | 
					 | 
				
			||||||
            <tr>
 | 
					 | 
				
			||||||
                <th>域名</th>
 | 
					 | 
				
			||||||
                <th>集群</th>
 | 
					 | 
				
			||||||
                <th>用户</th>
 | 
					 | 
				
			||||||
                <th class="two wide">状态</th>
 | 
					 | 
				
			||||||
                <th class="two op">操作</th>
 | 
					 | 
				
			||||||
            </tr>
 | 
					 | 
				
			||||||
        </thead>
 | 
					 | 
				
			||||||
        <tr v-for="domain in domains">
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <a :href="'/ns/domains/domain?domainId=' + domain.id"><keyword :v-word="keyword">{{domain.name}}</keyword></a>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                {{domain.cluster.name}}<link-icon :href="'/ns/clusters/cluster?clusterId=' + domain.cluster.id"></link-icon>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <span v-if="domain.user != null">
 | 
					 | 
				
			||||||
                    {{domain.user.fullname}} ({{domain.user.username}})
 | 
					 | 
				
			||||||
                </span>
 | 
					 | 
				
			||||||
                <span v-else class="disabled">-</span>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
            <td><label-on :v-is-on="domain.isOn"></label-on></td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <a :href="'/ns/domains/domain?domainId=' + domain.id">详情</a>   <a href="" @click.prevent="deleteDomain(domain.id)">删除</a>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
    </table>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
@@ -1,14 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.deleteDomain = function (domainId) {
 | 
					 | 
				
			||||||
		let that = this
 | 
					 | 
				
			||||||
		teaweb.confirm("确定要删除此域名吗?", function () {
 | 
					 | 
				
			||||||
			that.$post("/ns/domains/delete")
 | 
					 | 
				
			||||||
				.params({
 | 
					 | 
				
			||||||
					domainId: domainId
 | 
					 | 
				
			||||||
				})
 | 
					 | 
				
			||||||
				.success(function () {
 | 
					 | 
				
			||||||
					teaweb.reload()
 | 
					 | 
				
			||||||
				})
 | 
					 | 
				
			||||||
		})
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,16 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "domain_menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
 | 
					 | 
				
			||||||
   <csrf-token></csrf-token>
 | 
					 | 
				
			||||||
    <input type="hidden" name="domainId" :value="domain.id"/>
 | 
					 | 
				
			||||||
    <table class="ui table definition selectable">
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td class="title">启用TSIG *</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <checkbox name="isOn" v-model="tsig.isOn"></checkbox>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
    </table>
 | 
					 | 
				
			||||||
    <submit-btn></submit-btn>
 | 
					 | 
				
			||||||
</form>
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.success = NotifyReloadSuccess("保存成功")
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,41 +0,0 @@
 | 
				
			|||||||
{$layout}
 | 
					 | 
				
			||||||
{$template "domain_menu"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
 | 
					 | 
				
			||||||
    <csrf-token></csrf-token>
 | 
					 | 
				
			||||||
    <input type="hidden" name="domainId" :value="domain.id"/>
 | 
					 | 
				
			||||||
    <table class="ui table definition selectable">
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>域名 *</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                {{domain.name}}
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td class="title">所属集群 *</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <ns-cluster-selector :v-cluster-id="domain.clusterId"></ns-cluster-selector>
 | 
					 | 
				
			||||||
                <p class="comment">需要部署域名服务的集群。</p>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td>所属用户</td>
 | 
					 | 
				
			||||||
            <td>
 | 
					 | 
				
			||||||
                <ns-user-selector :v-user-id="domain.userId"></ns-user-selector>
 | 
					 | 
				
			||||||
                <p class="comment">当前域名所属的平台用户。</p>
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            <td colspan="2"><more-options-indicator></more-options-indicator></td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
        <tbody v-show="moreOptionsVisible">
 | 
					 | 
				
			||||||
            <tr>
 | 
					 | 
				
			||||||
                <td>是否启用</td>
 | 
					 | 
				
			||||||
                <td>
 | 
					 | 
				
			||||||
                    <checkbox name="isOn" value="1" v-model="domain.isOn"></checkbox>
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            </tr>
 | 
					 | 
				
			||||||
        </tbody>
 | 
					 | 
				
			||||||
    </table>
 | 
					 | 
				
			||||||
    <submit-btn></submit-btn>
 | 
					 | 
				
			||||||
</form>
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
Tea.context(function () {
 | 
					 | 
				
			||||||
	this.success = NotifySuccess("保存成功", "/ns/domains/domain?domainId=" + this.domain.id)
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@@ -1,9 +0,0 @@
 | 
				
			|||||||
.ui.message .icon {
 | 
					 | 
				
			||||||
  position: absolute;
 | 
					 | 
				
			||||||
  right: 1em;
 | 
					 | 
				
			||||||
  top: 1.8em;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.chart-box {
 | 
					 | 
				
			||||||
  height: 14em;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
/*# sourceMappingURL=index_plus.css.map */
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
{"version":3,"sources":["index_plus.less"],"names":[],"mappings":"AAAA,GAAG,QACF;EACC,kBAAA;EACA,UAAA;EACA,UAAA;;AAIF;EACC,YAAA","file":"index_plus.css"}
 | 
					 | 
				
			||||||
@@ -1,11 +0,0 @@
 | 
				
			|||||||
.ui.message {
 | 
					 | 
				
			||||||
	.icon {
 | 
					 | 
				
			||||||
		position: absolute;
 | 
					 | 
				
			||||||
		right: 1em;
 | 
					 | 
				
			||||||
		top: 1.8em;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.chart-box {
 | 
					 | 
				
			||||||
	height: 14em;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user