简化IP名单中创建IP操作/支持IP以CIDR方式显示
This commit is contained in:
@@ -140,6 +140,15 @@ Vue.component("datetime-input", {
|
||||
resultTimestamp: function () {
|
||||
return this.timestamp
|
||||
},
|
||||
nextYear: function () {
|
||||
let date = new Date()
|
||||
date.setFullYear(date.getFullYear()+1)
|
||||
this.day = date.getFullYear() + "-" + this.leadingZero(date.getMonth() + 1, 2) + "-" + this.leadingZero(date.getDate(), 2)
|
||||
this.hour = this.leadingZero(date.getHours(), 2)
|
||||
this.minute = this.leadingZero(date.getMinutes(), 2)
|
||||
this.second = this.leadingZero(date.getSeconds(), 2)
|
||||
this.change()
|
||||
},
|
||||
nextDays: function (days) {
|
||||
let date = new Date()
|
||||
date.setTime(date.getTime() + days * 86400 * 1000)
|
||||
@@ -171,6 +180,6 @@ Vue.component("datetime-input", {
|
||||
<div class="ui field">:</div>
|
||||
<div class="ui field" :class="{error: hasSecondError}"><input type="text" v-model="second" maxlength="2" style="width:4em" placeholder="秒" @input="change"/></div>
|
||||
</div>
|
||||
<p class="comment">常用时间:<a href="" @click.prevent="nextHours(1)"> 1小时 </a> <span class="disabled">|</span> <a href="" @click.prevent="nextDays(1)"> 1天 </a> <span class="disabled">|</span> <a href="" @click.prevent="nextDays(3)"> 3天 </a> <span class="disabled">|</span> <a href="" @click.prevent="nextDays(7)"> 1周 </a> <span class="disabled">|</span> <a href="" @click.prevent="nextDays(30)"> 30天 </a> </p>
|
||||
<p class="comment">常用时间:<a href="" @click.prevent="nextHours(1)"> 1小时 </a> <span class="disabled">|</span> <a href="" @click.prevent="nextDays(1)"> 1天 </a> <span class="disabled">|</span> <a href="" @click.prevent="nextDays(3)"> 3天 </a> <span class="disabled">|</span> <a href="" @click.prevent="nextDays(7)"> 1周 </a> <span class="disabled">|</span> <a href="" @click.prevent="nextDays(30)"> 30天 </a> <span class="disabled">|</span> <a href="" @click.prevent="nextYear()"> 1年 </a> </p>
|
||||
</div>`
|
||||
})
|
||||
@@ -2,13 +2,13 @@ Vue.component("ip-item-text", {
|
||||
props: ["v-item"],
|
||||
template: `<span>
|
||||
<span v-if="vItem.type == 'all'">*</span>
|
||||
<span v-if="vItem.type == 'ipv4' || vItem.type.length == 0">
|
||||
{{vItem.ipFrom}}
|
||||
<span v-if="vItem.ipTo.length > 0">- {{vItem.ipTo}}</span>
|
||||
</span>
|
||||
<span v-if="vItem.type == 'ipv6'">{{vItem.ipFrom}}
|
||||
<span v-if="vItem.ipTo.length > 0">- {{vItem.ipTo}}</span>
|
||||
</span>
|
||||
<span v-else>
|
||||
<span v-if="vItem.value != null && vItem.value.length > 0">{{vItem.value}}</span>
|
||||
<span v-else>
|
||||
{{vItem.ipFrom}}
|
||||
<span v-if="vItem.ipTo != null &&vItem.ipTo.length > 0">- {{vItem.ipTo}}</span>
|
||||
</span>
|
||||
</span>
|
||||
<span v-if="vItem.eventLevelName != null && vItem.eventLevelName.length > 0"> 级别:{{vItem.eventLevelName}}</span>
|
||||
</span>`
|
||||
})
|
||||
@@ -155,8 +155,12 @@ Vue.component("ip-list-table", {
|
||||
</td>
|
||||
<td>
|
||||
<span v-if="item.type != 'all'" :class="{green: item.list != null && item.list.type == 'white'}">
|
||||
<keyword :v-word="keyword">{{item.ipFrom}}</keyword> <span> <span class="small red" v-if="item.isRead != null && !item.isRead"> New </span> <a :href="'/servers/iplists?ip=' + item.ipFrom" v-if="vShowSearchButton" title="搜索此IP"><span><i class="icon search small" style="color: #ccc"></i></span></a></span>
|
||||
<span v-if="item.ipTo.length > 0"> - <keyword :v-word="keyword">{{item.ipTo}}</keyword></span></span>
|
||||
<span v-if="item.value != null && item.value.length > 0"><keyword :v-word="keyword">{{item.value}}</keyword></span>
|
||||
<span v-else>
|
||||
<keyword :v-word="keyword">{{item.ipFrom}}</keyword> <span> <span class="small red" v-if="item.isRead != null && !item.isRead"> New </span> <a :href="'/servers/iplists?ip=' + item.ipFrom" v-if="vShowSearchButton" title="搜索此IP"><span><i class="icon search small" style="color: #ccc"></i></span></a></span>
|
||||
<span v-if="item.ipTo.length > 0"> - <keyword :v-word="keyword">{{item.ipTo}}</keyword></span>
|
||||
</span>
|
||||
</span>
|
||||
<span v-else class="disabled">*</span>
|
||||
|
||||
<div v-if="item.region != null && item.region.length > 0">
|
||||
|
||||
@@ -22,38 +22,11 @@
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- IPv4 -->
|
||||
<tbody v-if="type == 'ipv4'">
|
||||
<tbody v-if="type != 'all'">
|
||||
<tr>
|
||||
<td>开始IP *</td>
|
||||
<td>IP或IP段 *</td>
|
||||
<td>
|
||||
<input type="text" name="ipFrom" maxlength="64" placeholder="x.x.x.x" ref="focus" v-model="item.ipFrom"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结束IP</td>
|
||||
<td>
|
||||
<input type="text" name="ipTo" maxlength="64" placeholder="x.x.x.x" v-model="item.ipTo"/>
|
||||
<p class="comment">只有表示IP段的时候才需要填写此项。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
|
||||
<!-- IPv6 -->
|
||||
<tbody v-if="type == 'ipv6'">
|
||||
<tr>
|
||||
<td>开始IP *</td>
|
||||
<td>
|
||||
<input type="text" name="ipFrom" maxlength="64" placeholder="x:x:x:x:x:x:x:x" ref="focus" v-model="item.ipFrom"/>
|
||||
<p class="comment">IPv6地址,比如 1406:3c00:0:2409:13:58:103:15</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结束IP</td>
|
||||
<td>
|
||||
<input type="text" name="ipTo" maxlength="64" placeholder="x:x:x:x:x:x:x:x" ref="focus" v-model="item.ipTo"/>
|
||||
<p class="comment">只有表示IP段的时候才需要填写此项。</p>
|
||||
<input type="text" name="value" maxlength="64" placeholder="x.x.x.x" ref="focus" v-model="item.value" style="width: 20em"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
@@ -21,37 +21,11 @@
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- IPv4 -->
|
||||
<tbody v-if="type == 'ipv4'">
|
||||
<tbody v-if="type != 'all'">
|
||||
<tr>
|
||||
<td>开始IP *</td>
|
||||
<td>IP或IP段 *</td>
|
||||
<td>
|
||||
<input type="text" name="ipFrom" maxlength="64" placeholder="x.x.x.x" ref="focus" v-model="item.ipFrom"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结束IP</td>
|
||||
<td>
|
||||
<input type="text" name="ipTo" maxlength="64" placeholder="x.x.x.x" v-model="item.ipTo"/>
|
||||
<p class="comment">只有表示IP段的时候才需要填写此项。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<!-- IPv6 -->
|
||||
<tbody v-if="type == 'ipv6'">
|
||||
<tr>
|
||||
<td>开始IP *</td>
|
||||
<td>
|
||||
<input type="text" name="ipFrom" maxlength="64" placeholder="x:x:x:x:x:x:x:x" ref="focus" v-model="item.ipFrom"/>
|
||||
<p class="comment">IPv6地址,比如 1406:3c00:0:2409:13:58:103:15</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结束IP</td>
|
||||
<td>
|
||||
<input type="text" name="ipTo" maxlength="64" placeholder="x:x:x:x:x:x:x:x" ref="focus" v-model="item.ipTo"/>
|
||||
<p class="comment">只有表示IP段的时候才需要填写此项。</p>
|
||||
<input type="text" name="value" maxlength="64" placeholder="x.x.x.x" ref="focus" v-model="item.value" style="width: 20em"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
@@ -11,12 +11,10 @@
|
||||
<td class="title">类型 *</td>
|
||||
<td>
|
||||
<select class="ui dropdown auto-width" name="type" v-model="type">
|
||||
<option value="ipv4">IPv4</option>
|
||||
<option value="ipv6">IPv6</option>
|
||||
<option value="ip">单IP或IP段</option>
|
||||
<option value="all">所有IP</option>
|
||||
</select>
|
||||
<p class="comment" v-if="type == 'ipv4'">单个IPv4或一个IPv4范围。</p>
|
||||
<p class="comment" v-if="type == 'ipv6'">单个IPv6或一个IPv6范围。</p>
|
||||
<p class="comment" v-if="type == 'ip'">单个IP或一个IP范围。</p>
|
||||
<p class="comment" v-if="type == 'all'">允许或禁用所有的IP。</p>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -30,60 +28,23 @@
|
||||
</tr>
|
||||
|
||||
<!-- 单个添加 -->
|
||||
<!-- IPv4 -->
|
||||
<tbody v-if="method == 'single' && type == 'ipv4'">
|
||||
<tbody v-if="method == 'single' && type == 'ip'">
|
||||
<tr>
|
||||
<td>开始IP *</td>
|
||||
<td>IP或IP段 *</td>
|
||||
<td>
|
||||
<input type="text" name="ipFrom" maxlength="64" placeholder="x.x.x.x" ref="focus" style="width: 10em"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结束IP</td>
|
||||
<td>
|
||||
<input type="text" name="ipTo" maxlength="64" placeholder="x.x.x.x" style="width: 10em"/>
|
||||
<p class="comment">只有表示IP段的时候才需要填写此项。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<!-- IPv6 -->
|
||||
<tbody v-if="method == 'single' && type == 'ipv6'">
|
||||
<tr>
|
||||
<td>开始IP *</td>
|
||||
<td>
|
||||
<input type="text" name="ipFrom" maxlength="64" placeholder="x:x:x:x:x:x:x:x" ref="focus" style="width: 20em"/>
|
||||
<p class="comment">IPv6地址,比如 1406:3c00:0:2409:13:58:103:15</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结束IP</td>
|
||||
<td>
|
||||
<input type="text" name="ipTo" maxlength="64" placeholder="x:x:x:x:x:x:x:x" ref="focus" style="width: 20em"/>
|
||||
<p class="comment">只有表示IP段的时候才需要填写此项。</p>
|
||||
<input type="text" name="value" maxlength="64" placeholder="x.x.x.x" ref="focus" style="width: 20em"/>
|
||||
<p class="comment">支持IPv4和IPv6;支持三种格式:单个IP(比如192.168.1.100)、IP范围(比如192.168.1.1-192.168.1.255)、CIDR(比如192.168.1.1/24)。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<!-- 批量添加 -->
|
||||
<!-- IPv4 -->
|
||||
<tbody v-if="method == 'batch' && type == 'ipv4'">
|
||||
<tbody v-if="method == 'batch' && type == 'ip'">
|
||||
<tr>
|
||||
<td>IP列表</td>
|
||||
<td>
|
||||
<textarea name="ipData" style="width: 20em" :placeholder="'x.x.x.x' + '\n'+ 'x.x.x.x/24' + '\n' + 'x.x.x.x-y.y.y.y'" rows="3"></textarea>
|
||||
<p class="comment">每行一个IP,支持三种格式:<code-label :class="'grey'">192.168.1.1</code-label>、<code-label :class="'grey'">192.168.1.1/24</code-label>、<code-label :class="'grey'">192.168.1.1-192.168.1.255</code-label>。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<!-- IPv6 -->
|
||||
<tbody v-if="method == 'batch' && type == 'ipv6'">
|
||||
<tr>
|
||||
<td>IP列表</td>
|
||||
<td>
|
||||
<textarea name="ipData" style="width: 20em" :placeholder="'x:x:x:x:x:x:x:x'" rows="3"></textarea>
|
||||
<p class="comment">每行一个IP。</p>
|
||||
<textarea name="ipData" style="width: 20em" :placeholder="'x.x.x.x' + '\n' + 'x.x.x.x/24' + '\n' + 'x.x.x.x-y.y.y.y'" rows="3"></textarea>
|
||||
<p class="comment">每行一个IP,支持三种格式:<code-label :class="'grey'">192.168.1.100</code-label>、<code-label :class="'grey'">192.168.1.1-192.168.1.255</code-label>、<code-label :class="'grey'">192.168.1.1/24</code-label>。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Tea.context(function () {
|
||||
this.type = "ipv4"
|
||||
this.type = "ip"
|
||||
this.eventLevel = (this.listType == "white") ? "debug" : "critical"
|
||||
this.method = "single"
|
||||
})
|
||||
@@ -7,7 +7,7 @@
|
||||
<table class="ui table definition selectable">
|
||||
<tr>
|
||||
<td class="title">说明</td>
|
||||
<td>导出所有的IP</td>
|
||||
<td>导出所有的IP,并以文件格式下载。注意v1.3.5版本及以后导出的数据不能在之前的版本中导入。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>格式</td>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<div v-if="result.isFound">
|
||||
<div v-if="result.item != null">
|
||||
<div v-if="result.isAllowed">
|
||||
<span class="green">在白名单中 <ip-item-text :v-item="result.item"></ip-item-text> <a href="" @click.prevent="updateItem(result.list.id, result.item.id)" title="查看和修改"><i class="icon pencil small"></i></a></span>
|
||||
<span class="green">在白名单中 <ip-item-text :v-item="result.item"></ip-item-text> <a href="" @click.prevent="updateItem(result.item.id)" title="查看和修改"><i class="icon pencil small"></i></a></span>
|
||||
</div>
|
||||
<div v-else>
|
||||
<span class="red">在黑名单中 <ip-item-text :v-item="result.item"></ip-item-text> <a href="" @click.prevent="updateItem(result.item.id)" title="查看和修改"><i class="icon pencil small"></i></a></span>
|
||||
|
||||
@@ -21,37 +21,11 @@
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- IPv4 -->
|
||||
<tbody v-if="type == 'ipv4'">
|
||||
<tbody v-if="type != 'all'">
|
||||
<tr>
|
||||
<td>开始IP *</td>
|
||||
<td>IP或IP段 *</td>
|
||||
<td>
|
||||
<input type="text" name="ipFrom" maxlength="64" placeholder="x.x.x.x" ref="focus" v-model="item.ipFrom"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结束IP</td>
|
||||
<td>
|
||||
<input type="text" name="ipTo" maxlength="64" placeholder="x.x.x.x" v-model="item.ipTo"/>
|
||||
<p class="comment">只有表示IP段的时候才需要填写此项。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<!-- IPv6 -->
|
||||
<tbody v-if="type == 'ipv6'">
|
||||
<tr>
|
||||
<td>开始IP *</td>
|
||||
<td>
|
||||
<input type="text" name="ipFrom" maxlength="64" placeholder="x:x:x:x:x:x:x:x" ref="focus" v-model="item.ipFrom"/>
|
||||
<p class="comment">IPv6地址,比如 1406:3c00:0:2409:13:58:103:15</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结束IP</td>
|
||||
<td>
|
||||
<input type="text" name="ipTo" maxlength="64" placeholder="x:x:x:x:x:x:x:x" ref="focus" v-model="item.ipTo"/>
|
||||
<p class="comment">只有表示IP段的时候才需要填写此项。</p>
|
||||
<input type="text" name="value" maxlength="64" placeholder="x.x.x.x" ref="focus" v-model="item.value" style="width: 20em"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
@@ -22,36 +22,11 @@
|
||||
</tr>
|
||||
|
||||
<!-- IPv4 -->
|
||||
<tbody v-if="type == 'ipv4'">
|
||||
<tbody v-if="type != 'all'">
|
||||
<tr>
|
||||
<td>开始IP *</td>
|
||||
<td>IP或IP段 *</td>
|
||||
<td>
|
||||
<input type="text" name="ipFrom" maxlength="64" placeholder="x.x.x.x" ref="focus" v-model="item.ipFrom"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结束IP</td>
|
||||
<td>
|
||||
<input type="text" name="ipTo" maxlength="64" placeholder="x.x.x.x" v-model="item.ipTo"/>
|
||||
<p class="comment">只有表示IP段的时候才需要填写此项。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<!-- IPv6 -->
|
||||
<tbody v-if="type == 'ipv6'">
|
||||
<tr>
|
||||
<td>开始IP *</td>
|
||||
<td>
|
||||
<input type="text" name="ipFrom" maxlength="64" placeholder="x:x:x:x:x:x:x:x" ref="focus" v-model="item.ipFrom"/>
|
||||
<p class="comment">IPv6地址,比如 1406:3c00:0:2409:13:58:103:15</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结束IP</td>
|
||||
<td>
|
||||
<input type="text" name="ipTo" maxlength="64" placeholder="x:x:x:x:x:x:x:x" ref="focus" v-model="item.ipTo"/>
|
||||
<p class="comment">只有表示IP段的时候才需要填写此项。</p>
|
||||
<input type="text" name="value" maxlength="64" placeholder="x.x.x.x" ref="focus" v-model="item.value" style="width: 20em"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
Reference in New Issue
Block a user