@@ -1107,8 +1107,7 @@ Vue.component("traffic-map-box",{props:["v-stats","v-is-attack"],mounted:functio
<div v-if="!isAdding">
<div v-if="!isAdding">
<button type="button" class="ui button tiny" @click.prevent="add">+</button>
<button type="button" class="ui button tiny" @click.prevent="add">+</button>
</div>
</div>
</div> ` } ) , Vue . component ( "http-request-conds-view" , { props : [ "v-conds" ] , data : function ( ) { let e = this . vConds , t = ( null == e && ( e = { isOn : ! 0 , connector : "or" , groups : [ ] } ) , this ) ; return e . groups . forEach ( function ( e ) { e . conds . forEach ( function ( e ) { e . typeName = t . typeName ( e ) } ) } ) , { initConds : e , version : 0 }} , computed : { conds : function ( ) { return this . initConds } } , methods : { typeName : function ( i ) { var e = window . REQUEST _COND _COMPONENTS . $find ( function ( e , t ) { return t . type == i . type } ) ; return null != e ? e . name : i . param + " " + i . operator } , notifyChange : function ( ) { this . version ++ ; let t = this ; this . initConds . groups . forEach ( function ( e ) { e . conds . forEach ( function ( e ) { e . typeName = t . typeName ( e ) } ) } ) } } , template : ` <div>
</div> ` } ) , Vue . component ( "http-request-conds-view" , { props : [ "v-conds" ] , data : function ( ) { let e = this . vConds , t = ( null == e && ( e = { isOn : ! 0 , connector : "or" , groups : [ ] } ) , this ) ; return e . groups . forEach ( function ( e ) { e . conds . forEach ( function ( e ) { e . typeName = t . typeName ( e ) } ) } ) , { initConds : e } } , computed : { conds : function ( ) { return this . initConds } } , methods : { typeName : function ( i ) { var e = window . REQUEST _COND _COMPONENTS . $find ( function ( e , t ) { return t . type == i . type } ) ; return null != e ? e . name : i . param + " " + i . operator } , updateConds : function ( e ) { this . initConds = e } , notifyChange : function ( ) { let t = this ; this . initConds . groups . forEach ( function ( e ) { e . conds . forEach ( function ( e ) { e . typeName = t . typeName ( e ) } ) } ) , this . $forceUpdate ( ) }} , template : ` <div>
<span v-if="version < 0">{{version}}</span>
<div v-if="conds.groups.length > 0">
<div v-if="conds.groups.length > 0">
<div v-for="(group, groupIndex) in conds.groups">
<div v-for="(group, groupIndex) in conds.groups">
<var v-for="(cond, index) in group.conds" style="font-style: normal;display: inline-block; margin-bottom:0.5em">
<var v-for="(cond, index) in group.conds" style="font-style: normal;display: inline-block; margin-bottom:0.5em">
@@ -1331,7 +1330,7 @@ Vue.component("traffic-map-box",{props:["v-stats","v-is-attack"],mounted:functio
<a v-for="(p, index) in partitions" :href="url(p.code)" class="item" :class="{active: selectedPartition == p.code, disabled: p.isDisabled}">分表{{p.code+1}} <span class="disabled" v-if="index != partitions.length - 1">|</span></a>
<a v-for="(p, index) in partitions" :href="url(p.code)" class="item" :class="{active: selectedPartition == p.code, disabled: p.isDisabled}">分表{{p.code+1}} <span class="disabled" v-if="index != partitions.length - 1">|</span></a>
</div>
</div>
<div class="ui divider" style="margin-top: 0"></div>
<div class="ui divider" style="margin-top: 0"></div>
</div> ` } ) , Vue . component ( "http-cache-refs-config-box" , { props : [ "v-cache-refs" , "v-cache-config" , "v-cache-policy-id" , "v-web-id" ] , mounted : function ( ) { let s = this ; sortTable ( function ( e ) { let i = [ ] ; e . forEach ( function ( t ) { s . refs . forEach ( function ( e ) { e . id == t && i . push ( e ) } ) } ) , s . updateRefs ( i ) , s . change ( ) } ) } , data : function ( ) { let e = this . vCacheRefs , t = ( null == e && ( e = [ ] ) , 0 ) ; return e . forEach ( function ( e ) { t ++ , e . id = t } ) , { refs : e , id : t } } , methods : { addRef : function ( e ) { window . UPDATING _CACHE _REF = null ; let t = window . innerWidth , i = ( 1024 < t && ( t = 1024 ) , window . innerHeight ) , n = ( 500 < i && ( i = 500 ) , this ) ; teaweb . popup ( "/servers/server/settings/cache/createPopup?isReverse=" + ( e ? 1 : 0 ) , { width : t + "px" , height : i + "px" , callback : function ( e ) { let s = e . data . cacheRef ; if ( null != s . conds ) { if ( n . id ++ , s . id = n . id , s . isReverse ) { let t = [ ] , i = ! 1 ; n . refs . forEach ( function ( e ) { e . isReverse || i || ( t . push ( s ) , i = ! 0 ) , t . push ( e ) } ) , i || t . push ( s ) , n . updateRefs ( t ) } else n . refs . push ( s ) ; n . change ( ) } } } ) } , updateRef : function ( t , e ) { window . UPDATING _CACHE _REF = e ; let i = window . innerWidth , s = ( 1024 < i && ( i = 1024 ) , window . innerHeight ) , n = ( 500 < s && ( s = 500 ) , this ) ; teaweb . popup ( "/servers/server/settings/cache/createPopup" , { width : i + "px" , height : s + "px" , callback : function ( e ) { e . data . cacheRef . id = n . refs [ t ] . id , Vue . set ( n . refs , t , e . data . cacheRef ) , n . change ( ) } } ) } , disableRef : function ( e ) { e . isOn = ! 1 , this . change ( ) } , enableRef : function ( e ) { e . isOn = ! 0 , this . change ( ) } , removeRef : function ( e ) { let t = this ; teaweb . confirm ( "确定要删除此缓存设置吗?" , function ( ) { t . refs . $remove ( e ) , t . change ( ) } ) } , updateRefs : function ( e ) { this . refs = e , null != this . vCacheConfig && ( this . vCacheConfig . cacheRefs = e ) } , timeUnitName : function ( e ) { switch ( e ) { case "ms" : return "毫秒" ; case "second" : return "秒" ; case "minute" : return "分钟" ; case "hour" : return "小时" ; case "day" : return "天" ; case "week" : return "周 " } return e } , change : function ( ) { null != this . vCachePolicyId && 0 < this . vCachePolicyId ? Tea . action ( "/servers/components/cache/updateRefs" ) . params ( { cachePolicyId : this . vCachePolicyId , refsJSON : JSON . stringify ( this . refs ) } ) . post ( ) : null != this . vWebId && 0 < this . vWebId && Tea . action ( "/servers/server/settings/cache/updateRefs" ) . params ( { webId : this . vWebId , refsJSON : JSON . stringify ( this . refs ) } ) . success ( function ( e ) { e . data . isUpdated && teaweb . successToast ( "保存成功" ) } ) . post ( ) } } , template : ` <div>
</div> ` } ) , Vue . component ( "http-cache-refs-config-box" , { props : [ "v-cache-refs" , "v-cache-config" , "v-cache-policy-id" , "v-web-id" ] , mounted : function ( ) { let s = this ; sortTable ( function ( e ) { let i = [ ] ; e . forEach ( function ( t ) { s . refs . forEach ( function ( e ) { e . id == t && i . push ( e ) } ) } ) , s . updateRefs ( i ) , s . change ( ) } ) } , data : function ( ) { let e = this . vCacheRefs , t = ( null == e && ( e = [ ] ) , 0 ) ; return e . forEach ( function ( e ) { t ++ , e . id = t } ) , { refs : e , id : t } } , methods : { addRef : function ( e ) { window . UPDATING _CACHE _REF = null ; let t = window . innerWidth , i = ( 1024 < t && ( t = 1024 ) , window . innerHeight ) , n = ( 500 < i && ( i = 500 ) , this ) ; teaweb . popup ( "/servers/server/settings/cache/createPopup?isReverse=" + ( e ? 1 : 0 ) , { width : t + "px" , height : i + "px" , callback : function ( e ) { let s = e . data . cacheRef ; if ( null != s . conds ) { if ( n . id ++ , s . id = n . id , s . isReverse ) { let t = [ ] , i = ! 1 ; n . refs . forEach ( function ( e ) { e . isReverse || i || ( t . push ( s ) , i = ! 0 ) , t . push ( e ) } ) , i || t . push ( s ) , n . updateRefs ( t ) } else n . refs . push ( s ) ; n . change ( ) } } } ) } , updateRef : function ( t , e ) { window . UPDATING _CACHE _REF = e ; let i = window . innerWidth , s = ( 1024 < i && ( i = 1024 ) , window . innerHeight ) , n = ( 500 < s && ( s = 500 ) , this ) ; teaweb . popup ( "/servers/server/settings/cache/createPopup" , { width : i + "px" , height : s + "px" , callback : function ( e ) { e . data . cacheRef . id = n . refs [ t ] . id , Vue . set ( n . refs , t , e . data . cacheRef ) , n . change ( ) , n . $refs . cacheRef [ t ] . updateConds ( e . data . cacheRef . conds ) , n . $refs . cacheRef [ t ] . notifyChange ( ) }} ) } , disableRef : function ( e ) { e . isOn = ! 1 , this . change ( ) } , enableRef : function ( e ) { e . isOn = ! 0 , this . change ( ) } , removeRef : function ( e ) { let t = this ; teaweb . confirm ( "确定要删除此缓存设置吗?" , function ( ) { t . refs . $remove ( e ) , t . change ( ) } ) } , updateRefs : function ( e ) { this . refs = e , null != this . vCacheConfig && ( this . vCacheConfig . cacheRefs = e ) } , timeUnitName : function ( e ) { switch ( e ) { case "ms" : return "毫秒" ; case "second" : return "秒" ; case "minute" : return "分钟" ; case "hour" : return "小时" ; case "day" : return "天" ; case "week" : return "周 " } return e } , change : function ( ) { this . $forceUpdate ( ) , null != this . vCachePolicyId && 0 < this . vCachePolicyId ? Tea . action ( "/servers/components/cache/updateRefs" ) . params ( { cachePolicyId : this . vCachePolicyId , refsJSON : JSON . stringify ( this . refs ) } ) . post ( ) : null != this . vWebId && 0 < this . vWebId && Tea . action ( "/servers/server/settings/cache/updateRefs" ) . params ( { webId : this . vWebId , refsJSON : JSON . stringify ( this . refs ) } ) . success ( function ( e ) { e . data . isUpdated && teaweb . successToast ( "保存成功" ) } ) . post ( ) } } , template : ` <div>
<input type="hidden" name="refsJSON" :value="JSON.stringify(refs)"/>
<input type="hidden" name="refsJSON" :value="JSON.stringify(refs)"/>
<div>
<div>
@@ -2025,9 +2024,11 @@ Vue.component("traffic-map-box",{props:["v-stats","v-is-attack"],mounted:functio
<option value="0">[选择用户]</option>
<option value="0">[选择用户]</option>
<option v-for="user in users" :value="user.id">{{user.fullname}} ({{user.username}})</option>
<option v-for="user in users" :value="user.id">{{user.fullname}} ({{user.username}})</option>
</select>
</select>
</div> ` } ) , Vue . component ( "uam-config-box" , { props : [ "v-uam-config" ] , data : function ( ) { let e = this . vUamConfig ; return { config : e = null == e ? { isOn : ! 1 } : e } } , template : ` <div>
</div> ` } ) , Vue . component ( "uam-config-box" , { props : [ "v-uam-config" , "v-is-location" , "v-is-group" ], data : function ( ) { let e = this . vUamConfig ; return { config : e = null == e ? { isPrior : ! 1 , isOn: ! 1 } : e } } , template : ` <div>
<input type="hidden" name="uamJSON" :value="JSON.stringify(config)"/>
<input type="hidden" name="uamJSON" :value="JSON.stringify(config)"/>
<table class="ui table definition selectable">
<table class="ui table definition selectable">
<prior-checkbox :v-config="config" v-if="vIsLocation || vIsGroup"></prior-checkbox>
<tbody v-show="((!vIsLocation && !vIsGroup) || config.isPrior)">
<tr>
<tr>
<td class="title">启用5秒盾</td>
<td class="title">启用5秒盾</td>
<td>
<td>
@@ -2035,6 +2036,7 @@ Vue.component("traffic-map-box",{props:["v-stats","v-is-attack"],mounted:functio
<p class="comment"><plus-label></plus-label>启用后,访问网站时,自动检查浏览器环境,阻止非正常访问。</p>
<p class="comment"><plus-label></plus-label>启用后,访问网站时,自动检查浏览器环境,阻止非正常访问。</p>
</td>
</td>
</tr>
</tr>
</tbody>
</table>
</table>
<div class="margin"></div>
<div class="margin"></div>
</div> ` } ) , Vue . component ( "http-header-policy-box" , { props : [ "v-request-header-policy" , "v-request-header-ref" , "v-response-header-policy" , "v-response-header-ref" , "v-params" , "v-is-location" , "v-is-group" , "v-has-group-request-config" , "v-has-group-response-config" , "v-group-setting-url" ] , data : function ( ) { let e = "response" ; "#request" == window . location . hash && ( e = "request" ) ; let t = this . vRequestHeaderRef , i = ( null == t && ( t = { isPrior : ! 1 , isOn : ! 0 , headerPolicyId : 0 } ) , this . vResponseHeaderRef ) , s = ( null == i && ( i = { isPrior : ! 1 , isOn : ! 0 , headerPolicyId : 0 } ) , [ ] ) , n = [ ] ; var o = this . vRequestHeaderPolicy ; null != o && ( null != o . setHeaders && ( s = o . setHeaders ) , null != o . deleteHeaders && ( n = o . deleteHeaders ) ) ; let a = [ ] , l = [ ] ; o = this . vResponseHeaderPolicy ; return null != o && ( null != o . setHeaders && ( a = o . setHeaders ) , null != o . deleteHeaders && ( l = o . deleteHeaders ) ) , { type : e , typeName : "request" == e ? "请求" : "响应" , requestHeaderRef : t , responseHeaderRef : i , requestSettingHeaders : s , requestDeletingHeaders : n , responseSettingHeaders : a , responseDeletingHeaders : l } } , methods : { selectType : function ( e ) { this . type = e , window . location . hash = "#" + e , window . location . reload ( ) } , addSettingHeader : function ( e ) { teaweb . popup ( "/servers/server/settings/headers/createSetPopup?" + this . vParams + "&headerPolicyId=" + e + "&type=" + this . type , { callback : function ( ) { teaweb . successRefresh ( "保存成功" ) } } ) } , addDeletingHeader : function ( e , t ) { teaweb . popup ( "/servers/server/settings/headers/createDeletePopup?" + this . vParams + "&headerPolicyId=" + e + "&type=" + t , { callback : function ( ) { teaweb . successRefresh ( "保存成功" ) } } ) } , updateSettingPopup : function ( e , t ) { teaweb . popup ( "/servers/server/settings/headers/updateSetPopup?" + this . vParams + "&headerPolicyId=" + e + "&headerId=" + t + "&type=" + this . type , { callback : function ( ) { teaweb . successRefresh ( "保存成功" ) } } ) } , deleteDeletingHeader : function ( e , t ) { teaweb . confirm ( "确定要删除'" + t + "'吗?" , function ( ) { Tea . action ( "/servers/server/settings/headers/deleteDeletingHeader" ) . params ( { headerPolicyId : e , headerName : t } ) . post ( ) . refresh ( ) } ) } , deleteHeader : function ( e , t , i ) { teaweb . confirm ( "确定要删除此Header吗? " , function ( ) { this . $post ( "/servers/server/settings/headers/delete" ) . params ( { headerPolicyId : e , type : t , headerId : i } ) . refresh ( ) } ) } } , template : ` <div>
</div> ` } ) , Vue . component ( "http-header-policy-box" , { props : [ "v-request-header-policy" , "v-request-header-ref" , "v-response-header-policy" , "v-response-header-ref" , "v-params" , "v-is-location" , "v-is-group" , "v-has-group-request-config" , "v-has-group-response-config" , "v-group-setting-url" ] , data : function ( ) { let e = "response" ; "#request" == window . location . hash && ( e = "request" ) ; let t = this . vRequestHeaderRef , i = ( null == t && ( t = { isPrior : ! 1 , isOn : ! 0 , headerPolicyId : 0 } ) , this . vResponseHeaderRef ) , s = ( null == i && ( i = { isPrior : ! 1 , isOn : ! 0 , headerPolicyId : 0 } ) , [ ] ) , n = [ ] ; var o = this . vRequestHeaderPolicy ; null != o && ( null != o . setHeaders && ( s = o . setHeaders ) , null != o . deleteHeaders && ( n = o . deleteHeaders ) ) ; let a = [ ] , l = [ ] ; o = this . vResponseHeaderPolicy ; return null != o && ( null != o . setHeaders && ( a = o . setHeaders ) , null != o . deleteHeaders && ( l = o . deleteHeaders ) ) , { type : e , typeName : "request" == e ? "请求" : "响应" , requestHeaderRef : t , responseHeaderRef : i , requestSettingHeaders : s , requestDeletingHeaders : n , responseSettingHeaders : a , responseDeletingHeaders : l } } , methods : { selectType : function ( e ) { this . type = e , window . location . hash = "#" + e , window . location . reload ( ) } , addSettingHeader : function ( e ) { teaweb . popup ( "/servers/server/settings/headers/createSetPopup?" + this . vParams + "&headerPolicyId=" + e + "&type=" + this . type , { callback : function ( ) { teaweb . successRefresh ( "保存成功" ) } } ) } , addDeletingHeader : function ( e , t ) { teaweb . popup ( "/servers/server/settings/headers/createDeletePopup?" + this . vParams + "&headerPolicyId=" + e + "&type=" + t , { callback : function ( ) { teaweb . successRefresh ( "保存成功" ) } } ) } , updateSettingPopup : function ( e , t ) { teaweb . popup ( "/servers/server/settings/headers/updateSetPopup?" + this . vParams + "&headerPolicyId=" + e + "&headerId=" + t + "&type=" + this . type , { callback : function ( ) { teaweb . successRefresh ( "保存成功" ) } } ) } , deleteDeletingHeader : function ( e , t ) { teaweb . confirm ( "确定要删除'" + t + "'吗?" , function ( ) { Tea . action ( "/servers/server/settings/headers/deleteDeletingHeader" ) . params ( { headerPolicyId : e , headerName : t } ) . post ( ) . refresh ( ) } ) } , deleteHeader : function ( e , t , i ) { teaweb . confirm ( "确定要删除此Header吗? " , function ( ) { this . $post ( "/servers/server/settings/headers/delete" ) . params ( { headerPolicyId : e , type : t , headerId : i } ) . refresh ( ) } ) } } , template : ` <div>
@@ -2725,8 +2727,8 @@ Vue.component("traffic-map-box",{props:["v-stats","v-is-attack"],mounted:functio
</table>
</table>
</div> ` } ) , Vue . component ( "ssl-certs-view" , { props : [ "v-certs" ] , data : function ( ) { let e = this . vCerts ; return { certs : e = null == e ? [ ] : e } } , methods : { formatTime : function ( e ) { return new Date ( 1e3 * e ) . format ( "Y-m-d" ) } , viewCert : function ( e ) { teaweb . popup ( "/servers/certs/certPopup?certId=" + e , { height : "28em" , width : "48em" } ) } } , template : ` <div>
</div> ` } ) , Vue . component ( "ssl-certs-view" , { props : [ "v-certs" ] , data : function ( ) { let e = this . vCerts ; return { certs : e = null == e ? [ ] : e } } , methods : { formatTime : function ( e ) { return new Date ( 1e3 * e ) . format ( "Y-m-d" ) } , viewCert : function ( e ) { teaweb . popup ( "/servers/certs/certPopup?certId=" + e , { height : "28em" , width : "48em" } ) } } , template : ` <div>
<div v-if="certs != null && certs.length > 0">
<div v-if="certs != null && certs.length > 0">
<div class="ui label small" v-for="(cert, index) in certs">
<div class="ui label small basic " v-for="(cert, index) in certs">
{{cert.name}} / {{cert.dnsNames}} / 有效至{{formatTime(cert.timeEndAt)}} <a href="" title="查看" @click.prevent="viewCert(cert.id)"><i class="icon external alternat e"></i></a>
{{cert.name}} / {{cert.dnsNames}} / 有效至{{formatTime(cert.timeEndAt)}} <a href="" title="查看" @click.prevent="viewCert(cert.id)"><i class="icon expand blu e"></i></a>
</div>
</div>
</div>
</div>
</div> ` } ) , Vue . component ( "reverse-proxy-box" , { props : [ "v-reverse-proxy-ref" , "v-reverse-proxy-config" , "v-is-location" , "v-is-group" , "v-family" ] , data : function ( ) { let e = this . vReverseProxyRef , t = ( null == e && ( e = { isPrior : ! 1 , isOn : ! 1 , reverseProxyId : 0 } ) , this . vReverseProxyConfig ) , i = ( null == ( t = null == t ? { requestPath : "" , stripPrefix : "" , requestURI : "" , requestHost : "" , requestHostType : 0 , addHeaders : [ ] , connTimeout : { count : 0 , unit : "second" } , readTimeout : { count : 0 , unit : "second" } , idleTimeout : { count : 0 , unit : "second" } , maxConns : 0 , maxIdleConns : 0 , followRedirects : ! 1 } : t ) . addHeaders && ( t . addHeaders = [ ] ) , null == t . connTimeout && ( t . connTimeout = { count : 0 , unit : "second" } ) , null == t . readTimeout && ( t . readTimeout = { count : 0 , unit : "second" } ) , null == t . idleTimeout && ( t . idleTimeout = { count : 0 , unit : "second" } ) , null == t . proxyProtocol && Vue . set ( t , "proxyProtocol" , { isOn : ! 1 , version : 1 } ) , [ { name : "X-Real-IP" , isChecked : ! 1 } , { name : "X-Forwarded-For" , isChecked : ! 1 } , { name : "X-Forwarded-By" , isChecked : ! 1 } , { name : "X-Forwarded-Host" , isChecked : ! 1 } , { name : "X-Forwarded-Proto" , isChecked : ! 1 } ] ) ; return i . forEach ( function ( e ) { e . isChecked = t . addHeaders . $contains ( e . name ) } ) , { reverseProxyRef : e , reverseProxyConfig : t , advancedVisible : ! 1 , family : this . vFamily , forwardHeaders : i } } , watch : { "reverseProxyConfig.requestHostType" : function ( e ) { let t = parseInt ( e ) ; isNaN ( t ) && ( t = 0 ) , this . reverseProxyConfig . requestHostType = t } , "reverseProxyConfig.connTimeout.count" : function ( e ) { let t = parseInt ( e ) ; ( isNaN ( t ) || t < 0 ) && ( t = 0 ) , this . reverseProxyConfig . connTimeout . count = t } , "reverseProxyConfig.readTimeout.count" : function ( e ) { let t = parseInt ( e ) ; ( isNaN ( t ) || t < 0 ) && ( t = 0 ) , this . reverseProxyConfig . readTimeout . count = t } , "reverseProxyConfig.idleTimeout.count" : function ( e ) { let t = parseInt ( e ) ; ( isNaN ( t ) || t < 0 ) && ( t = 0 ) , this . reverseProxyConfig . idleTimeout . count = t } , "reverseProxyConfig.maxConns" : function ( e ) { let t = parseInt ( e ) ; ( isNaN ( t ) || t < 0 ) && ( t = 0 ) , this . reverseProxyConfig . maxConns = t } , "reverseProxyConfig.maxIdleConns" : function ( e ) { let t = parseInt ( e ) ; ( isNaN ( t ) || t < 0 ) && ( t = 0 ) , this . reverseProxyConfig . maxIdleConns = t } , "reverseProxyConfig.proxyProtocol.version" : function ( e ) { let t = parseInt ( e ) ; isNaN ( t ) && ( t = 1 ) , this . reverseProxyConfig . proxyProtocol . version = t } } , methods : { isOn : function ( ) { return ( ! this . vIsLocation && ! this . vIsGroup || this . reverseProxyRef . isPrior ) && this . reverseProxyRef . isOn } , changeAdvancedVisible : function ( e ) { this . advancedVisible = e } , changeAddHeader : function ( ) { this . reverseProxyConfig . addHeaders = this . forwardHeaders . filter ( function ( e ) { return e . isChecked } ) . map ( function ( e ) { return e . name } ) } } , template : ` <div>
</div> ` } ) , Vue . component ( "reverse-proxy-box" , { props : [ "v-reverse-proxy-ref" , "v-reverse-proxy-config" , "v-is-location" , "v-is-group" , "v-family" ] , data : function ( ) { let e = this . vReverseProxyRef , t = ( null == e && ( e = { isPrior : ! 1 , isOn : ! 1 , reverseProxyId : 0 } ) , this . vReverseProxyConfig ) , i = ( null == ( t = null == t ? { requestPath : "" , stripPrefix : "" , requestURI : "" , requestHost : "" , requestHostType : 0 , addHeaders : [ ] , connTimeout : { count : 0 , unit : "second" } , readTimeout : { count : 0 , unit : "second" } , idleTimeout : { count : 0 , unit : "second" } , maxConns : 0 , maxIdleConns : 0 , followRedirects : ! 1 } : t ) . addHeaders && ( t . addHeaders = [ ] ) , null == t . connTimeout && ( t . connTimeout = { count : 0 , unit : "second" } ) , null == t . readTimeout && ( t . readTimeout = { count : 0 , unit : "second" } ) , null == t . idleTimeout && ( t . idleTimeout = { count : 0 , unit : "second" } ) , null == t . proxyProtocol && Vue . set ( t , "proxyProtocol" , { isOn : ! 1 , version : 1 } ) , [ { name : "X-Real-IP" , isChecked : ! 1 } , { name : "X-Forwarded-For" , isChecked : ! 1 } , { name : "X-Forwarded-By" , isChecked : ! 1 } , { name : "X-Forwarded-Host" , isChecked : ! 1 } , { name : "X-Forwarded-Proto" , isChecked : ! 1 } ] ) ; return i . forEach ( function ( e ) { e . isChecked = t . addHeaders . $contains ( e . name ) } ) , { reverseProxyRef : e , reverseProxyConfig : t , advancedVisible : ! 1 , family : this . vFamily , forwardHeaders : i } } , watch : { "reverseProxyConfig.requestHostType" : function ( e ) { let t = parseInt ( e ) ; isNaN ( t ) && ( t = 0 ) , this . reverseProxyConfig . requestHostType = t } , "reverseProxyConfig.connTimeout.count" : function ( e ) { let t = parseInt ( e ) ; ( isNaN ( t ) || t < 0 ) && ( t = 0 ) , this . reverseProxyConfig . connTimeout . count = t } , "reverseProxyConfig.readTimeout.count" : function ( e ) { let t = parseInt ( e ) ; ( isNaN ( t ) || t < 0 ) && ( t = 0 ) , this . reverseProxyConfig . readTimeout . count = t } , "reverseProxyConfig.idleTimeout.count" : function ( e ) { let t = parseInt ( e ) ; ( isNaN ( t ) || t < 0 ) && ( t = 0 ) , this . reverseProxyConfig . idleTimeout . count = t } , "reverseProxyConfig.maxConns" : function ( e ) { let t = parseInt ( e ) ; ( isNaN ( t ) || t < 0 ) && ( t = 0 ) , this . reverseProxyConfig . maxConns = t } , "reverseProxyConfig.maxIdleConns" : function ( e ) { let t = parseInt ( e ) ; ( isNaN ( t ) || t < 0 ) && ( t = 0 ) , this . reverseProxyConfig . maxIdleConns = t } , "reverseProxyConfig.proxyProtocol.version" : function ( e ) { let t = parseInt ( e ) ; isNaN ( t ) && ( t = 1 ) , this . reverseProxyConfig . proxyProtocol . version = t } } , methods : { isOn : function ( ) { return ( ! this . vIsLocation && ! this . vIsGroup || this . reverseProxyRef . isPrior ) && this . reverseProxyRef . isOn } , changeAdvancedVisible : function ( e ) { this . advancedVisible = e } , changeAddHeader : function ( ) { this . reverseProxyConfig . addHeaders = this . forwardHeaders . filter ( function ( e ) { return e . isChecked } ) . map ( function ( e ) { return e . name } ) } } , template : ` <div>