@@ -3866,7 +3866,7 @@ Vue.component("traffic-map-box",{props:["v-stats","v-is-attack"],mounted:functio
<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="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)"> 一周 </a> <span class="disabled">|</span> <a href="" @click.prevent="nextDays(30)"> 30天 </a> </p>
</div> ` } ) , Vue . component ( "label-on" , { props : [ "v-is-on" ] , template : '<div><span v-if="vIsOn" class="ui label tiny green basic">已启用</span><span v-if="!vIsOn" class="ui label tiny red basic">已停用</span></div>' } ) , Vue . component ( "code-label" , { methods : { click : function ( e ) { this . $emit ( "click" , e ) } } , template : '<span class="ui label basic tiny" style="padding: 3px;margin-left:2px;margin-right:2px" @click.prevent="click"><slot></slot></span>' } ) , Vue . component ( "code-label-plain" , { template : '<span class="ui label basic tiny" style="padding: 3px;margin-left:2px;margin-right:2px"><slot></slot></span>' } ) , Vue . component ( "tiny-label" , { template : '<span class="ui label tiny" style="margin-bottom: 0.5em"><slot></slot></span>' } ) , Vue . component ( "tiny-basic-label" , { template : '<span class="ui label tiny basic" style="margin-bottom: 0.5em"><slot></slot></span>' } ) , Vue . component ( "micro-basic-label" , { template : '<span class="ui label tiny basic" style="margin-bottom: 0.5em; font-size: 0.7em; padding: 4px"><slot></slot></span>' } ) , Vue . component ( "grey-label" , { props : [ "color" ] , data : function ( ) { let e = "grey" ; return { labelColor : e = null != this . color && 0 < this . color . length ? "red" : e } } , template : '<span class="ui label basic tiny" :class="labelColor" style="margin-top: 0.4em; font-size: 0.7em; border: 1px solid #ddd!important; font-weight: normal;"><slot></slot></span>' } ) , Vue . component ( "optional-label" , { template : '<em><span class="grey">(可选)</span></em>' } ) , Vue . component ( "plus-label" , { template : '<span style="color: #B18701;">Plus专属功能。</span>' } ) , Vue . component ( "first-menu" , { props : [ ] , template : ' \t\t<div class="first-menu"> \t\t\t<div class="ui menu text blue small">\t\t\t\t<slot></slot>\t\t\t</div> \t\t\t<div class="ui divider"></div> \t\t</div>' } ) , Vue . component ( "more-options-indicator" , { data : function ( ) { return { visible : ! 1 } } , methods : { changeVisible : function ( ) { this . visible = ! this . visible , null != Tea . Vue && ( Tea . Vue . moreOptionsVisible = this . visible ) , this . $emit ( "change" , this . visible ) } } , template : '<a href="" style="font-weight: normal" @click.prevent="changeVisible()"><slot><span v-if="!visible">更多选项</span><span v-if="visible">收起选项</span></slot> <i class="icon angle" :class="{down:!visible, up:visible}"></i> </a>' } ) , Vue . component ( "page-size-selector" , { data : function ( ) { let t = window . location . search , i = 10 ; if ( 0 < t . length ) { let e = ( t = t . substr ( 1 ) ) . split ( "&" ) ; e . forEach ( function ( t ) { t = t . split ( "=" ) ; if ( 2 == t . length && "pageSize" == t [ 0 ] ) { let e = t [ 1 ] ; e . match ( /^\d+$/ ) && ( i = parseInt ( e , 10 ) , ( isNaN ( i ) || i < 1 ) && ( i = 10 ) ) } } ) } return { pageSize : i } } , watch : { pageSize : function ( ) { window . ChangePageSize ( this . pageSize ) } } , template : ` <select class="ui dropdown" style="height:34px;padding-top:0;padding-bottom:0;margin-left:1em;color:#666" v-model="pageSize">
</div> ` } ) , Vue . component ( "label-on" , { props : [ "v-is-on" ] , template : '<div><span v-if="vIsOn" class="ui label tiny green basic">已启用</span><span v-if="!vIsOn" class="ui label tiny red basic">已停用</span></div>' } ) , Vue . component ( "code-label" , { methods : { click : function ( e ) { this . $emit ( "click" , e ) } } , template : '<span class="ui label basic tiny" style="padding: 3px;margin-left:2px;margin-right:2px" @click.prevent="click"><slot></slot></span>' } ) , Vue . component ( "code-label-plain" , { template : '<span class="ui label basic tiny" style="padding: 3px;margin-left:2px;margin-right:2px"><slot></slot></span>' } ) , Vue . component ( "tiny-label" , { template : '<span class="ui label tiny" style="margin-bottom: 0.5em"><slot></slot></span>' } ) , Vue . component ( "tiny-basic-label" , { template : '<span class="ui label tiny basic" style="margin-bottom: 0.5em"><slot></slot></span>' } ) , Vue . component ( "micro-basic-label" , { template : '<span class="ui label tiny basic" style="margin-bottom: 0.5em; font-size: 0.7em; padding: 4px"><slot></slot></span>' } ) , Vue . component ( "grey-label" , { props : [ "color" ] , data : function ( ) { let e = "grey" ; return { labelColor : e = null != this . color && 0 < this . color . length ? "red" : e } } , template : '<span class="ui label basic tiny" :class="labelColor" style="margin-top: 0.4em; font-size: 0.7em; border: 1px solid #ddd!important; font-weight: normal;"><slot></slot></span>' } ) , Vue . component ( "optional-label" , { template : '<em><span class="grey">(可选)</span></em>' } ) , Vue . component ( "plus-label" , { template : '<span style="color: #B18701;">Plus专属功能。</span>' } ) , Vue . component ( "pro-warning-label" , { template : '<span><i class="icon warning circle"></i>注意:通常不需要修改;如要修改,请在专家指导下进行。</span>' } ) , Vue . component ( " first-menu" , { props : [ ] , template : ' \t\t<div class="first-menu"> \t\t\t<div class="ui menu text blue small">\t\t\t\t<slot></slot>\t\t\t</div> \t\t\t<div class="ui divider"></div> \t\t</div>' } ) , Vue . component ( "more-options-indicator" , { data : function ( ) { return { visible : ! 1 } } , methods : { changeVisible : function ( ) { this . visible = ! this . visible , null != Tea . Vue && ( Tea . Vue . moreOptionsVisible = this . visible ) , this . $emit ( "change" , this . visible ) } } , template : '<a href="" style="font-weight: normal" @click.prevent="changeVisible()"><slot><span v-if="!visible">更多选项</span><span v-if="visible">收起选项</span></slot> <i class="icon angle" :class="{down:!visible, up:visible}"></i> </a>' } ) , Vue . component ( "page-size-selector" , { data : function ( ) { let t = window . location . search , i = 10 ; if ( 0 < t . length ) { let e = ( t = t . substr ( 1 ) ) . split ( "&" ) ; e . forEach ( function ( t ) { t = t . split ( "=" ) ; if ( 2 == t . length && "pageSize" == t [ 0 ] ) { let e = t [ 1 ] ; e . match ( /^\d+$/ ) && ( i = parseInt ( e , 10 ) , ( isNaN ( i ) || i < 1 ) && ( i = 10 ) ) } } ) } return { pageSize : i } } , watch : { pageSize : function ( ) { window . ChangePageSize ( this . pageSize ) } } , template : ` <select class="ui dropdown" style="height:34px;padding-top:0;padding-bottom:0;margin-left:1em;color:#666" v-model="pageSize">
<option value="10">[每页]</option><option value="10" selected="selected">10条</option><option value="20">20条</option><option value="30">30条</option><option value="40">40条</option><option value="50">50条</option><option value="60">60条</option><option value="70">70条</option><option value="80">80条</option><option value="90">90条</option><option value="100">100条</option>
</select> ` } ) , Vue . component ( "second-menu" , { template : ' \t\t<div class="second-menu"> \t\t\t<div class="ui menu text blue small">\t\t\t\t<slot></slot>\t\t\t</div> \t\t\t<div class="ui divider"></div> \t\t</div>' } ) , Vue . component ( "loading-message" , { template : ` <div class="ui message loading">
<div class="ui active inline loader small"></div> <slot></slot>
@@ -4456,6 +4456,20 @@ Vue.component("traffic-map-box",{props:["v-stats","v-is-attack"],mounted:functio
<div v-if="domainName.length == 0">
<a href="" @click.prevent="select()">[选择域名]</a>
</div>
</div> ` } ) , Vue . component ( "dns-resolver-config-box" , { props : [ "v-dns-resolver-config" ] , data : function ( ) { let e = this . vDnsResolverConfig ; return { config : e = null == e ? { type : "default" } : e , types : [ { name : "默认" , code : "default" } , { name : "CGO" , code : "cgo" } , { name : "Go原生" , code : "goNative" } ] } } , template : ` <div>
<input type="hidden" name="dnsResolverJSON" :value="JSON.stringify(config)"/>
<table class="ui table definition selectable">
<tr>
<td class="title">使用的DNS解析库</td>
<td>
<select class="ui dropdown auto-width" v-model="config.type">
<option v-for="t in types" :value="t.code">{{t.name}}</option>
</select>
<p class="comment">修改此项配置后,需要重启节点进程才会生效。<pro-warning-label></pro-warning-label></p>
</td>
</tr>
</table>
<div class="margin"></div>
</div> ` } ) , Vue . component ( "grant-selector" , { props : [ "v-grant" , "v-node-cluster-id" , "v-ns-cluster-id" ] , data : function ( ) { return { grantId : null == this . vGrant ? 0 : this . vGrant . id , grant : this . vGrant , nodeClusterId : null != this . vNodeClusterId ? this . vNodeClusterId : 0 , nsClusterId : null != this . vNsClusterId ? this . vNsClusterId : 0 } } , methods : { select : function ( ) { let t = this ; teaweb . popup ( "/clusters/grants/selectPopup?nodeClusterId=" + this . nodeClusterId + "&nsClusterId=" + this . nsClusterId , { callback : e => { t . grantId = e . data . grant . id , 0 < t . grantId && ( t . grant = e . data . grant ) , t . notifyUpdate ( ) } , height : "26em" } ) } , create : function ( ) { let t = this ; teaweb . popup ( "/clusters/grants/createPopup" , { height : "26em" , callback : e => { t . grantId = e . data . grant . id , 0 < t . grantId && ( t . grant = e . data . grant ) , t . notifyUpdate ( ) } } ) } , update : function ( ) { if ( null == this . grant ) window . location . reload ( ) ; else { let t = this ; teaweb . popup ( "/clusters/grants/updatePopup?grantId=" + this . grant . id , { height : "26em" , callback : e => { t . grant = e . data . grant , t . notifyUpdate ( ) } } ) } } , remove : function ( ) { this . grant = null , this . grantId = 0 , this . notifyUpdate ( ) } , notifyUpdate : function ( ) { this . $emit ( "change" , this . grant ) } } , template : ` <div>
<input type="hidden" name="grantId" :value="grantId"/>
<div class="ui label small basic" v-if="grant != null">{{grant.name}}<span class="small grey">( {{grant.methodName}}) </span><span class="small grey" v-if="grant.username != null && grant.username.length > 0">( {{grant.username}}) </span> <a href="" title="修改" @click.prevent="update()"><i class="icon pencil small"></i></a> <a href="" title="删除" @click.prevent="remove()"><i class="icon remove"></i></a> </div>