Initial commit (code only without large binaries)

This commit is contained in:
robin
2026-02-15 18:58:44 +08:00
commit 35df75498f
9442 changed files with 1495866 additions and 0 deletions

View File

@@ -0,0 +1,4 @@
<first-menu>
<menu-item href="." code="index">区域</menu-item>
<menu-item href=".nodes" code="node">节点</menu-item>
</first-menu>

View File

@@ -0,0 +1,21 @@
{$layout "layout_popup"}
<h3>创建区域</h3>
<form class="ui form" method="post" data-tea-success="success" data-tea-action="$">
<csrf-token></csrf-token>
<table class="ui table definition selectable">
<tr>
<td class="title">区域名称 *</td>
<td>
<input type="text" name="name" maxlength="100" ref="focus"/>
</td>
</tr>
<tr>
<td>区域说明</td>
<td>
<textarea name="description" rows="3" maxlength="200"></textarea>
</td>
</tr>
</table>
<submit-btn></submit-btn>
</form>

View File

@@ -0,0 +1,41 @@
{$layout}
{$template "menu"}
<second-menu>
<menu-item @click.prevent="createRegion()">[创建区域]</menu-item>
</second-menu>
<p class="comment" v-if="regions.length == 0">暂时还没有区域。</p>
<table class="ui table selectable" v-if="regions.length > 0" id="sortable-table">
<thead>
<tr>
<th style="width:3em"></th>
<th class="width10">区域名称</th>
<th>区域说明</th>
<th class="width10 center">节点数</th>
<th class="width10">区域状态</th>
<th class="two op">操作</th>
</tr>
</thead>
<tbody v-for="region in regions" :v-id="region.id">
<tr>
<td style="text-align: center;"><i class="icon bars handle grey"></i> </td>
<td :class="{disabled: !region.isOn}">
<a href="" @click.prevent="updateRegion(region.id)">{{region.name}} &nbsp; <i class="icon expand small"></i></a>
</td>
<td>
<span v-if="region.description.length > 0">{{region.description}}</span>
<span v-else class="disabled">-</span>
</td>
<td class="center"><a :href="'/clusters/regions/nodes?regionId=' + region.id"><span :class="{disabled: region.countNodes == 0}">{{region.countNodes}}</span></a></td>
<td>
<label-on :v-is-on="region.isOn"></label-on>
</td>
<td>
<a href="" @click.prevent="updateRegion(region.id)">修改</a> &nbsp; <a href="" @click.prevent="deleteRegion(region.id)">删除</a>
</td>
</tr>
</tbody>
</table>
<p v-if="regions.length > 0" class="comment">可以拖动左侧的<i class="icon bars"></i>排序。</p>

View File

@@ -0,0 +1,45 @@
Tea.context(function () {
this.$delay(function () {
let that = this
sortTable(function (ids) {
that.$post(".sort")
.params({
regionIds: ids
})
.success(function () {
teaweb.successToast("排序保存成功")
})
})
})
this.createRegion = function () {
teaweb.popup(Tea.url(".createPopup"), {
callback: function () {
teaweb.success("保存成功", function () {
teaweb.reload()
})
}
})
}
this.updateRegion = function (regionId) {
teaweb.popup(Tea.url(".updatePopup?regionId=" + regionId), {
callback: function () {
teaweb.success("保存成功", function () {
teaweb.reload()
})
}
})
}
this.deleteRegion = function (regionId) {
let that = this
teaweb.confirm("确定要删除这个区域吗?", function () {
that.$post(".delete")
.params({
regionId: regionId
})
.refresh()
})
}
})

View File

@@ -0,0 +1,58 @@
{$layout}
{$template "menu"}
<form class="ui form" method="get" action="/clusters/regions/nodes" v-show="regions.length > 0">
<div class="margin"></div>
<div class="ui fields inline">
<div class="ui field">
<select class="ui dropdown" name="regionId" v-model="regionId">
<option value="0">[所有区域]</option>
<option v-for="region in regions" :value="region.id">{{region.name}}</option>
</select>
</div>
<div class="ui field">
<button type="submit" class="ui button">搜索</button>
&nbsp;
<a href="/clusters/regions/nodes" v-if="regionId > 0">[清除条件]</a>
</div>
</div>
</form>
<div v-if="nodes.length == 0">
<p class="comment"><span v-if="regionId > 0">当前区域下</span>暂时还没有节点。</p>
</div>
<div v-if="nodes.length > 0">
<div class="margin"></div>
<table class="ui table selectable celled">
<thead>
<tr>
<th>节点</th>
<th style="width: 30%">集群</th>
<th style="width: 30%">区域</th>
<th class="one op">操作</th>
</tr>
</thead>
<tr v-for="node in nodes" v-if="node.cluster != null">
<td>
<link-icon :href="'/clusters/cluster/node/detail?clusterId=' + node.cluster.id + '&nodeId=' + node.id">{{node.name}}</link-icon>
</td>
<td>
<span v-if="node.cluster != null">{{node.cluster.name}}</span>
<span v-else class="disabled">-</span>
</td>
<td>
<span v-if="node.region != null">{{node.region.name}}</span>
<span v-else class="disabled">尚未设置</span>
</td>
<td>
<a href="" v-if="node.region == null" @click.prevent="updateNodeRegion(node)">设置</a>
<a href="" v-if="node.region != null" @click.prevent="updateNodeRegion(node)">修改</a>
</td>
</tr>
</table>
<p class="comment" v-if="hasNodesWithoutRegion">已经将未设置区域的节点排在了表格最前面。</p>
<page-box></page-box>
</div>

View File

@@ -0,0 +1,12 @@
Tea.context(function () {
this.updateNodeRegion = function (node) {
let nodeId = node.id
let regionId = (node.region ? node.region.id : 0)
teaweb.popup(Tea.url(".updateNodeRegionPopup", { nodeId: nodeId, regionId: regionId }), {
callback: function () {
teaweb.successRefresh("保存成功")
}
})
}
})

View File

@@ -0,0 +1,23 @@
{$layout "layout_popup"}
<h3>选择所属区域</h3>
<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
<csrf-token></csrf-token>
<input type="hidden" name="regionId" :value="regionId"/>
<table class="ui table definition selectable">
<tr>
<td class="title">选择区域</td>
<td>
<div v-if="regions.length > 0">
<a href="" class="ui label small basic" v-for="region in regions" :class="{blue:region.id == regionId}" style="margin-bottom:0.5em" @click.prevent="selectRegion(region)">{{region.name}}</a>
<p class="comment">点击可已选中要使用的区域。</p>
</div>
<div v-else>
<p class="comment">暂时还没有可以使用的区域。</p>
</div>
</td>
</tr>
</table>
<submit-btn>确定</submit-btn>
</form>

View File

@@ -0,0 +1,8 @@
Tea.context(function () {
this.success = NotifyPopup
this.regionId = 0
this.selectRegion = function (region) {
this.regionId = region.id
}
})

View File

@@ -0,0 +1,28 @@
{$layout "layout_popup"}
<h3 v-if="region.id > 0">修改节点区域</h3>
<h3 v-if="region == null || region.id == 0">设置节点区域</h3>
<form class="ui form" data-tea-action="$" data-tea-success="success">
<csrf-token></csrf-token>
<input type="hidden" name="nodeId" :value="node.id"/>
<table class="ui table definition selectable">
<tr>
<td class="title">节点</td>
<td>{{node.name}}</td>
</tr>
<tr>
<td>区域 *</td>
<td>
<select class="ui dropdown auto-width" name="regionId" v-model="region.id">
<option value="0">[选择区域]</option>
<option v-for="r in regions" :value="r.id">{{r.name}}</option>
</select>
</td>
</tr>
</table>
<submit-btn></submit-btn>
</form>

View File

@@ -0,0 +1,33 @@
{$layout "layout_popup"}
<h3>修改区域</h3>
<form class="ui form" method="post" data-tea-success="success" data-tea-action="$">
<csrf-token></csrf-token>
<input type="hidden" name="regionId" :value="region.id"/>
<table class="ui table definition selectable">
<tr>
<td class="title">区域名称 *</td>
<td>
<input type="text" name="name" maxlength="100" ref="focus" v-model="region.name"/>
</td>
</tr>
<tr>
<td>区域说明</td>
<td>
<textarea name="description" rows="3" v-model="region.description" maxlength="200"></textarea>
</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" v-model="region.isOn"></checkbox>
</td>
</tr>
</tbody>
</table>
<submit-btn></submit-btn>
</form>