Skip to content

Commit 4edec8b

Browse files
committed
提交components.js
1 parent 797abbd commit 4edec8b

File tree

2 files changed

+129
-56
lines changed

2 files changed

+129
-56
lines changed

web/public/js/components.js

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ Vue.component("traffic-map-box",{props:["v-stats","v-is-attack"],mounted:functio
353353
@change="change"
354354
ref="comboBox">
355355
</combo-box>
356-
</div>`}),Vue.component("ns-routes-selector",{props:["v-routes","name"],mounted:function(){let t=this;Tea.action("/ns/routes/options").post().success(function(e){t.routes=e.data.routes})},data:function(){let e=this.vRoutes,t=(null==e&&(e=[]),this.name);return{routeCode:"default",inputName:t="string"==typeof t&&0!=t.length?t:"routeCodes",routes:[],isAdding:!1,routeType:"default",selectedRoutes:e}},watch:{routeType:function(t){this.routeCode="";let i=this;this.routes.forEach(function(e){e.type==t&&0==i.routeCode.length&&(i.routeCode=e.code)})}},methods:{add:function(){this.isAdding=!0,this.routeType="default",this.routeCode="default",this.$emit("add")},cancel:function(){this.isAdding=!1,this.$emit("cancel")},confirm:function(){if(0!=this.routeCode.length){let t=this;this.routes.forEach(function(e){e.code==t.routeCode&&t.selectedRoutes.push(e)}),this.$emit("change",this.selectedRoutes),this.cancel()}},remove:function(e){this.selectedRoutes.$remove(e),this.$emit("change",this.selectedRoutes)}},template:`<div>
356+
</div>`}),Vue.component("ns-routes-selector",{props:["v-routes","name"],mounted:function(){let s=this;Tea.action("/ns/routes/options").post().success(function(e){s.routes=e.data.routes;let t={};if(null!=e.data.provinces&&0<e.data.provinces.length)for(const n of e.data.provinces){var i=n.countryCode;void 0===t[i]&&(t[i]=[]),t[i].push({name:n.name,code:n.code})}s.provinces=t})},data:function(){let e=this.vRoutes,t=(null==e&&(e=[]),this.name);return{routeCode:"default",inputName:t="string"==typeof t&&0!=t.length?t:"routeCodes",routes:[],provinces:{},provinceRouteCode:"",isAdding:!1,routeType:"default",selectedRoutes:e}},watch:{routeType:function(t){this.routeCode="";let i=this;this.routes.forEach(function(e){e.type==t&&0==i.routeCode.length&&(i.routeCode=e.code)})}},methods:{add:function(){this.isAdding=!0,this.routeType="default",this.routeCode="default",this.provinceRouteCode="",this.$emit("add")},cancel:function(){this.isAdding=!1,this.$emit("cancel")},confirm:function(){if(0!=this.routeCode.length){let e=null;for(const t of this.routes)if(t.code==this.routeCode){e=t;break}if(null!=e){if(0<this.provinceRouteCode.length&&null!=this.provinces[this.routeCode])for(const i of this.provinces[this.routeCode])if(i.code==this.provinceRouteCode){e={name:e.name+"-"+i.name,code:i.code};break}this.selectedRoutes.push(e)}this.$emit("change",this.selectedRoutes),this.cancel()}},remove:function(e){this.selectedRoutes.$remove(e),this.$emit("change",this.selectedRoutes)}},template:`<div>
357357
<div v-show="selectedRoutes.length > 0">
358358
<div class="ui label basic text small" v-for="(route, index) in selectedRoutes" style="margin-bottom: 0.3em">
359359
<input type="hidden" :name="inputName" :value="route.code"/>
@@ -362,31 +362,44 @@ Vue.component("traffic-map-box",{props:["v-stats","v-is-attack"],mounted:functio
362362
<div class="ui divider"></div>
363363
</div>
364364
<div v-if="isAdding" style="margin-bottom: 1em">
365-
<div class="ui fields inline">
366-
<div class="ui field">
367-
<select class="ui dropdown" v-model="routeType">
368-
<option value="default">[默认线路]</option>
369-
<option value="user">自定义线路</option>
370-
<option value="isp">运营商</option>
371-
<option value="china">中国省市</option>
372-
<option value="world">全球国家地区</option>
373-
<option value="agent">搜索引擎</option>
374-
</select>
375-
</div>
376-
377-
<div class="ui field">
378-
<select class="ui dropdown" v-model="routeCode" style="width: 10em">
379-
<option v-for="route in routes" :value="route.code" v-if="route.type == routeType">{{route.name}}</option>
380-
</select>
381-
</div>
382-
383-
<div class="ui field">
384-
<button type="button" class="ui button tiny" @click.prevent="confirm">确定</button>
385-
&nbsp; <a href="" title="取消" @click.prevent="cancel"><i class="icon remove small"></i></a>
386-
</div>
387-
</div>
365+
<table class="ui table">
366+
<tr>
367+
<td class="title">选择类型 *</td>
368+
<td>
369+
<select class="ui dropdown auto-width" v-model="routeType">
370+
<option value="default">[默认线路]</option>
371+
<option value="user">自定义线路</option>
372+
<option value="isp">运营商</option>
373+
<option value="china">中国省市</option>
374+
<option value="world">全球国家地区</option>
375+
<option value="agent">搜索引擎</option>
376+
</select>
377+
</td>
378+
</tr>
379+
<tr>
380+
<td>选择线路 *</td>
381+
<td>
382+
<select class="ui dropdown auto-width" v-model="routeCode">
383+
<option v-for="route in routes" :value="route.code" v-if="route.type == routeType">{{route.name}}</option>
384+
</select>
385+
</td>
386+
</tr>
387+
<tr v-if="routeCode.length > 0 && provinces[routeCode] != null">
388+
<td>选择省/州</td>
389+
<td>
390+
<select class="ui dropdown auto-width" v-model="provinceRouteCode">
391+
<option value="">[全域]</option>
392+
<option v-for="province in provinces[routeCode]" :value="province.code">{{province.name}}</option>
393+
</select>
394+
</td>
395+
</tr>
396+
</table>
397+
<div>
398+
<button type="button" class="ui button tiny" @click.prevent="confirm">确定</button>
399+
&nbsp; <a href="" title="取消" @click.prevent="cancel">取消</a>
400+
</div>
388401
</div>
389-
<button class="ui button tiny" type="button" @click.prevent="add">+</button>
402+
<button class="ui button tiny" type="button" @click.prevent="add" v-if="!isAdding">+</button>
390403
</div>`}),Vue.component("ns-recursion-config-box",{props:["v-recursion-config"],data:function(){let e=this.vRecursionConfig;return null==(e=null==e?{isOn:!1,hosts:[],allowDomains:[],denyDomains:[],useLocalHosts:!1}:e).hosts&&(e.hosts=[]),null==e.allowDomains&&(e.allowDomains=[]),null==e.denyDomains&&(e.denyDomains=[]),{config:e,hostIsAdding:!1,host:"",updatingHost:null}},methods:{changeHosts:function(e){this.config.hosts=e},changeAllowDomains:function(e){this.config.allowDomains=e},changeDenyDomains:function(e){this.config.denyDomains=e},removeHost:function(e){this.config.hosts.$remove(e)},addHost:function(){var t;this.updatingHost=null,this.host="",this.hostIsAdding=!this.hostIsAdding,this.hostIsAdding&&(t=this,setTimeout(function(){let e=t.$refs.hostRef;null!=e&&e.focus()},200))},updateHost:function(e){var t;this.updatingHost=e,this.host=e.host,this.hostIsAdding=!this.hostIsAdding,this.hostIsAdding&&(t=this,setTimeout(function(){let e=t.$refs.hostRef;null!=e&&e.focus()},200))},confirmHost:function(){0==this.host.length?teaweb.warn("请输入DNS地址"):(this.hostIsAdding=!1,null==this.updatingHost?this.config.hosts.push({host:this.host}):this.updatingHost.host=this.host)},cancelHost:function(){this.hostIsAdding=!1}},template:`<div>
391404
<input type="hidden" name="recursionJSON" :value="JSON.stringify(config)"/>
392405
<table class="ui table definition selectable">
@@ -6555,7 +6568,7 @@ example2.com
65556568
</div>
65566569
</div>`}),Vue.component("digit-input",{props:["value","maxlength","size","min","max","required","placeholder"],mounted:function(){let e=this;setTimeout(function(){e.check()})},data:function(){let e=this.maxlength,t=(null==e&&(e=20),this.size);return null==t&&(t=6),{realValue:this.value,realMaxLength:e,realSize:t,isValid:!0}},watch:{realValue:function(e){this.notifyChange()}},methods:{notifyChange:function(){let e=parseInt(this.realValue.toString(),10);isNaN(e)&&(e=0),this.check(),this.$emit("input",e)},check:function(){var e;null!=this.realValue&&(e=this.realValue.toString(),/^\d+$/.test(e)?(e=parseInt(e,10),isNaN(e)?this.isValid=!1:this.required?this.isValid=(null==this.min||this.min<=e)&&(null==this.max||this.max>=e):this.isValid=0==e||(null==this.min||this.min<=e)&&(null==this.max||this.max>=e)):this.isValid=!1)}},template:'<input type="text" v-model="realValue" :maxlength="realMaxLength" :size="realSize" :class="{error: !this.isValid}" :placeholder="placeholder" autocomplete="off"/>'}),Vue.component("keyword",{props:["v-word"],data:function(){let e=this.vWord;e=null==e?"":(e=(e=(e=(e=(e=(e=(e=(e=(e=e.replace(/\)/g,"\\)")).replace(/\(/g,"\\(")).replace(/\+/g,"\\+")).replace(/\^/g,"\\^")).replace(/\$/g,"\\$")).replace(/\?/g,"\\?")).replace(/\*/g,"\\*")).replace(/\[/g,"\\[")).replace(/{/g,"\\{")).replace(/\./g,"\\.");let t=this.$slots.default[0].text;if(0<e.length){let i=this,n=[],s=0;t=t.replaceAll(new RegExp("("+e+")","ig"),function(e){s++;var e='<span style="border: 1px #ccc dashed; color: #ef4d58">'+i.encodeHTML(e)+"</span>",t="$TMP__KEY__"+s.toString()+"$";return n.push([t,e]),t}),t=this.encodeHTML(t),n.forEach(function(e){t=t.replace(e[0],e[1])})}else t=this.encodeHTML(t);return{word:e,text:t}},methods:{encodeHTML:function(e){return e=(e=(e=(e=e.replace(/&/g,"&amp;")).replace(/</g,"&lt;")).replace(/>/g,"&gt;")).replace(/"/g,"&quot;")}},template:'<span><span style="display: none"><slot></slot></span><span v-html="text"></span></span>'}),Vue.component("bits-var",{props:["v-bits"],data:function(){let e=this.vBits;return"number"!=typeof e&&(e=0),{format:teaweb.splitFormat(teaweb.formatBits(e))}},template:`<var class="normal">
65576570
<span>{{format[0]}}</span>{{format[1]}}
6558-
</var>`}),Vue.component("chart-columns-grid",{props:[],mounted:function(){this.columns=this.calculateColumns();let e=this;window.addEventListener("resize",function(){e.columns=e.calculateColumns()})},updated:function(){var e=this.$el.getElementsByClassName("column").length;e!=this.totalElements&&(this.totalElements=e,this.calculateColumns())},data:function(){return{columns:"four",totalElements:0}},methods:{calculateColumns:function(){var e=window.innerWidth;let i=Math.floor(e/500);0==i&&(i=1);var n=this.$el.getElementsByClassName("column");if(0==n.length)return"one";e=n.length;i>e&&(i=e);for(let t=0;t<n.length;t++){let e=n[t];e.className=e.className.replace("with-border",""),t%i!=i-1&&t!=n.length-1||(e.className+=" with-border")}switch(i){case 1:return"one";case 2:return"two";case 3:return"three";case 4:return"four";case 5:return"five";case 6:return"six";case 7:return"seven";case 8:return"eight";case 9:return"nine";default:return"ten"}}},template:`<div :class="'ui ' + columns + ' columns grid chart-grid'">
6571+
</var>`}),Vue.component("mask-warning",{template:'<span class="red">为了安全起见,此项数据保存后将不允许在界面查看完整明文,为避免忘记,请自行记录原始数据。</span>'}),Vue.component("chart-columns-grid",{props:[],mounted:function(){this.columns=this.calculateColumns();let e=this;window.addEventListener("resize",function(){e.columns=e.calculateColumns()})},updated:function(){var e=this.$el.getElementsByClassName("column").length;e!=this.totalElements&&(this.totalElements=e,this.calculateColumns())},data:function(){return{columns:"four",totalElements:0}},methods:{calculateColumns:function(){var e=window.innerWidth;let i=Math.floor(e/500);0==i&&(i=1);var n=this.$el.getElementsByClassName("column");if(0==n.length)return"one";e=n.length;i>e&&(i=e);for(let t=0;t<n.length;t++){let e=n[t];e.className=e.className.replace("with-border",""),t%i!=i-1&&t!=n.length-1||(e.className+=" with-border")}switch(i){case 1:return"one";case 2:return"two";case 3:return"three";case 4:return"four";case 5:return"five";case 6:return"six";case 7:return"seven";case 8:return"eight";case 9:return"nine";default:return"ten"}}},template:`<div :class="'ui ' + columns + ' columns grid chart-grid'">
65596572
<slot></slot>
65606573
</div>`}),Vue.component("bytes-var",{props:["v-bytes"],data:function(){let e=this.vBytes;return"number"!=typeof e&&(e=0),{format:teaweb.splitFormat(teaweb.formatBytes(e))}},template:`<var class="normal">
65616574
<span>{{format[0]}}</span>{{format[1]}}
@@ -6685,7 +6698,7 @@ example2.com
66856698
<div>
66866699
<div v-for="(address, index) in ipAddresses" class="ui label tiny basic">
66876700
<span v-if="isIPv6(address.ip)" class="grey">[IPv6]</span> {{address.ip}}
6688-
<span class="small grey" v-if="address.name.length > 0">({{address.name}}<span v-if="!address.canAccess">,不可访问</span>)</span>
6701+
<span class="small grey" v-if="address.name.length > 0">(备注:{{address.name}}<span v-if="!address.canAccess">,不可访问</span>)</span>
66896702
<span class="small grey" v-if="address.name.length == 0 && !address.canAccess">(不可访问)</span>
66906703
<span class="small red" v-if="!address.isOn" title="未启用">[off]</span>
66916704
<span class="small red" v-if="!address.isUp" title="已下线">[down]</span>

web/public/js/components.src.js

Lines changed: 89 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,6 +1230,22 @@ Vue.component("ns-routes-selector", {
12301230
.post()
12311231
.success(function (resp) {
12321232
that.routes = resp.data.routes
1233+
1234+
// provinces
1235+
let provinces = {}
1236+
if (resp.data.provinces != null && resp.data.provinces.length > 0) {
1237+
for (const province of resp.data.provinces) {
1238+
let countryCode = province.countryCode
1239+
if (typeof provinces[countryCode] == "undefined") {
1240+
provinces[countryCode] = []
1241+
}
1242+
provinces[countryCode].push({
1243+
name: province.name,
1244+
code: province.code
1245+
})
1246+
}
1247+
}
1248+
that.provinces = provinces
12331249
})
12341250
},
12351251
data: function () {
@@ -1247,6 +1263,10 @@ Vue.component("ns-routes-selector", {
12471263
routeCode: "default",
12481264
inputName: inputName,
12491265
routes: [],
1266+
1267+
provinces: {}, // country code => [ province1, province2, ... ]
1268+
provinceRouteCode: "",
1269+
12501270
isAdding: false,
12511271
routeType: "default",
12521272
selectedRoutes: selectedRoutes,
@@ -1268,6 +1288,7 @@ Vue.component("ns-routes-selector", {
12681288
this.isAdding = true
12691289
this.routeType = "default"
12701290
this.routeCode = "default"
1291+
this.provinceRouteCode = ""
12711292
this.$emit("add")
12721293
},
12731294
cancel: function () {
@@ -1280,11 +1301,33 @@ Vue.component("ns-routes-selector", {
12801301
}
12811302

12821303
let that = this
1283-
this.routes.forEach(function (v) {
1284-
if (v.code == that.routeCode) {
1285-
that.selectedRoutes.push(v)
1304+
1305+
// route
1306+
let selectedRoute = null
1307+
for (const route of this.routes) {
1308+
if (route.code == this.routeCode) {
1309+
selectedRoute = route
1310+
break
12861311
}
1287-
})
1312+
}
1313+
1314+
if (selectedRoute != null) {
1315+
// province route
1316+
if (this.provinceRouteCode.length > 0 && this.provinces[this.routeCode] != null) {
1317+
for (const province of this.provinces[this.routeCode]) {
1318+
if (province.code == this.provinceRouteCode) {
1319+
selectedRoute = {
1320+
name: selectedRoute.name + "-" + province.name,
1321+
code: province.code
1322+
}
1323+
break
1324+
}
1325+
}
1326+
}
1327+
1328+
that.selectedRoutes.push(selectedRoute)
1329+
}
1330+
12881331
this.$emit("change", this.selectedRoutes)
12891332
this.cancel()
12901333
},
@@ -1303,31 +1346,44 @@ Vue.component("ns-routes-selector", {
13031346
<div class="ui divider"></div>
13041347
</div>
13051348
<div v-if="isAdding" style="margin-bottom: 1em">
1306-
<div class="ui fields inline">
1307-
<div class="ui field">
1308-
<select class="ui dropdown" v-model="routeType">
1309-
<option value="default">[默认线路]</option>
1310-
<option value="user">自定义线路</option>
1311-
<option value="isp">运营商</option>
1312-
<option value="china">中国省市</option>
1313-
<option value="world">全球国家地区</option>
1314-
<option value="agent">搜索引擎</option>
1315-
</select>
1316-
</div>
1317-
1318-
<div class="ui field">
1319-
<select class="ui dropdown" v-model="routeCode" style="width: 10em">
1320-
<option v-for="route in routes" :value="route.code" v-if="route.type == routeType">{{route.name}}</option>
1321-
</select>
1322-
</div>
1323-
1324-
<div class="ui field">
1325-
<button type="button" class="ui button tiny" @click.prevent="confirm">确定</button>
1326-
&nbsp; <a href="" title="取消" @click.prevent="cancel"><i class="icon remove small"></i></a>
1327-
</div>
1328-
</div>
1349+
<table class="ui table">
1350+
<tr>
1351+
<td class="title">选择类型 *</td>
1352+
<td>
1353+
<select class="ui dropdown auto-width" v-model="routeType">
1354+
<option value="default">[默认线路]</option>
1355+
<option value="user">自定义线路</option>
1356+
<option value="isp">运营商</option>
1357+
<option value="china">中国省市</option>
1358+
<option value="world">全球国家地区</option>
1359+
<option value="agent">搜索引擎</option>
1360+
</select>
1361+
</td>
1362+
</tr>
1363+
<tr>
1364+
<td>选择线路 *</td>
1365+
<td>
1366+
<select class="ui dropdown auto-width" v-model="routeCode">
1367+
<option v-for="route in routes" :value="route.code" v-if="route.type == routeType">{{route.name}}</option>
1368+
</select>
1369+
</td>
1370+
</tr>
1371+
<tr v-if="routeCode.length > 0 && provinces[routeCode] != null">
1372+
<td>选择省/州</td>
1373+
<td>
1374+
<select class="ui dropdown auto-width" v-model="provinceRouteCode">
1375+
<option value="">[全域]</option>
1376+
<option v-for="province in provinces[routeCode]" :value="province.code">{{province.name}}</option>
1377+
</select>
1378+
</td>
1379+
</tr>
1380+
</table>
1381+
<div>
1382+
<button type="button" class="ui button tiny" @click.prevent="confirm">确定</button>
1383+
&nbsp; <a href="" title="取消" @click.prevent="cancel">取消</a>
1384+
</div>
13291385
</div>
1330-
<button class="ui button tiny" type="button" @click.prevent="add">+</button>
1386+
<button class="ui button tiny" type="button" @click.prevent="add" v-if="!isAdding">+</button>
13311387
</div>`
13321388
})
13331389

@@ -19525,6 +19581,10 @@ Vue.component("bits-var", {
1952519581
</var>`
1952619582
})
1952719583

19584+
Vue.component("mask-warning", {
19585+
template: `<span class="red">为了安全起见,此项数据保存后将不允许在界面查看完整明文,为避免忘记,请自行记录原始数据。</span>`
19586+
})
19587+
1952819588
Vue.component("chart-columns-grid", {
1952919589
props: [],
1953019590
mounted: function () {
@@ -20525,7 +20585,7 @@ Vue.component("node-ip-addresses-box", {
2052520585
<div>
2052620586
<div v-for="(address, index) in ipAddresses" class="ui label tiny basic">
2052720587
<span v-if="isIPv6(address.ip)" class="grey">[IPv6]</span> {{address.ip}}
20528-
<span class="small grey" v-if="address.name.length > 0">({{address.name}}<span v-if="!address.canAccess">,不可访问</span>)</span>
20588+
<span class="small grey" v-if="address.name.length > 0">(备注:{{address.name}}<span v-if="!address.canAccess">,不可访问</span>)</span>
2052920589
<span class="small grey" v-if="address.name.length == 0 && !address.canAccess">(不可访问)</span>
2053020590
<span class="small red" v-if="!address.isOn" title="未启用">[off]</span>
2053120591
<span class="small red" v-if="!address.isUp" title="已下线">[down]</span>

0 commit comments

Comments
 (0)