diff --git a/web/public/js/components.js b/web/public/js/components.js
index c98e4b40..b9a34d7f 100644
--- a/web/public/js/components.js
+++ b/web/public/js/components.js
@@ -5282,7 +5282,9 @@ example2.com
`}),Vue.component("second-menu",{template:' \t\t
'}),Vue.component("loading-message",{template:``}),Vue.component("more-options-angle",{data:function(){return{isVisible:!1}},methods:{show:function(){this.isVisible=!this.isVisible,this.$emit("change",this.isVisible)}},template:'更多选项收起选项'}),Vue.component("inner-menu-item",{props:["href","active","code"],data:function(){var e,t=this.active;return void 0===t&&(e="",t=(e=void 0!==window.TEA.ACTION.data.firstMenuItem?window.TEA.ACTION.data.firstMenuItem:e)==this.code),{vHref:null==this.href?"":this.href,vActive:t}},template:'\t\t[] \t\t'}),Vue.component("health-check-config-box",{props:["v-health-check-config","v-check-domain-url"],data:function(){let t=this.vHealthCheckConfig,i="http",n="",s="/",o="";if(null==t){t={isOn:!1,url:"",interval:{count:60,unit:"second"},statusCodes:[200],timeout:{count:10,unit:"second"},countTries:3,tryDelay:{count:100,unit:"ms"},autoDown:!0,countUp:1,countDown:3,userAgent:"",onlyBasicRequest:!0,accessLogIsOn:!0};let e=this;setTimeout(function(){e.changeURL()},500)}else{try{let e=new URL(t.url);i=e.protocol.substring(0,e.protocol.length-1);var a=(o="%24%7Bhost%7D"==(o=e.host)?"${host}":o).indexOf(":");0
+ `}),Vue.component("more-options-angle",{data:function(){return{isVisible:!1}},methods:{show:function(){this.isVisible=!this.isVisible,this.$emit("change",this.isVisible)}},template:'更多选项收起选项'}),Vue.component("inner-menu-item",{props:["href","active","code"],data:function(){var e,t=this.active;return void 0===t&&(e="",t=(e=void 0!==window.TEA.ACTION.data.firstMenuItem?window.TEA.ACTION.data.firstMenuItem:e)==this.code),{vHref:null==this.href?"":this.href,vActive:t}},template:'\t\t[] \t\t'}),Vue.component("columns-grid",{props:[],mounted:function(){this.columns=this.calculateColumns();let e=this;window.addEventListener("resize",function(){e.columns=e.calculateColumns()})},data:function(){return{columns:"four"}},methods:{calculateColumns:function(){var e=window.innerWidth;let i=Math.floor(e/250);0==i&&(i=1);var n=this.$el.getElementsByClassName("column");if(0!=n.length){e=n.length;i>e&&(i=e);for(let t=0;t
+
+`}),Vue.component("health-check-config-box",{props:["v-health-check-config","v-check-domain-url"],data:function(){let t=this.vHealthCheckConfig,i="http",n="",s="/",o="";if(null==t){t={isOn:!1,url:"",interval:{count:60,unit:"second"},statusCodes:[200],timeout:{count:10,unit:"second"},countTries:3,tryDelay:{count:100,unit:"ms"},autoDown:!0,countUp:1,countDown:3,userAgent:"",onlyBasicRequest:!0,accessLogIsOn:!0};let e=this;setTimeout(function(){e.changeURL()},500)}else{try{let e=new URL(t.url);i=e.protocol.substring(0,e.protocol.length-1);var a=(o="%24%7Bhost%7D"==(o=e.host)?"${host}":o).indexOf(":");0
diff --git a/web/public/js/components.src.js b/web/public/js/components.src.js
index ce54daad..3395640c 100755
--- a/web/public/js/components.src.js
+++ b/web/public/js/components.src.js
@@ -15654,6 +15654,78 @@ Vue.component("inner-menu-item", {
'
});
+Vue.component("columns-grid", {
+ props: [],
+ mounted: function () {
+ this.columns = this.calculateColumns()
+
+ let that = this
+ window.addEventListener("resize", function () {
+ that.columns = that.calculateColumns()
+ })
+ },
+ data: function () {
+ return {
+ columns: "four"
+ }
+ },
+ methods: {
+ calculateColumns: function () {
+ let w = window.innerWidth
+ let columns = Math.floor(w / 250)
+ if (columns == 0) {
+ columns = 1
+ }
+
+ let columnElements = this.$el.getElementsByClassName("column")
+ if (columnElements.length == 0) {
+ return
+ }
+ let maxColumns = columnElements.length
+ if (columns > maxColumns) {
+ columns = maxColumns
+ }
+
+ // 添加右侧边框
+ for (let index = 0; index < columnElements.length; index++) {
+ let el = columnElements[index]
+ el.className = el.className.replace("with-border", "")
+ if (index % columns == columns - 1 || index == columnElements.length - 1 /** 最后一个 **/) {
+ el.className += " with-border"
+ }
+ }
+
+ switch (columns) {
+ 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"
+ case 10:
+ return "ten"
+ default:
+ return "ten"
+ }
+ }
+ },
+ template: `
+
+
`
+})
+
Vue.component("health-check-config-box", {
props: ["v-health-check-config", "v-check-domain-url"],
data: function () {