Explorar el Código

fix: 合并解决冲突

jcq hace 18 horas
padre
commit
0830e84681

+ 759 - 0
mock/index.ts

@@ -1100,6 +1100,765 @@ const mock = [
             },
             "message": ""
         }
+    },
+    {
+        url: "/servers/addPortPopup",
+        method: "get",
+        response: {
+            "code": 200,
+            "data": {
+                "firstMenuItem": "",
+                "mainMenu": "",
+                "mainTab": "",
+                "maxPort": 9999,
+                "minPort": 80,
+                "protocols": [
+                    {
+                        "code": "http",
+                        "name": "HTTP",
+                        "serverTypes": [
+                            "httpProxy",
+                            "httpWeb"
+                        ]
+                    }
+                ],
+                "serverType": "httpProxy",
+                "teaBadge": 0,
+                "teaCommon": {
+                    "teaIsPlus": true,
+                    "teaLogoFileId": 0,
+                    "teaShowVersion": true,
+                    "teaUsername": "默认用户"
+                },
+                "teaDemoEnabled": false,
+                "teaDocURL": "",
+                "teaFaviconFileId": 0,
+                "teaFrontMode": "",
+                "teaIsSuper": false,
+                "teaLang": "zh-cn",
+                "teaMenu": "servers",
+                "teaModules": [
+                    {
+                        "code": "dashboard",
+                        "icon": "dashboard",
+                        "isOn": true,
+                        "name": "概览",
+                        "subItems": []
+                    },
+                    {
+                        "code": "servers",
+                        "icon": "pi-sitemap",
+                        "isOn": true,
+                        "name": "CDN加速",
+                        "subItems": [
+                            {
+                                "code": "servers",
+                                "name": "我的网站",
+                                "url": "/servers"
+                            },
+                            {
+                                "code": "cache",
+                                "name": "刷新预热",
+                                "url": "/servers/cache"
+                            },
+                            {
+                                "code": "certs",
+                                "name": "证书管理",
+                                "url": "/servers/certs"
+                            },
+                            {
+                                "code": "acme",
+                                "isOn": true,
+                                "name": "证书申请",
+                                "url": "/servers/certs/acme"
+                            },
+                            {
+                                "code": "trafficStat",
+                                "isOn": true,
+                                "name": "用量统计",
+                                "url": "/servers/traffic-stats"
+                            },
+                            {
+                                "code": "fee",
+                                "isOn": false,
+                                "name": "计费方式",
+                                "url": "/servers/fee"
+                            },
+                            {
+                                "code": "trafficPackage",
+                                "isOn": false,
+                                "name": "流量包",
+                                "url": "/servers/packages"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "lb",
+                        "icon": "paper plane",
+                        "isOn": true,
+                        "name": "负载均衡"
+                    },
+                    {
+                        "code": "waf",
+                        "icon": "magnet",
+                        "isOn": true,
+                        "name": "WAF安全",
+                        "subItems": [
+                            {
+                                "code": "overview",
+                                "name": "概览",
+                                "url": "/waf"
+                            },
+                            {
+                                "code": "wafLogs",
+                                "name": "拦截日志",
+                                "url": "/waf/logs"
+                            },
+                            {
+                                "code": "iplist",
+                                "name": "拦截IP",
+                                "url": "/waf/iplists"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "plans",
+                        "icon": "puzzle piece",
+                        "isOn": true,
+                        "name": "套餐管理"
+                    },
+                    {
+                        "code": "anti-ddos",
+                        "icon": "shield",
+                        "isOn": true,
+                        "name": "DDoS高防",
+                        "subItems": [
+                            {
+                                "code": "instance",
+                                "name": "实例列表",
+                                "url": "/anti-ddos/instances"
+                            },
+                            {
+                                "code": "package",
+                                "name": "购买实例",
+                                "url": "/anti-ddos/packages"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "ns",
+                        "icon": "globe",
+                        "isOn": true,
+                        "name": "域名解析",
+                        "subItems": [
+                            {
+                                "code": "domain",
+                                "name": "我的域名",
+                                "url": "/ns/domains"
+                            },
+                            {
+                                "code": "domainGroup",
+                                "name": "域名分组",
+                                "url": "/ns/domains/groups"
+                            },
+                            {
+                                "code": "domainBatch",
+                                "name": "批量操作",
+                                "url": "/ns/domains/batch"
+                            },
+                            {
+                                "code": "route",
+                                "name": "线路管理",
+                                "url": "/ns/routes"
+                            },
+                            {
+                                "code": "plan",
+                                "name": "套餐",
+                                "url": "/ns/plans"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "finance",
+                        "icon": "dollar sign",
+                        "isOn": true,
+                        "name": "财务管理",
+                        "subItems": [
+                            {
+                                "code": "overview",
+                                "name": "概览",
+                                "url": "/finance"
+                            },
+                            {
+                                "code": "bills",
+                                "name": "费用账单",
+                                "url": "/finance/bills"
+                            },
+                            {
+                                "code": "logs",
+                                "name": "收支明细",
+                                "url": "/finance/logs"
+                            },
+                            {
+                                "code": "charge",
+                                "name": "充值",
+                                "url": "/finance/charge"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "tickets",
+                        "icon": "ticket",
+                        "isOn": true,
+                        "name": "工单系统"
+                    },
+                    {
+                        "code": "acl",
+                        "icon": "address book",
+                        "isOn": true,
+                        "name": "访问控制"
+                    }
+                ],
+                "teaName": "FlexCDN演示",
+                "teaPageFooterHTML": "",
+                "teaRole": "user",
+                "teaShowIndexPage": false,
+                "teaShowPageFooter": false,
+                "teaSubMenu": "servers",
+                "teaSubMenus": [],
+                "teaTabbar": [],
+                "teaTheme": "violet",
+                "teaTitle": "FlexCDN用户系统演示",
+                "teaUserAvatar": "",
+                "teaVersion": "1.1.1"
+            },
+            "message": ""
+        }
+    },
+    {
+        url: "/servers/certs/selectPopup",
+        method: "get",
+        response: {
+            "code": 200,
+            "data": {
+                "baseURL": "/servers/certs/selectPopup?selectedCertIds=3&serverId=1",
+                "certInfos": [
+                    {
+                        "beginDay": "2025-03-19",
+                        "countServers": 0,
+                        "endDay": "2025-06-17",
+                        "isAvailable": false,
+                        "isExpired": true,
+                        "isSelected": false
+                    }
+                ],
+                "certs": [
+                    {
+                        "id": 5,
+                        "isOn": true,
+                        "name": "a",
+                        "description": "",
+                        "certData": null,
+                        "keyData": null,
+                        "serverName": "",
+                        "isCA": false,
+                        "isACME": false,
+                        "isSelfSigned": false,
+                        "timeBeginAt": 1742344996,
+                        "timeEndAt": 1750120995,
+                        "dnsNames": [
+                            "*.isafe-tech.com",
+                            "isafe-tech.com"
+                        ],
+                        "commonNames": [
+                            "E5",
+                            "ISRG Root X1"
+                        ],
+                        "ocsp": null,
+                        "ocspExpiresAt": 0,
+                        "ocspError": ""
+                    }
+                ],
+                "firstMenuItem": "",
+                "keyword": "",
+                "leftMenuItem": "cert",
+                "leftMenuItems": [
+                    {
+                        "isActive": true,
+                        "name": "证书",
+                        "url": "/servers/certs"
+                    }
+                ],
+                "mainMenu": "",
+                "mainTab": "",
+                "page": {
+                    "offset": 0,
+                    "size": 10,
+                    "current": 1,
+                    "max": 1,
+                    "total": 1,
+                    "path": "/servers/certs/selectPopup",
+                    "query": {
+                        "searchingType": [
+                            "all"
+                        ],
+                        "selectedCertIds": [
+                            "3"
+                        ],
+                        "serverId": [
+                            "1"
+                        ]
+                    }
+                },
+                "searchingDomains": [
+                    "example.com",
+                    "www.example.com"
+                ],
+                "searchingType": "all",
+                "selectedCertIds": "3",
+                "teaBadge": 0,
+                "teaCommon": {
+                    "teaIsPlus": true,
+                    "teaLogoFileId": 0,
+                    "teaShowVersion": true,
+                    "teaUsername": "默认用户"
+                },
+                "teaDemoEnabled": false,
+                "teaDocURL": "",
+                "teaFaviconFileId": 0,
+                "teaFrontMode": "",
+                "teaIsSuper": false,
+                "teaLang": "zh-cn",
+                "teaMenu": "servers",
+                "teaModules": [
+                    {
+                        "code": "dashboard",
+                        "icon": "dashboard",
+                        "isOn": true,
+                        "name": "概览",
+                        "subItems": []
+                    },
+                    {
+                        "code": "servers",
+                        "icon": "pi-sitemap",
+                        "isOn": true,
+                        "name": "CDN加速",
+                        "subItems": [
+                            {
+                                "code": "servers",
+                                "name": "我的网站",
+                                "url": "/servers"
+                            },
+                            {
+                                "code": "cache",
+                                "name": "刷新预热",
+                                "url": "/servers/cache"
+                            },
+                            {
+                                "code": "certs",
+                                "name": "证书管理",
+                                "url": "/servers/certs"
+                            },
+                            {
+                                "code": "acme",
+                                "isOn": true,
+                                "name": "证书申请",
+                                "url": "/servers/certs/acme"
+                            },
+                            {
+                                "code": "trafficStat",
+                                "isOn": true,
+                                "name": "用量统计",
+                                "url": "/servers/traffic-stats"
+                            },
+                            {
+                                "code": "fee",
+                                "isOn": false,
+                                "name": "计费方式",
+                                "url": "/servers/fee"
+                            },
+                            {
+                                "code": "trafficPackage",
+                                "isOn": false,
+                                "name": "流量包",
+                                "url": "/servers/packages"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "lb",
+                        "icon": "paper plane",
+                        "isOn": true,
+                        "name": "负载均衡"
+                    },
+                    {
+                        "code": "waf",
+                        "icon": "magnet",
+                        "isOn": true,
+                        "name": "WAF安全",
+                        "subItems": [
+                            {
+                                "code": "overview",
+                                "name": "概览",
+                                "url": "/waf"
+                            },
+                            {
+                                "code": "wafLogs",
+                                "name": "拦截日志",
+                                "url": "/waf/logs"
+                            },
+                            {
+                                "code": "iplist",
+                                "name": "拦截IP",
+                                "url": "/waf/iplists"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "plans",
+                        "icon": "puzzle piece",
+                        "isOn": true,
+                        "name": "套餐管理"
+                    },
+                    {
+                        "code": "anti-ddos",
+                        "icon": "shield",
+                        "isOn": true,
+                        "name": "DDoS高防",
+                        "subItems": [
+                            {
+                                "code": "instance",
+                                "name": "实例列表",
+                                "url": "/anti-ddos/instances"
+                            },
+                            {
+                                "code": "package",
+                                "name": "购买实例",
+                                "url": "/anti-ddos/packages"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "ns",
+                        "icon": "globe",
+                        "isOn": true,
+                        "name": "域名解析",
+                        "subItems": [
+                            {
+                                "code": "domain",
+                                "name": "我的域名",
+                                "url": "/ns/domains"
+                            },
+                            {
+                                "code": "domainGroup",
+                                "name": "域名分组",
+                                "url": "/ns/domains/groups"
+                            },
+                            {
+                                "code": "domainBatch",
+                                "name": "批量操作",
+                                "url": "/ns/domains/batch"
+                            },
+                            {
+                                "code": "route",
+                                "name": "线路管理",
+                                "url": "/ns/routes"
+                            },
+                            {
+                                "code": "plan",
+                                "name": "套餐",
+                                "url": "/ns/plans"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "finance",
+                        "icon": "dollar sign",
+                        "isOn": true,
+                        "name": "财务管理",
+                        "subItems": [
+                            {
+                                "code": "overview",
+                                "name": "概览",
+                                "url": "/finance"
+                            },
+                            {
+                                "code": "bills",
+                                "name": "费用账单",
+                                "url": "/finance/bills"
+                            },
+                            {
+                                "code": "logs",
+                                "name": "收支明细",
+                                "url": "/finance/logs"
+                            },
+                            {
+                                "code": "charge",
+                                "name": "充值",
+                                "url": "/finance/charge"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "tickets",
+                        "icon": "ticket",
+                        "isOn": true,
+                        "name": "工单系统"
+                    },
+                    {
+                        "code": "acl",
+                        "icon": "address book",
+                        "isOn": true,
+                        "name": "访问控制"
+                    }
+                ],
+                "teaName": "FlexCDN演示",
+                "teaPageFooterHTML": "",
+                "teaRole": "user",
+                "teaShowIndexPage": false,
+                "teaShowPageFooter": false,
+                "teaSubMenu": "certs",
+                "teaSubMenus": [],
+                "teaTabbar": [],
+                "teaTheme": "violet",
+                "teaTitle": "FlexCDN用户系统演示",
+                "teaUserAvatar": "",
+                "teaVersion": "1.1.1",
+                "totalAll": 1,
+                "totalMatch": 0,
+                "viewSize": "normal"
+            },
+            "message": ""
+        }
+    },
+    {
+        url: "/servers/certs/uploadBatchPopup",
+        method: "get",
+        response: {
+            "code": 200,
+            "data": {
+                "firstMenuItem": "",
+                "leftMenuItem": "cert",
+                "leftMenuItems": [
+                    {
+                        "isActive": true,
+                        "name": "证书",
+                        "url": "/servers/certs"
+                    }
+                ],
+                "mainMenu": "",
+                "mainTab": "",
+                "teaBadge": 0,
+                "teaCommon": {
+                    "teaIsPlus": true,
+                    "teaLogoFileId": 0,
+                    "teaShowVersion": true,
+                    "teaUsername": "默认用户"
+                },
+                "teaDemoEnabled": false,
+                "teaDocURL": "",
+                "teaFaviconFileId": 0,
+                "teaFrontMode": "",
+                "teaIsSuper": false,
+                "teaLang": "zh-cn",
+                "teaMenu": "servers",
+                "teaModules": [
+                    {
+                        "code": "dashboard",
+                        "icon": "dashboard",
+                        "isOn": true,
+                        "name": "概览",
+                        "subItems": []
+                    },
+                    {
+                        "code": "servers",
+                        "icon": "pi-sitemap",
+                        "isOn": true,
+                        "name": "CDN加速",
+                        "subItems": [
+                            {
+                                "code": "servers",
+                                "name": "我的网站",
+                                "url": "/servers"
+                            },
+                            {
+                                "code": "cache",
+                                "name": "刷新预热",
+                                "url": "/servers/cache"
+                            },
+                            {
+                                "code": "certs",
+                                "name": "证书管理",
+                                "url": "/servers/certs"
+                            },
+                            {
+                                "code": "acme",
+                                "isOn": true,
+                                "name": "证书申请",
+                                "url": "/servers/certs/acme"
+                            },
+                            {
+                                "code": "trafficStat",
+                                "isOn": true,
+                                "name": "用量统计",
+                                "url": "/servers/traffic-stats"
+                            },
+                            {
+                                "code": "fee",
+                                "isOn": false,
+                                "name": "计费方式",
+                                "url": "/servers/fee"
+                            },
+                            {
+                                "code": "trafficPackage",
+                                "isOn": false,
+                                "name": "流量包",
+                                "url": "/servers/packages"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "lb",
+                        "icon": "paper plane",
+                        "isOn": true,
+                        "name": "负载均衡"
+                    },
+                    {
+                        "code": "waf",
+                        "icon": "magnet",
+                        "isOn": true,
+                        "name": "WAF安全",
+                        "subItems": [
+                            {
+                                "code": "overview",
+                                "name": "概览",
+                                "url": "/waf"
+                            },
+                            {
+                                "code": "wafLogs",
+                                "name": "拦截日志",
+                                "url": "/waf/logs"
+                            },
+                            {
+                                "code": "iplist",
+                                "name": "拦截IP",
+                                "url": "/waf/iplists"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "plans",
+                        "icon": "puzzle piece",
+                        "isOn": true,
+                        "name": "套餐管理"
+                    },
+                    {
+                        "code": "anti-ddos",
+                        "icon": "shield",
+                        "isOn": true,
+                        "name": "DDoS高防",
+                        "subItems": [
+                            {
+                                "code": "instance",
+                                "name": "实例列表",
+                                "url": "/anti-ddos/instances"
+                            },
+                            {
+                                "code": "package",
+                                "name": "购买实例",
+                                "url": "/anti-ddos/packages"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "ns",
+                        "icon": "globe",
+                        "isOn": true,
+                        "name": "域名解析",
+                        "subItems": [
+                            {
+                                "code": "domain",
+                                "name": "我的域名",
+                                "url": "/ns/domains"
+                            },
+                            {
+                                "code": "domainGroup",
+                                "name": "域名分组",
+                                "url": "/ns/domains/groups"
+                            },
+                            {
+                                "code": "domainBatch",
+                                "name": "批量操作",
+                                "url": "/ns/domains/batch"
+                            },
+                            {
+                                "code": "route",
+                                "name": "线路管理",
+                                "url": "/ns/routes"
+                            },
+                            {
+                                "code": "plan",
+                                "name": "套餐",
+                                "url": "/ns/plans"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "finance",
+                        "icon": "dollar sign",
+                        "isOn": true,
+                        "name": "财务管理",
+                        "subItems": [
+                            {
+                                "code": "overview",
+                                "name": "概览",
+                                "url": "/finance"
+                            },
+                            {
+                                "code": "bills",
+                                "name": "费用账单",
+                                "url": "/finance/bills"
+                            },
+                            {
+                                "code": "logs",
+                                "name": "收支明细",
+                                "url": "/finance/logs"
+                            },
+                            {
+                                "code": "charge",
+                                "name": "充值",
+                                "url": "/finance/charge"
+                            }
+                        ]
+                    },
+                    {
+                        "code": "tickets",
+                        "icon": "ticket",
+                        "isOn": true,
+                        "name": "工单系统"
+                    },
+                    {
+                        "code": "acl",
+                        "icon": "address book",
+                        "isOn": true,
+                        "name": "访问控制"
+                    }
+                ],
+                "teaName": "FlexCDN演示",
+                "teaPageFooterHTML": "",
+                "teaRole": "user",
+                "teaShowIndexPage": false,
+                "teaShowPageFooter": false,
+                "teaSubMenu": "certs",
+                "teaSubMenus": [],
+                "teaTabbar": [],
+                "teaTheme": "violet",
+                "teaTitle": "FlexCDN用户系统演示",
+                "teaUserAvatar": "",
+                "teaVersion": "1.1.1"
+            },
+            "message": ""
+        }
     }
 ] as MockMethod[]
 

+ 4 - 4
src/components/server/OriginListBox.vue

@@ -92,15 +92,15 @@ const updateOriginIsOn = function (originId, originAddr, isOn) {
 
 <template>
 	<div>
-		<h5 class="!mb-4">主要源站
-			<a href="" @click.prevent="createPrimaryOrigin()">[添加主要源站]</a>
+		<h5 class="!mb-4 flex items-center">主要源站
+			<a href="" @click.prevent="createPrimaryOrigin()">添加主要源站</a>
 			<TipIcon content="主要源站为日常使用的源站,如果添加多个源站,可以根据权重随机调用。"></TipIcon>
 		</h5>
 		<p class="comment" v-if="primaryOrigins.length == 0">暂时还没有主要源站。</p>
 		<OriginListTable v-if="primaryOrigins.length > 0" :v-origins="vPrimaryOrigins" :v-origin-type="'primary'" @delete-origin="deleteOrigin" @update-origin="updateOrigin" @update-origin-is-on="updateOriginIsOn"></OriginListTable>
 
-		<h5 class="group-header">备用源站
-			<a href="" @click.prevent="createBackupOrigin()">[添加备用源站]</a>
+		<h5 class="group-header flex items-center">备用源站
+			<a href="" @click.prevent="createBackupOrigin()">添加备用源站</a>
 			<TipIcon content="备用源站为备用的源站,当所有的主要源站都无法访问时,会自动切换到备用源站;如果有多个备用源站,也可以根据权重随机调用;如果主要源站中的任一源站恢复可访问状态时,系统会自动切换回主要源站。"></TipIcon>
 		</h5>
 		<p class="comment" v-if="backupOrigins.length == 0">暂时还没有备用源站。</p>

+ 14 - 9
src/components/ui/TInputFile.vue

@@ -13,7 +13,7 @@
 import FileUpload from "primevue/fileupload";
 import TLabel from "@/components/ui/TLabel.vue";
 import TButton from "@/components/ui/TButton.vue";
-import {inject} from "vue";
+import { inject } from "vue";
 
 const props = defineProps(["name", "multiple"])
 
@@ -71,20 +71,25 @@ defineExpose({
 </script>
 
 <template>
-	<FileUpload mode="advanced" @select="onFilesChosen" :multiple="multiple" :customUpload="true" :pt="{input:{name:name}}">
-		<template #header="{files, chooseCallback, clearCallback}">
+	<FileUpload mode="advanced" @select="onFilesChosen" :multiple="multiple" :customUpload="true"
+		:pt="{ input: { name: name } }">
+		<template #header="{ files, chooseCallback, clearCallback }">
 			<div class="flex gap-4">
 				<!-- TODO 需要多语言 -->
-				<TButton secondary="" icon="pi pi-plus" @click="chooseFiles($event, chooseCallback)"
-						 label="选择文件" :disabled="!multiple && files.length >= 1" size="small"></TButton>
-				<TButton secondary="" icon="pi pi-times" severity="secondary" @click="clearFiles($event, clearCallback)"
-						 v-if="files.length > 0" size="small"></TButton>
+				<TButton secondary="" icon="pi pi-plus" @click="chooseFiles($event, chooseCallback)" label="选择文件"
+					:disabled="!multiple && files.length >= 1" size="small"></TButton>
+				<!-- <TButton secondary="" icon="pi pi-times" severity="secondary" @click="clearFiles($event, clearCallback)"
+						 v-if="files.length > 0" size="small"></TButton> -->
+				<div class="flex items-center cursor-pointer text-[#657080] hover:text-[var(--p-primary-color)] ml-[20px]" @click="clearFiles($event, clearCallback)" v-if="files.length > 0">
+					<i class="icon small pi pi-times"></i>
+				</div>
 			</div>
 		</template>
-		<template #content="{files}">
+		<template #content="{ files }">
 			<div class="flex gap-3 px-4 pb-4" v-if="files.length > 0">
 				<div v-if="multiple">
-					<div v-if="files.length < 3" class="flex gap-2">
+					<div v-if="files.length < 3" class="flex gap-2 items-center">
+						<span class="text-[#657080]">已选文件:</span>
 						<TLabel v-for="file in files" size="small">{{ file.name }}</TLabel>
 					</div>
 					<div v-else>

+ 2274 - 2
src/views/index/initData.js

@@ -1067,7 +1067,7 @@ const dataMaps = {
         },
         "userPlans": []
     },
-    "/servers/server/settings/serverNames":{
+    "/servers/server/settings/serverNames": {
         "auditingResult": {
             "createdTime": "1970-01-01 08:00:00",
             "isOk": true,
@@ -1599,7 +1599,7 @@ const dataMaps = {
         "teaUserAvatar": "",
         "teaVersion": "1.1.1"
     },
-    "/servers/server/settings/dns":{
+    "/servers/server/settings/dns": {
         "dnsDomain": "",
         "dnsName": "58d058e7",
         "firstMenuItem": "index",
@@ -2898,6 +2898,2278 @@ const dataMaps = {
         "teaUserAvatar": "",
         "teaVersion": "1.1.1",
         "userPlans": []
+    },
+    "/servers/server/settings/plan": {
+        "firstMenuItem": "index",
+        "hasTrafficLimit": false,
+        "leftMenuActiveItem": {
+            "isActive": true,
+            "isOn": false,
+            "name": "套餐",
+            "subName": "",
+            "url": "/servers/server/settings/plan?serverId=1"
+        },
+        "leftMenuItemIsDisabled": false,
+        "leftMenuItems": [
+            {
+                "isActive": false,
+                "isOn": true,
+                "name": "域名",
+                "url": "/servers/server/settings/serverNames?serverId=1",
+                "label": "域名"
+            },
+            {
+                "isActive": false,
+                "name": "DNS",
+                "url": "/servers/server/settings/dns?serverId=1",
+                "label": "DNS"
+            },
+            {
+                "isActive": true,
+                "isOn": false,
+                "name": "套餐",
+                "subName": "",
+                "url": "/servers/server/settings/plan?serverId=1",
+                "label": "套餐"
+            },
+            {
+                "isActive": false,
+                "isOff": false,
+                "isOn": true,
+                "name": "HTTP",
+                "url": "/servers/server/settings/http?serverId=1",
+                "label": "HTTP"
+            },
+            {
+                "isActive": false,
+                "isOff": false,
+                "isOn": true,
+                "name": "HTTPS",
+                "url": "/servers/server/settings/https?serverId=1",
+                "label": "HTTPS"
+            },
+            {
+                "configCode": "reverseProxy",
+                "isActive": false,
+                "isOn": true,
+                "name": "源站",
+                "url": "/servers/server/settings/reverseProxy?serverId=1",
+                "label": "源站"
+            },
+            {
+                "isActive": false,
+                "name": "-",
+                "url": "",
+                "label": "-"
+            },
+            {
+                "configCode": "uam",
+                "isActive": false,
+                "isImportant": false,
+                "isOn": false,
+                "name": "5秒盾",
+                "url": "/servers/server/settings/uam?serverId=1",
+                "label": "5秒盾"
+            },
+            {
+                "configCode": "cc",
+                "isActive": false,
+                "isImportant": false,
+                "isOn": false,
+                "name": "CC防护",
+                "url": "/servers/server/settings/cc?serverId=1",
+                "label": "CC防护"
+            },
+            {
+                "isActive": false,
+                "name": "-",
+                "url": "",
+                "label": "-"
+            },
+            {
+                "configCode": "hostRedirects",
+                "isActive": false,
+                "isOn": false,
+                "name": "URL跳转",
+                "url": "/servers/server/settings/redirects?serverId=1",
+                "label": "URL跳转"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "重写规则",
+                "url": "/servers/server/settings/rewrite?serverId=1",
+                "label": "重写规则"
+            },
+            {
+                "configCode": "waf",
+                "isActive": false,
+                "isOn": false,
+                "name": "WAF",
+                "url": "/servers/server/settings/waf?serverId=1",
+                "label": "WAF"
+            },
+            {
+                "configCode": "cache",
+                "isActive": false,
+                "isOn": false,
+                "name": "缓存",
+                "url": "/servers/server/settings/cache?serverId=1",
+                "label": "缓存"
+            },
+            {
+                "configCode": "auth",
+                "isActive": false,
+                "isOn": false,
+                "name": "访问鉴权",
+                "url": "/servers/server/settings/access?serverId=1",
+                "label": "访问鉴权"
+            },
+            {
+                "configCode": "referers",
+                "isActive": false,
+                "isOn": false,
+                "name": "防盗链",
+                "url": "/servers/server/settings/referers?serverId=1",
+                "label": "防盗链"
+            },
+            {
+                "configCode": "userAgent",
+                "isActive": false,
+                "isOn": false,
+                "name": "UA名单",
+                "url": "/servers/server/settings/userAgent?serverId=1",
+                "label": "UA名单"
+            },
+            {
+                "configCode": "accessLog",
+                "isActive": false,
+                "isOn": true,
+                "name": "访问日志",
+                "url": "/servers/server/settings/accessLog?serverId=1",
+                "label": "访问日志"
+            },
+            {
+                "configCode": "compression",
+                "isActive": false,
+                "isOn": false,
+                "name": "内容压缩",
+                "url": "/servers/server/settings/compression?serverId=1",
+                "label": "内容压缩"
+            },
+            {
+                "configCode": "pages",
+                "isActive": false,
+                "isOn": false,
+                "name": "自定义页面",
+                "url": "/servers/server/settings/pages?serverId=1",
+                "label": "自定义页面"
+            },
+            {
+                "isActive": false,
+                "isOn": true,
+                "name": "HTTP报头",
+                "url": "/servers/server/settings/headers?serverId=1",
+                "label": "HTTP报头"
+            },
+            {
+                "configCode": "websocket",
+                "isActive": false,
+                "isOn": true,
+                "name": "Websocket",
+                "url": "/servers/server/settings/websocket?serverId=1",
+                "label": "Websocket"
+            },
+            {
+                "configCode": "grpc",
+                "isActive": false,
+                "isOn": false,
+                "name": "gRPC",
+                "url": "/servers/server/settings/grpc?serverId=1",
+                "label": "gRPC"
+            },
+            {
+                "configCode": "webp",
+                "isActive": false,
+                "isOn": false,
+                "name": "WebP",
+                "url": "/servers/server/settings/webp?serverId=1",
+                "label": "WebP"
+            },
+            {
+                "configCode": "optimization",
+                "isActive": false,
+                "isOn": false,
+                "name": "页面优化",
+                "url": "/servers/server/settings/optimization?serverId=1",
+                "label": "页面优化"
+            },
+            {
+                "configCode": "multimedia",
+                "isActive": false,
+                "isOn": false,
+                "name": "音视频设置",
+                "url": "/servers/server/settings/multimedia?serverId=1",
+                "label": "音视频设置"
+            },
+            {
+                "configCode": "stat",
+                "isActive": false,
+                "isOn": true,
+                "name": "统计",
+                "url": "/servers/server/settings/stat?serverId=1",
+                "label": "统计"
+            },
+            {
+                "configCode": "charset",
+                "isActive": false,
+                "isOn": false,
+                "name": "字符编码",
+                "url": "/servers/server/settings/charset?serverId=1",
+                "label": "字符编码"
+            },
+            {
+                "isActive": false,
+                "name": "-",
+                "url": "",
+                "label": "-"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "分组",
+                "url": "/servers/server/settings/groups?serverId=1",
+                "label": "分组"
+            },
+            {
+                "configCode": "remoteAddr",
+                "isActive": false,
+                "isOn": true,
+                "name": "访客IP地址",
+                "url": "/servers/server/settings/remoteAddr?serverId=1",
+                "label": "访客IP地址"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "请求限制",
+                "url": "/servers/server/settings/requestLimit?serverId=1",
+                "label": "请求限制"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "边缘脚本",
+                "url": "/servers/server/settings/requestScripts?serverId=1",
+                "label": "边缘脚本"
+            }
+        ],
+        "mainMenu": "",
+        "mainTab": "setting",
+        "mustUsePlan": true,
+        "secondMenuItem": "plan",
+        "server": {
+            "clusterId": 1,
+            "id": 1,
+            "name": "example.com"
+        },
+        "serverFamily": "http",
+        "serverId": 1,
+        "teaBadge": 0,
+        "teaCommon": {
+            "teaIsPlus": true,
+            "teaLogoFileId": 0,
+            "teaShowVersion": true,
+            "teaUsername": "默认用户"
+        },
+        "teaDemoEnabled": false,
+        "teaDocURL": "",
+        "teaFaviconFileId": 0,
+        "teaFrontMode": "",
+        "teaIsSuper": false,
+        "teaLang": "zh-cn",
+        "teaMenu": "servers",
+        "teaModules": [
+            {
+                "code": "dashboard",
+                "icon": "dashboard",
+                "isOn": true,
+                "name": "概览",
+                "subItems": []
+            },
+            {
+                "code": "servers",
+                "icon": "pi-sitemap",
+                "isOn": true,
+                "name": "CDN加速",
+                "subItems": [
+                    {
+                        "code": "servers",
+                        "name": "我的网站",
+                        "url": "/servers"
+                    },
+                    {
+                        "code": "cache",
+                        "name": "刷新预热",
+                        "url": "/servers/cache"
+                    },
+                    {
+                        "code": "certs",
+                        "name": "证书管理",
+                        "url": "/servers/certs"
+                    },
+                    {
+                        "code": "acme",
+                        "isOn": true,
+                        "name": "证书申请",
+                        "url": "/servers/certs/acme"
+                    },
+                    {
+                        "code": "trafficStat",
+                        "isOn": true,
+                        "name": "用量统计",
+                        "url": "/servers/traffic-stats"
+                    },
+                    {
+                        "code": "fee",
+                        "isOn": false,
+                        "name": "计费方式",
+                        "url": "/servers/fee"
+                    },
+                    {
+                        "code": "trafficPackage",
+                        "isOn": false,
+                        "name": "流量包",
+                        "url": "/servers/packages"
+                    }
+                ]
+            },
+            {
+                "code": "lb",
+                "icon": "paper plane",
+                "isOn": true,
+                "name": "负载均衡"
+            },
+            {
+                "code": "waf",
+                "icon": "magnet",
+                "isOn": true,
+                "name": "WAF安全",
+                "subItems": [
+                    {
+                        "code": "overview",
+                        "name": "概览",
+                        "url": "/waf"
+                    },
+                    {
+                        "code": "wafLogs",
+                        "name": "拦截日志",
+                        "url": "/waf/logs"
+                    },
+                    {
+                        "code": "iplist",
+                        "name": "拦截IP",
+                        "url": "/waf/iplists"
+                    }
+                ]
+            },
+            {
+                "code": "plans",
+                "icon": "puzzle piece",
+                "isOn": true,
+                "name": "套餐管理"
+            },
+            {
+                "code": "anti-ddos",
+                "icon": "shield",
+                "isOn": true,
+                "name": "DDoS高防",
+                "subItems": [
+                    {
+                        "code": "instance",
+                        "name": "实例列表",
+                        "url": "/anti-ddos/instances"
+                    },
+                    {
+                        "code": "package",
+                        "name": "购买实例",
+                        "url": "/anti-ddos/packages"
+                    }
+                ]
+            },
+            {
+                "code": "ns",
+                "icon": "globe",
+                "isOn": true,
+                "name": "域名解析",
+                "subItems": [
+                    {
+                        "code": "domain",
+                        "name": "我的域名",
+                        "url": "/ns/domains"
+                    },
+                    {
+                        "code": "domainGroup",
+                        "name": "域名分组",
+                        "url": "/ns/domains/groups"
+                    },
+                    {
+                        "code": "domainBatch",
+                        "name": "批量操作",
+                        "url": "/ns/domains/batch"
+                    },
+                    {
+                        "code": "route",
+                        "name": "线路管理",
+                        "url": "/ns/routes"
+                    },
+                    {
+                        "code": "plan",
+                        "name": "套餐",
+                        "url": "/ns/plans"
+                    }
+                ]
+            },
+            {
+                "code": "finance",
+                "icon": "dollar sign",
+                "isOn": true,
+                "name": "财务管理",
+                "subItems": [
+                    {
+                        "code": "overview",
+                        "name": "概览",
+                        "url": "/finance"
+                    },
+                    {
+                        "code": "bills",
+                        "name": "费用账单",
+                        "url": "/finance/bills"
+                    },
+                    {
+                        "code": "logs",
+                        "name": "收支明细",
+                        "url": "/finance/logs"
+                    },
+                    {
+                        "code": "charge",
+                        "name": "充值",
+                        "url": "/finance/charge"
+                    }
+                ]
+            },
+            {
+                "code": "tickets",
+                "icon": "ticket",
+                "isOn": true,
+                "name": "工单系统"
+            },
+            {
+                "code": "acl",
+                "icon": "address book",
+                "isOn": true,
+                "name": "访问控制"
+            }
+        ],
+        "teaName": "FlexCDN演示",
+        "teaPageFooterHTML": "",
+        "teaRole": "user",
+        "teaShowIndexPage": false,
+        "teaShowPageFooter": false,
+        "teaSubMenu": "",
+        "teaSubMenus": [],
+        "teaTabbar": [
+            {
+                "icon": "",
+                "isActive": false,
+                "name": "网站列表",
+                "right": false,
+                "subName": "",
+                "url": "/servers"
+            },
+            {
+                "icon": "setting",
+                "isActive": true,
+                "name": "设置",
+                "right": false,
+                "subName": "",
+                "url": "/servers/server?serverId=1"
+            },
+            {
+                "icon": "chart area",
+                "isActive": false,
+                "name": "统计",
+                "right": false,
+                "subName": "",
+                "url": "/servers/server/stat?serverId=1"
+            },
+            {
+                "icon": "history",
+                "isActive": false,
+                "name": "访问日志",
+                "right": false,
+                "subName": "",
+                "url": "/servers/server/log?serverId=1"
+            }
+        ],
+        "teaTheme": "violet",
+        "teaTitle": "FlexCDN用户系统演示",
+        "teaUserAvatar": "",
+        "teaVersion": "1.1.1",
+        "trafficDailyFormat": "5.39MiB",
+        "trafficMonthlyFormat": "135.82MiB",
+        "userPlan": {
+            "id": 0
+        },
+        "userPlans": []
+    },
+    "/servers/server/settings/http": {
+        "canSpecifyPort": true,
+        "conflictingPorts": [],
+        "firstMenuItem": "index",
+        "httpConfig": {
+            "addresses": [
+                {
+                    "protocol": "http",
+                    "host": "",
+                    "portRange": "8080",
+                    "minPort": 8080,
+                    "maxPort": 8080
+                }
+            ],
+            "isOn": true
+        },
+        "leftMenuActiveItem": {
+            "isActive": true,
+            "isOff": false,
+            "isOn": true,
+            "name": "HTTP",
+            "url": "/servers/server/settings/http?serverId=1"
+        },
+        "leftMenuItemIsDisabled": false,
+        "leftMenuItems": [
+            {
+                "isActive": false,
+                "isOn": true,
+                "name": "域名",
+                "url": "/servers/server/settings/serverNames?serverId=1",
+                "label": "域名"
+            },
+            {
+                "isActive": false,
+                "name": "DNS",
+                "url": "/servers/server/settings/dns?serverId=1",
+                "label": "DNS"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "套餐",
+                "subName": "",
+                "url": "/servers/server/settings/plan?serverId=1",
+                "label": "套餐"
+            },
+            {
+                "isActive": true,
+                "isOff": false,
+                "isOn": true,
+                "name": "HTTP",
+                "url": "/servers/server/settings/http?serverId=1",
+                "label": "HTTP"
+            },
+            {
+                "isActive": false,
+                "isOff": false,
+                "isOn": true,
+                "name": "HTTPS",
+                "url": "/servers/server/settings/https?serverId=1",
+                "label": "HTTPS"
+            },
+            {
+                "configCode": "reverseProxy",
+                "isActive": false,
+                "isOn": true,
+                "name": "源站",
+                "url": "/servers/server/settings/reverseProxy?serverId=1",
+                "label": "源站"
+            },
+            {
+                "isActive": false,
+                "name": "-",
+                "url": "",
+                "label": "-"
+            },
+            {
+                "configCode": "uam",
+                "isActive": false,
+                "isImportant": false,
+                "isOn": false,
+                "name": "5秒盾",
+                "url": "/servers/server/settings/uam?serverId=1",
+                "label": "5秒盾"
+            },
+            {
+                "configCode": "cc",
+                "isActive": false,
+                "isImportant": false,
+                "isOn": false,
+                "name": "CC防护",
+                "url": "/servers/server/settings/cc?serverId=1",
+                "label": "CC防护"
+            },
+            {
+                "isActive": false,
+                "name": "-",
+                "url": "",
+                "label": "-"
+            },
+            {
+                "configCode": "hostRedirects",
+                "isActive": false,
+                "isOn": false,
+                "name": "URL跳转",
+                "url": "/servers/server/settings/redirects?serverId=1",
+                "label": "URL跳转"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "重写规则",
+                "url": "/servers/server/settings/rewrite?serverId=1",
+                "label": "重写规则"
+            },
+            {
+                "configCode": "waf",
+                "isActive": false,
+                "isOn": false,
+                "name": "WAF",
+                "url": "/servers/server/settings/waf?serverId=1",
+                "label": "WAF"
+            },
+            {
+                "configCode": "cache",
+                "isActive": false,
+                "isOn": false,
+                "name": "缓存",
+                "url": "/servers/server/settings/cache?serverId=1",
+                "label": "缓存"
+            },
+            {
+                "configCode": "auth",
+                "isActive": false,
+                "isOn": false,
+                "name": "访问鉴权",
+                "url": "/servers/server/settings/access?serverId=1",
+                "label": "访问鉴权"
+            },
+            {
+                "configCode": "referers",
+                "isActive": false,
+                "isOn": false,
+                "name": "防盗链",
+                "url": "/servers/server/settings/referers?serverId=1",
+                "label": "防盗链"
+            },
+            {
+                "configCode": "userAgent",
+                "isActive": false,
+                "isOn": false,
+                "name": "UA名单",
+                "url": "/servers/server/settings/userAgent?serverId=1",
+                "label": "UA名单"
+            },
+            {
+                "configCode": "accessLog",
+                "isActive": false,
+                "isOn": true,
+                "name": "访问日志",
+                "url": "/servers/server/settings/accessLog?serverId=1",
+                "label": "访问日志"
+            },
+            {
+                "configCode": "compression",
+                "isActive": false,
+                "isOn": false,
+                "name": "内容压缩",
+                "url": "/servers/server/settings/compression?serverId=1",
+                "label": "内容压缩"
+            },
+            {
+                "configCode": "pages",
+                "isActive": false,
+                "isOn": false,
+                "name": "自定义页面",
+                "url": "/servers/server/settings/pages?serverId=1",
+                "label": "自定义页面"
+            },
+            {
+                "isActive": false,
+                "isOn": true,
+                "name": "HTTP报头",
+                "url": "/servers/server/settings/headers?serverId=1",
+                "label": "HTTP报头"
+            },
+            {
+                "configCode": "websocket",
+                "isActive": false,
+                "isOn": true,
+                "name": "Websocket",
+                "url": "/servers/server/settings/websocket?serverId=1",
+                "label": "Websocket"
+            },
+            {
+                "configCode": "grpc",
+                "isActive": false,
+                "isOn": false,
+                "name": "gRPC",
+                "url": "/servers/server/settings/grpc?serverId=1",
+                "label": "gRPC"
+            },
+            {
+                "configCode": "webp",
+                "isActive": false,
+                "isOn": false,
+                "name": "WebP",
+                "url": "/servers/server/settings/webp?serverId=1",
+                "label": "WebP"
+            },
+            {
+                "configCode": "optimization",
+                "isActive": false,
+                "isOn": false,
+                "name": "页面优化",
+                "url": "/servers/server/settings/optimization?serverId=1",
+                "label": "页面优化"
+            },
+            {
+                "configCode": "multimedia",
+                "isActive": false,
+                "isOn": false,
+                "name": "音视频设置",
+                "url": "/servers/server/settings/multimedia?serverId=1",
+                "label": "音视频设置"
+            },
+            {
+                "configCode": "stat",
+                "isActive": false,
+                "isOn": true,
+                "name": "统计",
+                "url": "/servers/server/settings/stat?serverId=1",
+                "label": "统计"
+            },
+            {
+                "configCode": "charset",
+                "isActive": false,
+                "isOn": false,
+                "name": "字符编码",
+                "url": "/servers/server/settings/charset?serverId=1",
+                "label": "字符编码"
+            },
+            {
+                "isActive": false,
+                "name": "-",
+                "url": "",
+                "label": "-"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "分组",
+                "url": "/servers/server/settings/groups?serverId=1",
+                "label": "分组"
+            },
+            {
+                "configCode": "remoteAddr",
+                "isActive": false,
+                "isOn": true,
+                "name": "访客IP地址",
+                "url": "/servers/server/settings/remoteAddr?serverId=1",
+                "label": "访客IP地址"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "请求限制",
+                "url": "/servers/server/settings/requestLimit?serverId=1",
+                "label": "请求限制"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "边缘脚本",
+                "url": "/servers/server/settings/requestScripts?serverId=1",
+                "label": "边缘脚本"
+            }
+        ],
+        "mainMenu": "",
+        "mainTab": "setting",
+        "maxPort": 9999,
+        "minPort": 80,
+        "redirectToHTTPSConfig": {
+            "isPrior": false,
+            "isOn": false,
+            "status": 0,
+            "host": "",
+            "port": 0,
+            "onlyDomains": [],
+            "exceptDomains": []
+        },
+        "secondMenuItem": "http",
+        "server": {
+            "clusterId": 1,
+            "id": 1,
+            "name": "example.com"
+        },
+        "serverFamily": "http",
+        "serverId": 1,
+        "serverType": "httpProxy",
+        "teaBadge": 0,
+        "teaCommon": {
+            "teaIsPlus": true,
+            "teaLogoFileId": 0,
+            "teaShowVersion": true,
+            "teaUsername": "默认用户"
+        },
+        "teaDemoEnabled": false,
+        "teaDocURL": "",
+        "teaFaviconFileId": 0,
+        "teaFrontMode": "",
+        "teaIsSuper": false,
+        "teaLang": "zh-cn",
+        "teaMenu": "servers",
+        "teaModules": [
+            {
+                "code": "dashboard",
+                "icon": "dashboard",
+                "isOn": true,
+                "name": "概览",
+                "subItems": []
+            },
+            {
+                "code": "servers",
+                "icon": "pi-sitemap",
+                "isOn": true,
+                "name": "CDN加速",
+                "subItems": [
+                    {
+                        "code": "servers",
+                        "name": "我的网站",
+                        "url": "/servers"
+                    },
+                    {
+                        "code": "cache",
+                        "name": "刷新预热",
+                        "url": "/servers/cache"
+                    },
+                    {
+                        "code": "certs",
+                        "name": "证书管理",
+                        "url": "/servers/certs"
+                    },
+                    {
+                        "code": "acme",
+                        "isOn": true,
+                        "name": "证书申请",
+                        "url": "/servers/certs/acme"
+                    },
+                    {
+                        "code": "trafficStat",
+                        "isOn": true,
+                        "name": "用量统计",
+                        "url": "/servers/traffic-stats"
+                    },
+                    {
+                        "code": "fee",
+                        "isOn": false,
+                        "name": "计费方式",
+                        "url": "/servers/fee"
+                    },
+                    {
+                        "code": "trafficPackage",
+                        "isOn": false,
+                        "name": "流量包",
+                        "url": "/servers/packages"
+                    }
+                ]
+            },
+            {
+                "code": "lb",
+                "icon": "paper plane",
+                "isOn": true,
+                "name": "负载均衡"
+            },
+            {
+                "code": "waf",
+                "icon": "magnet",
+                "isOn": true,
+                "name": "WAF安全",
+                "subItems": [
+                    {
+                        "code": "overview",
+                        "name": "概览",
+                        "url": "/waf"
+                    },
+                    {
+                        "code": "wafLogs",
+                        "name": "拦截日志",
+                        "url": "/waf/logs"
+                    },
+                    {
+                        "code": "iplist",
+                        "name": "拦截IP",
+                        "url": "/waf/iplists"
+                    }
+                ]
+            },
+            {
+                "code": "plans",
+                "icon": "puzzle piece",
+                "isOn": true,
+                "name": "套餐管理"
+            },
+            {
+                "code": "anti-ddos",
+                "icon": "shield",
+                "isOn": true,
+                "name": "DDoS高防",
+                "subItems": [
+                    {
+                        "code": "instance",
+                        "name": "实例列表",
+                        "url": "/anti-ddos/instances"
+                    },
+                    {
+                        "code": "package",
+                        "name": "购买实例",
+                        "url": "/anti-ddos/packages"
+                    }
+                ]
+            },
+            {
+                "code": "ns",
+                "icon": "globe",
+                "isOn": true,
+                "name": "域名解析",
+                "subItems": [
+                    {
+                        "code": "domain",
+                        "name": "我的域名",
+                        "url": "/ns/domains"
+                    },
+                    {
+                        "code": "domainGroup",
+                        "name": "域名分组",
+                        "url": "/ns/domains/groups"
+                    },
+                    {
+                        "code": "domainBatch",
+                        "name": "批量操作",
+                        "url": "/ns/domains/batch"
+                    },
+                    {
+                        "code": "route",
+                        "name": "线路管理",
+                        "url": "/ns/routes"
+                    },
+                    {
+                        "code": "plan",
+                        "name": "套餐",
+                        "url": "/ns/plans"
+                    }
+                ]
+            },
+            {
+                "code": "finance",
+                "icon": "dollar sign",
+                "isOn": true,
+                "name": "财务管理",
+                "subItems": [
+                    {
+                        "code": "overview",
+                        "name": "概览",
+                        "url": "/finance"
+                    },
+                    {
+                        "code": "bills",
+                        "name": "费用账单",
+                        "url": "/finance/bills"
+                    },
+                    {
+                        "code": "logs",
+                        "name": "收支明细",
+                        "url": "/finance/logs"
+                    },
+                    {
+                        "code": "charge",
+                        "name": "充值",
+                        "url": "/finance/charge"
+                    }
+                ]
+            },
+            {
+                "code": "tickets",
+                "icon": "ticket",
+                "isOn": true,
+                "name": "工单系统"
+            },
+            {
+                "code": "acl",
+                "icon": "address book",
+                "isOn": true,
+                "name": "访问控制"
+            }
+        ],
+        "teaName": "FlexCDN演示",
+        "teaPageFooterHTML": "",
+        "teaRole": "user",
+        "teaShowIndexPage": false,
+        "teaShowPageFooter": false,
+        "teaSubMenu": "",
+        "teaSubMenus": [],
+        "teaTabbar": [
+            {
+                "icon": "",
+                "isActive": false,
+                "name": "网站列表",
+                "right": false,
+                "subName": "",
+                "url": "/servers"
+            },
+            {
+                "icon": "setting",
+                "isActive": true,
+                "name": "设置",
+                "right": false,
+                "subName": "",
+                "url": "/servers/server?serverId=1"
+            },
+            {
+                "icon": "chart area",
+                "isActive": false,
+                "name": "统计",
+                "right": false,
+                "subName": "",
+                "url": "/servers/server/stat?serverId=1"
+            },
+            {
+                "icon": "history",
+                "isActive": false,
+                "name": "访问日志",
+                "right": false,
+                "subName": "",
+                "url": "/servers/server/log?serverId=1"
+            }
+        ],
+        "teaTheme": "violet",
+        "teaTitle": "FlexCDN用户系统演示",
+        "teaUserAvatar": "",
+        "teaVersion": "1.1.1",
+        "webId": 1
+    },
+    "/servers/server/settings/https": {
+        "canSpecifyPort": true,
+        "conflictingPorts": [],
+        "firstMenuItem": "index",
+        "http3FeatureEnabled": true,
+        "httpsConfig": {
+            "addresses": [
+                {
+                    "protocol": "https",
+                    "host": "",
+                    "portRange": "8443",
+                    "minPort": 8443,
+                    "maxPort": 8443
+                }
+            ],
+            "isOn": true,
+            "sslPolicy": {
+                "id": 1,
+                "isOn": true,
+                "certRefs": [
+                    {
+                        "isOn": true,
+                        "certId": 3
+                    }
+                ],
+                "certs": [
+                    {
+                        "id": 3,
+                        "isOn": true,
+                        "name": "example.com等2个域名",
+                        "description": "自签名证书",
+                        "certData": null,
+                        "keyData": null,
+                        "serverName": "",
+                        "isCA": false,
+                        "isACME": false,
+                        "isSelfSigned": true,
+                        "timeBeginAt": 1745909752,
+                        "timeEndAt": 2061442552,
+                        "dnsNames": [
+                            "example.com",
+                            "www.example.com"
+                        ],
+                        "commonNames": [
+                            "FlexCDN"
+                        ],
+                        "ocsp": null,
+                        "ocspExpiresAt": 0,
+                        "ocspError": ""
+                    }
+                ],
+                "clientAuthType": 0,
+                "clientCARefs": [],
+                "clientCACerts": [],
+                "minVersion": "TLS 1.1",
+                "cipherSuitesIsOn": false,
+                "cipherSuites": [],
+                "hsts": null,
+                "http2Enabled": true,
+                "http3Enabled": false,
+                "ocspIsOn": false
+            },
+            "supportsHTTP3": false
+        },
+        "leftMenuActiveItem": {
+            "isActive": true,
+            "isOff": false,
+            "isOn": true,
+            "name": "HTTPS",
+            "url": "/servers/server/settings/https?serverId=1"
+        },
+        "leftMenuItemIsDisabled": false,
+        "leftMenuItems": [
+            {
+                "isActive": false,
+                "isOn": true,
+                "name": "域名",
+                "url": "/servers/server/settings/serverNames?serverId=1",
+                "label": "域名"
+            },
+            {
+                "isActive": false,
+                "name": "DNS",
+                "url": "/servers/server/settings/dns?serverId=1",
+                "label": "DNS"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "套餐",
+                "subName": "",
+                "url": "/servers/server/settings/plan?serverId=1",
+                "label": "套餐"
+            },
+            {
+                "isActive": false,
+                "isOff": false,
+                "isOn": true,
+                "name": "HTTP",
+                "url": "/servers/server/settings/http?serverId=1",
+                "label": "HTTP"
+            },
+            {
+                "isActive": true,
+                "isOff": false,
+                "isOn": true,
+                "name": "HTTPS",
+                "url": "/servers/server/settings/https?serverId=1",
+                "label": "HTTPS"
+            },
+            {
+                "configCode": "reverseProxy",
+                "isActive": false,
+                "isOn": true,
+                "name": "源站",
+                "url": "/servers/server/settings/reverseProxy?serverId=1",
+                "label": "源站"
+            },
+            {
+                "isActive": false,
+                "name": "-",
+                "url": "",
+                "label": "-"
+            },
+            {
+                "configCode": "uam",
+                "isActive": false,
+                "isImportant": false,
+                "isOn": false,
+                "name": "5秒盾",
+                "url": "/servers/server/settings/uam?serverId=1",
+                "label": "5秒盾"
+            },
+            {
+                "configCode": "cc",
+                "isActive": false,
+                "isImportant": false,
+                "isOn": false,
+                "name": "CC防护",
+                "url": "/servers/server/settings/cc?serverId=1",
+                "label": "CC防护"
+            },
+            {
+                "isActive": false,
+                "name": "-",
+                "url": "",
+                "label": "-"
+            },
+            {
+                "configCode": "hostRedirects",
+                "isActive": false,
+                "isOn": false,
+                "name": "URL跳转",
+                "url": "/servers/server/settings/redirects?serverId=1",
+                "label": "URL跳转"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "重写规则",
+                "url": "/servers/server/settings/rewrite?serverId=1",
+                "label": "重写规则"
+            },
+            {
+                "configCode": "waf",
+                "isActive": false,
+                "isOn": false,
+                "name": "WAF",
+                "url": "/servers/server/settings/waf?serverId=1",
+                "label": "WAF"
+            },
+            {
+                "configCode": "cache",
+                "isActive": false,
+                "isOn": false,
+                "name": "缓存",
+                "url": "/servers/server/settings/cache?serverId=1",
+                "label": "缓存"
+            },
+            {
+                "configCode": "auth",
+                "isActive": false,
+                "isOn": false,
+                "name": "访问鉴权",
+                "url": "/servers/server/settings/access?serverId=1",
+                "label": "访问鉴权"
+            },
+            {
+                "configCode": "referers",
+                "isActive": false,
+                "isOn": false,
+                "name": "防盗链",
+                "url": "/servers/server/settings/referers?serverId=1",
+                "label": "防盗链"
+            },
+            {
+                "configCode": "userAgent",
+                "isActive": false,
+                "isOn": false,
+                "name": "UA名单",
+                "url": "/servers/server/settings/userAgent?serverId=1",
+                "label": "UA名单"
+            },
+            {
+                "configCode": "accessLog",
+                "isActive": false,
+                "isOn": true,
+                "name": "访问日志",
+                "url": "/servers/server/settings/accessLog?serverId=1",
+                "label": "访问日志"
+            },
+            {
+                "configCode": "compression",
+                "isActive": false,
+                "isOn": false,
+                "name": "内容压缩",
+                "url": "/servers/server/settings/compression?serverId=1",
+                "label": "内容压缩"
+            },
+            {
+                "configCode": "pages",
+                "isActive": false,
+                "isOn": false,
+                "name": "自定义页面",
+                "url": "/servers/server/settings/pages?serverId=1",
+                "label": "自定义页面"
+            },
+            {
+                "isActive": false,
+                "isOn": true,
+                "name": "HTTP报头",
+                "url": "/servers/server/settings/headers?serverId=1",
+                "label": "HTTP报头"
+            },
+            {
+                "configCode": "websocket",
+                "isActive": false,
+                "isOn": true,
+                "name": "Websocket",
+                "url": "/servers/server/settings/websocket?serverId=1",
+                "label": "Websocket"
+            },
+            {
+                "configCode": "grpc",
+                "isActive": false,
+                "isOn": false,
+                "name": "gRPC",
+                "url": "/servers/server/settings/grpc?serverId=1",
+                "label": "gRPC"
+            },
+            {
+                "configCode": "webp",
+                "isActive": false,
+                "isOn": false,
+                "name": "WebP",
+                "url": "/servers/server/settings/webp?serverId=1",
+                "label": "WebP"
+            },
+            {
+                "configCode": "optimization",
+                "isActive": false,
+                "isOn": false,
+                "name": "页面优化",
+                "url": "/servers/server/settings/optimization?serverId=1",
+                "label": "页面优化"
+            },
+            {
+                "configCode": "multimedia",
+                "isActive": false,
+                "isOn": false,
+                "name": "音视频设置",
+                "url": "/servers/server/settings/multimedia?serverId=1",
+                "label": "音视频设置"
+            },
+            {
+                "configCode": "stat",
+                "isActive": false,
+                "isOn": true,
+                "name": "统计",
+                "url": "/servers/server/settings/stat?serverId=1",
+                "label": "统计"
+            },
+            {
+                "configCode": "charset",
+                "isActive": false,
+                "isOn": false,
+                "name": "字符编码",
+                "url": "/servers/server/settings/charset?serverId=1",
+                "label": "字符编码"
+            },
+            {
+                "isActive": false,
+                "name": "-",
+                "url": "",
+                "label": "-"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "分组",
+                "url": "/servers/server/settings/groups?serverId=1",
+                "label": "分组"
+            },
+            {
+                "configCode": "remoteAddr",
+                "isActive": false,
+                "isOn": true,
+                "name": "访客IP地址",
+                "url": "/servers/server/settings/remoteAddr?serverId=1",
+                "label": "访客IP地址"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "请求限制",
+                "url": "/servers/server/settings/requestLimit?serverId=1",
+                "label": "请求限制"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "边缘脚本",
+                "url": "/servers/server/settings/requestScripts?serverId=1",
+                "label": "边缘脚本"
+            }
+        ],
+        "mainMenu": "",
+        "mainTab": "setting",
+        "maxPort": 9999,
+        "minPort": 80,
+        "missingCertServerNames": null,
+        "secondMenuItem": "https",
+        "server": {
+            "clusterId": 1,
+            "id": 1,
+            "name": "example.com"
+        },
+        "serverFamily": "http",
+        "serverId": 1,
+        "serverType": "httpProxy",
+        "teaBadge": 0,
+        "teaCommon": {
+            "teaIsPlus": true,
+            "teaLogoFileId": 0,
+            "teaShowVersion": true,
+            "teaUsername": "默认用户"
+        },
+        "teaDemoEnabled": false,
+        "teaDocURL": "",
+        "teaFaviconFileId": 0,
+        "teaFrontMode": "",
+        "teaIsSuper": false,
+        "teaLang": "zh-cn",
+        "teaMenu": "servers",
+        "teaModules": [
+            {
+                "code": "dashboard",
+                "icon": "dashboard",
+                "isOn": true,
+                "name": "概览",
+                "subItems": []
+            },
+            {
+                "code": "servers",
+                "icon": "pi-sitemap",
+                "isOn": true,
+                "name": "CDN加速",
+                "subItems": [
+                    {
+                        "code": "servers",
+                        "name": "我的网站",
+                        "url": "/servers"
+                    },
+                    {
+                        "code": "cache",
+                        "name": "刷新预热",
+                        "url": "/servers/cache"
+                    },
+                    {
+                        "code": "certs",
+                        "name": "证书管理",
+                        "url": "/servers/certs"
+                    },
+                    {
+                        "code": "acme",
+                        "isOn": true,
+                        "name": "证书申请",
+                        "url": "/servers/certs/acme"
+                    },
+                    {
+                        "code": "trafficStat",
+                        "isOn": true,
+                        "name": "用量统计",
+                        "url": "/servers/traffic-stats"
+                    },
+                    {
+                        "code": "fee",
+                        "isOn": false,
+                        "name": "计费方式",
+                        "url": "/servers/fee"
+                    },
+                    {
+                        "code": "trafficPackage",
+                        "isOn": false,
+                        "name": "流量包",
+                        "url": "/servers/packages"
+                    }
+                ]
+            },
+            {
+                "code": "lb",
+                "icon": "paper plane",
+                "isOn": true,
+                "name": "负载均衡"
+            },
+            {
+                "code": "waf",
+                "icon": "magnet",
+                "isOn": true,
+                "name": "WAF安全",
+                "subItems": [
+                    {
+                        "code": "overview",
+                        "name": "概览",
+                        "url": "/waf"
+                    },
+                    {
+                        "code": "wafLogs",
+                        "name": "拦截日志",
+                        "url": "/waf/logs"
+                    },
+                    {
+                        "code": "iplist",
+                        "name": "拦截IP",
+                        "url": "/waf/iplists"
+                    }
+                ]
+            },
+            {
+                "code": "plans",
+                "icon": "puzzle piece",
+                "isOn": true,
+                "name": "套餐管理"
+            },
+            {
+                "code": "anti-ddos",
+                "icon": "shield",
+                "isOn": true,
+                "name": "DDoS高防",
+                "subItems": [
+                    {
+                        "code": "instance",
+                        "name": "实例列表",
+                        "url": "/anti-ddos/instances"
+                    },
+                    {
+                        "code": "package",
+                        "name": "购买实例",
+                        "url": "/anti-ddos/packages"
+                    }
+                ]
+            },
+            {
+                "code": "ns",
+                "icon": "globe",
+                "isOn": true,
+                "name": "域名解析",
+                "subItems": [
+                    {
+                        "code": "domain",
+                        "name": "我的域名",
+                        "url": "/ns/domains"
+                    },
+                    {
+                        "code": "domainGroup",
+                        "name": "域名分组",
+                        "url": "/ns/domains/groups"
+                    },
+                    {
+                        "code": "domainBatch",
+                        "name": "批量操作",
+                        "url": "/ns/domains/batch"
+                    },
+                    {
+                        "code": "route",
+                        "name": "线路管理",
+                        "url": "/ns/routes"
+                    },
+                    {
+                        "code": "plan",
+                        "name": "套餐",
+                        "url": "/ns/plans"
+                    }
+                ]
+            },
+            {
+                "code": "finance",
+                "icon": "dollar sign",
+                "isOn": true,
+                "name": "财务管理",
+                "subItems": [
+                    {
+                        "code": "overview",
+                        "name": "概览",
+                        "url": "/finance"
+                    },
+                    {
+                        "code": "bills",
+                        "name": "费用账单",
+                        "url": "/finance/bills"
+                    },
+                    {
+                        "code": "logs",
+                        "name": "收支明细",
+                        "url": "/finance/logs"
+                    },
+                    {
+                        "code": "charge",
+                        "name": "充值",
+                        "url": "/finance/charge"
+                    }
+                ]
+            },
+            {
+                "code": "tickets",
+                "icon": "ticket",
+                "isOn": true,
+                "name": "工单系统"
+            },
+            {
+                "code": "acl",
+                "icon": "address book",
+                "isOn": true,
+                "name": "访问控制"
+            }
+        ],
+        "teaName": "FlexCDN演示",
+        "teaPageFooterHTML": "",
+        "teaRole": "user",
+        "teaShowIndexPage": false,
+        "teaShowPageFooter": false,
+        "teaSubMenu": "",
+        "teaSubMenus": [],
+        "teaTabbar": [
+            {
+                "icon": "",
+                "isActive": false,
+                "name": "网站列表",
+                "right": false,
+                "subName": "",
+                "url": "/servers"
+            },
+            {
+                "icon": "setting",
+                "isActive": true,
+                "name": "设置",
+                "right": false,
+                "subName": "",
+                "url": "/servers/server?serverId=1"
+            },
+            {
+                "icon": "chart area",
+                "isActive": false,
+                "name": "统计",
+                "right": false,
+                "subName": "",
+                "url": "/servers/server/stat?serverId=1"
+            },
+            {
+                "icon": "history",
+                "isActive": false,
+                "name": "访问日志",
+                "right": false,
+                "subName": "",
+                "url": "/servers/server/log?serverId=1"
+            }
+        ],
+        "teaTheme": "violet",
+        "teaTitle": "FlexCDN用户系统演示",
+        "teaUserAvatar": "",
+        "teaVersion": "1.1.1"
+    },
+    "/servers/server/settings/reverseProxy": {
+        "backupOrigins": [],
+        "firstMenuItem": "index",
+        "leftMenuActiveItem": {
+            "configCode": "reverseProxy",
+            "isActive": true,
+            "isOn": true,
+            "name": "源站",
+            "url": "/servers/server/settings/reverseProxy?serverId=1"
+        },
+        "leftMenuItemIsDisabled": false,
+        "leftMenuItems": [
+            {
+                "isActive": false,
+                "isOn": true,
+                "name": "域名",
+                "url": "/servers/server/settings/serverNames?serverId=1",
+                "label": "域名"
+            },
+            {
+                "isActive": false,
+                "name": "DNS",
+                "url": "/servers/server/settings/dns?serverId=1",
+                "label": "DNS"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "套餐",
+                "subName": "",
+                "url": "/servers/server/settings/plan?serverId=1",
+                "label": "套餐"
+            },
+            {
+                "isActive": false,
+                "isOff": false,
+                "isOn": true,
+                "name": "HTTP",
+                "url": "/servers/server/settings/http?serverId=1",
+                "label": "HTTP"
+            },
+            {
+                "isActive": false,
+                "isOff": false,
+                "isOn": true,
+                "name": "HTTPS",
+                "url": "/servers/server/settings/https?serverId=1",
+                "label": "HTTPS"
+            },
+            {
+                "configCode": "reverseProxy",
+                "isActive": true,
+                "isOn": true,
+                "name": "源站",
+                "url": "/servers/server/settings/reverseProxy?serverId=1",
+                "label": "源站"
+            },
+            {
+                "isActive": false,
+                "name": "-",
+                "url": "",
+                "label": "-"
+            },
+            {
+                "configCode": "uam",
+                "isActive": false,
+                "isImportant": false,
+                "isOn": false,
+                "name": "5秒盾",
+                "url": "/servers/server/settings/uam?serverId=1",
+                "label": "5秒盾"
+            },
+            {
+                "configCode": "cc",
+                "isActive": false,
+                "isImportant": false,
+                "isOn": false,
+                "name": "CC防护",
+                "url": "/servers/server/settings/cc?serverId=1",
+                "label": "CC防护"
+            },
+            {
+                "isActive": false,
+                "name": "-",
+                "url": "",
+                "label": "-"
+            },
+            {
+                "configCode": "hostRedirects",
+                "isActive": false,
+                "isOn": false,
+                "name": "URL跳转",
+                "url": "/servers/server/settings/redirects?serverId=1",
+                "label": "URL跳转"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "重写规则",
+                "url": "/servers/server/settings/rewrite?serverId=1",
+                "label": "重写规则"
+            },
+            {
+                "configCode": "waf",
+                "isActive": false,
+                "isOn": false,
+                "name": "WAF",
+                "url": "/servers/server/settings/waf?serverId=1",
+                "label": "WAF"
+            },
+            {
+                "configCode": "cache",
+                "isActive": false,
+                "isOn": false,
+                "name": "缓存",
+                "url": "/servers/server/settings/cache?serverId=1",
+                "label": "缓存"
+            },
+            {
+                "configCode": "auth",
+                "isActive": false,
+                "isOn": false,
+                "name": "访问鉴权",
+                "url": "/servers/server/settings/access?serverId=1",
+                "label": "访问鉴权"
+            },
+            {
+                "configCode": "referers",
+                "isActive": false,
+                "isOn": false,
+                "name": "防盗链",
+                "url": "/servers/server/settings/referers?serverId=1",
+                "label": "防盗链"
+            },
+            {
+                "configCode": "userAgent",
+                "isActive": false,
+                "isOn": false,
+                "name": "UA名单",
+                "url": "/servers/server/settings/userAgent?serverId=1",
+                "label": "UA名单"
+            },
+            {
+                "configCode": "accessLog",
+                "isActive": false,
+                "isOn": true,
+                "name": "访问日志",
+                "url": "/servers/server/settings/accessLog?serverId=1",
+                "label": "访问日志"
+            },
+            {
+                "configCode": "compression",
+                "isActive": false,
+                "isOn": false,
+                "name": "内容压缩",
+                "url": "/servers/server/settings/compression?serverId=1",
+                "label": "内容压缩"
+            },
+            {
+                "configCode": "pages",
+                "isActive": false,
+                "isOn": false,
+                "name": "自定义页面",
+                "url": "/servers/server/settings/pages?serverId=1",
+                "label": "自定义页面"
+            },
+            {
+                "isActive": false,
+                "isOn": true,
+                "name": "HTTP报头",
+                "url": "/servers/server/settings/headers?serverId=1",
+                "label": "HTTP报头"
+            },
+            {
+                "configCode": "websocket",
+                "isActive": false,
+                "isOn": true,
+                "name": "Websocket",
+                "url": "/servers/server/settings/websocket?serverId=1",
+                "label": "Websocket"
+            },
+            {
+                "configCode": "grpc",
+                "isActive": false,
+                "isOn": false,
+                "name": "gRPC",
+                "url": "/servers/server/settings/grpc?serverId=1",
+                "label": "gRPC"
+            },
+            {
+                "configCode": "webp",
+                "isActive": false,
+                "isOn": false,
+                "name": "WebP",
+                "url": "/servers/server/settings/webp?serverId=1",
+                "label": "WebP"
+            },
+            {
+                "configCode": "optimization",
+                "isActive": false,
+                "isOn": false,
+                "name": "页面优化",
+                "url": "/servers/server/settings/optimization?serverId=1",
+                "label": "页面优化"
+            },
+            {
+                "configCode": "multimedia",
+                "isActive": false,
+                "isOn": false,
+                "name": "音视频设置",
+                "url": "/servers/server/settings/multimedia?serverId=1",
+                "label": "音视频设置"
+            },
+            {
+                "configCode": "stat",
+                "isActive": false,
+                "isOn": true,
+                "name": "统计",
+                "url": "/servers/server/settings/stat?serverId=1",
+                "label": "统计"
+            },
+            {
+                "configCode": "charset",
+                "isActive": false,
+                "isOn": false,
+                "name": "字符编码",
+                "url": "/servers/server/settings/charset?serverId=1",
+                "label": "字符编码"
+            },
+            {
+                "isActive": false,
+                "name": "-",
+                "url": "",
+                "label": "-"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "分组",
+                "url": "/servers/server/settings/groups?serverId=1",
+                "label": "分组"
+            },
+            {
+                "configCode": "remoteAddr",
+                "isActive": false,
+                "isOn": true,
+                "name": "访客IP地址",
+                "url": "/servers/server/settings/remoteAddr?serverId=1",
+                "label": "访客IP地址"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "请求限制",
+                "url": "/servers/server/settings/requestLimit?serverId=1",
+                "label": "请求限制"
+            },
+            {
+                "isActive": false,
+                "isOn": false,
+                "name": "边缘脚本",
+                "url": "/servers/server/settings/requestScripts?serverId=1",
+                "label": "边缘脚本"
+            }
+        ],
+        "mainTab": "setting",
+        "primaryOrigins": [
+            {
+                "addr": "http://example.com:80",
+                "domains": [],
+                "followPort": false,
+                "hasCert": false,
+                "host": "",
+                "http2Enabled": false,
+                "id": 1,
+                "isOSS": false,
+                "isOn": true,
+                "isTLSFamily": false,
+                "name": "",
+                "tlsSecurityVerifyMode": "auto",
+                "weight": 10
+            }
+        ],
+        "reverseProxyConfig": {
+            "id": 1,
+            "isOn": true,
+            "primaryOrigins": [
+                {
+                    "id": 1,
+                    "isOn": true,
+                    "version": 0,
+                    "name": "",
+                    "addr": {
+                        "protocol": "http",
+                        "host": "example.com",
+                        "portRange": "80",
+                        "minPort": 0,
+                        "maxPort": 0
+                    },
+                    "http2Enabled": false,
+                    "oss": null,
+                    "description": "",
+                    "code": "",
+                    "weight": 10,
+                    "connTimeout": {
+                        "count": 0,
+                        "unit": ""
+                    },
+                    "readTimeout": {
+                        "count": 0,
+                        "unit": ""
+                    },
+                    "idleTimeout": {
+                        "count": 0,
+                        "unit": ""
+                    },
+                    "maxFails": 0,
+                    "maxConns": 0,
+                    "idleConns": 0,
+                    "domains": [],
+                    "stripPrefix": "",
+                    "requestURI": "",
+                    "requestHost": "",
+                    "followPort": false,
+                    "followProtocol": null,
+                    "tlsSecurityVerifyMode": "auto",
+                    "requestHeaderPolicyRef": null,
+                    "requestHeaderPolicy": null,
+                    "responseHeaderPolicyRef": null,
+                    "responseHeaderPolicy": null,
+                    "healthCheck": null,
+                    "certRef": null,
+                    "cert": null,
+                    "ftpServerRef": null,
+                    "ftpServer": null,
+                    "isOk": false
+                }
+            ],
+            "primaryOriginRefs": null,
+            "backupOrigins": null,
+            "backupOriginRefs": null,
+            "scheduling": null,
+            "connTimeout": null,
+            "readTimeout": null,
+            "idleTimeout": null,
+            "maxFails": 0,
+            "maxConns": 0,
+            "maxIdleConns": 0,
+            "stripPrefix": "",
+            "requestHostType": 0,
+            "requestHost": "",
+            "requestURI": "",
+            "requestHostExcludingPort": false,
+            "retry50X": false,
+            "retry40X": false,
+            "addHeaders": [
+                "X-Real-IP",
+                "X-Forwarded-For",
+                "X-Forwarded-By",
+                "X-Forwarded-Host",
+                "X-Forwarded-Proto"
+            ],
+            "autoFlush": false,
+            "proxyProtocol": null,
+            "followRedirects": false,
+            "followProtocol": null
+        },
+        "reverseProxyRef": {
+            "isPrior": false,
+            "isOn": true,
+            "reverseProxyId": 1
+        },
+        "secondMenuItem": "reverseProxy",
+        "server": {
+            "clusterId": 1,
+            "id": 1,
+            "name": "example.com"
+        },
+        "serverFamily": "http",
+        "serverId": 1,
+        "serverType": "httpProxy",
+        "teaBadge": 0,
+        "teaCommon": {
+            "teaIsPlus": true,
+            "teaLogoFileId": 0,
+            "teaShowVersion": true,
+            "teaUsername": "默认用户"
+        },
+        "teaDemoEnabled": false,
+        "teaDocURL": "",
+        "teaFaviconFileId": 0,
+        "teaFrontMode": "",
+        "teaIsSuper": false,
+        "teaLang": "zh-cn",
+        "teaMenu": "servers",
+        "teaModules": [
+            {
+                "code": "dashboard",
+                "icon": "dashboard",
+                "isOn": true,
+                "name": "概览",
+                "subItems": []
+            },
+            {
+                "code": "servers",
+                "icon": "pi-sitemap",
+                "isOn": true,
+                "name": "CDN加速",
+                "subItems": [
+                    {
+                        "code": "servers",
+                        "name": "我的网站",
+                        "url": "/servers"
+                    },
+                    {
+                        "code": "cache",
+                        "name": "刷新预热",
+                        "url": "/servers/cache"
+                    },
+                    {
+                        "code": "certs",
+                        "name": "证书管理",
+                        "url": "/servers/certs"
+                    },
+                    {
+                        "code": "acme",
+                        "isOn": true,
+                        "name": "证书申请",
+                        "url": "/servers/certs/acme"
+                    },
+                    {
+                        "code": "trafficStat",
+                        "isOn": true,
+                        "name": "用量统计",
+                        "url": "/servers/traffic-stats"
+                    },
+                    {
+                        "code": "fee",
+                        "isOn": false,
+                        "name": "计费方式",
+                        "url": "/servers/fee"
+                    },
+                    {
+                        "code": "trafficPackage",
+                        "isOn": false,
+                        "name": "流量包",
+                        "url": "/servers/packages"
+                    }
+                ]
+            },
+            {
+                "code": "lb",
+                "icon": "paper plane",
+                "isOn": true,
+                "name": "负载均衡"
+            },
+            {
+                "code": "waf",
+                "icon": "magnet",
+                "isOn": true,
+                "name": "WAF安全",
+                "subItems": [
+                    {
+                        "code": "overview",
+                        "name": "概览",
+                        "url": "/waf"
+                    },
+                    {
+                        "code": "wafLogs",
+                        "name": "拦截日志",
+                        "url": "/waf/logs"
+                    },
+                    {
+                        "code": "iplist",
+                        "name": "拦截IP",
+                        "url": "/waf/iplists"
+                    }
+                ]
+            },
+            {
+                "code": "plans",
+                "icon": "puzzle piece",
+                "isOn": true,
+                "name": "套餐管理"
+            },
+            {
+                "code": "anti-ddos",
+                "icon": "shield",
+                "isOn": true,
+                "name": "DDoS高防",
+                "subItems": [
+                    {
+                        "code": "instance",
+                        "name": "实例列表",
+                        "url": "/anti-ddos/instances"
+                    },
+                    {
+                        "code": "package",
+                        "name": "购买实例",
+                        "url": "/anti-ddos/packages"
+                    }
+                ]
+            },
+            {
+                "code": "ns",
+                "icon": "globe",
+                "isOn": true,
+                "name": "域名解析",
+                "subItems": [
+                    {
+                        "code": "domain",
+                        "name": "我的域名",
+                        "url": "/ns/domains"
+                    },
+                    {
+                        "code": "domainGroup",
+                        "name": "域名分组",
+                        "url": "/ns/domains/groups"
+                    },
+                    {
+                        "code": "domainBatch",
+                        "name": "批量操作",
+                        "url": "/ns/domains/batch"
+                    },
+                    {
+                        "code": "route",
+                        "name": "线路管理",
+                        "url": "/ns/routes"
+                    },
+                    {
+                        "code": "plan",
+                        "name": "套餐",
+                        "url": "/ns/plans"
+                    }
+                ]
+            },
+            {
+                "code": "finance",
+                "icon": "dollar sign",
+                "isOn": true,
+                "name": "财务管理",
+                "subItems": [
+                    {
+                        "code": "overview",
+                        "name": "概览",
+                        "url": "/finance"
+                    },
+                    {
+                        "code": "bills",
+                        "name": "费用账单",
+                        "url": "/finance/bills"
+                    },
+                    {
+                        "code": "logs",
+                        "name": "收支明细",
+                        "url": "/finance/logs"
+                    },
+                    {
+                        "code": "charge",
+                        "name": "充值",
+                        "url": "/finance/charge"
+                    }
+                ]
+            },
+            {
+                "code": "tickets",
+                "icon": "ticket",
+                "isOn": true,
+                "name": "工单系统"
+            },
+            {
+                "code": "acl",
+                "icon": "address book",
+                "isOn": true,
+                "name": "访问控制"
+            }
+        ],
+        "teaName": "FlexCDN演示",
+        "teaPageFooterHTML": "",
+        "teaRole": "user",
+        "teaShowIndexPage": false,
+        "teaShowPageFooter": false,
+        "teaSubMenu": "",
+        "teaSubMenus": [],
+        "teaTabbar": [
+            {
+                "icon": "",
+                "isActive": false,
+                "name": "网站列表",
+                "right": false,
+                "subName": "",
+                "url": "/servers"
+            },
+            {
+                "icon": "setting",
+                "isActive": true,
+                "name": "设置",
+                "right": false,
+                "subName": "",
+                "url": "/servers/server?serverId=1"
+            },
+            {
+                "icon": "chart area",
+                "isActive": false,
+                "name": "统计",
+                "right": false,
+                "subName": "",
+                "url": "/servers/server/stat?serverId=1"
+            },
+            {
+                "icon": "history",
+                "isActive": false,
+                "name": "访问日志",
+                "right": false,
+                "subName": "",
+                "url": "/servers/server/log?serverId=1"
+            }
+        ],
+        "teaTheme": "violet",
+        "teaTitle": "FlexCDN用户系统演示",
+        "teaUserAvatar": "",
+        "teaVersion": "1.1.1"
     }
 }
 

+ 21 - 7
src/views/servers/addPortPopup.vue

@@ -20,9 +20,24 @@ const ctx = ctxRef(new Context())
 		<header v-if="!ctx.isUpdating">添加端口绑定</header>
 		<header v-if="ctx.isUpdating">修改端口绑定</header>
 		<PostForm action="$" @success="ctx.success">
-			<input type="hidden" name="minPort" :value="ctx.minPort"/>
-			<input type="hidden" name="maxPort" :value="ctx.maxPort"/>
-			<DefinitionTable>
+			<input type="hidden" name="minPort" :value="ctx.minPort" />
+			<input type="hidden" name="maxPort" :value="ctx.maxPort" />
+			<div class="mb-[20px]">
+				<div class="text-[#313131] mb-[12px]">网络协议</div>
+				<TSelect name="protocol" class="w-[540px]">
+					<TOption v-for="protocol in ctx.protocols" :value="protocol.code">{{ protocol.name }}</TOption>
+				</TSelect>
+			</div>
+			<div>
+				<div class="mb-[12px]">端口<span class="text-red-500">*</span></div>
+				<TInputText name="address" autofocus v-model="ctx.address" maxlength="5" style="width:540px" />
+				<p class="comment">需要在{{ ctx.minPort }}-{{ ctx.maxPort }}之间。<span
+						v-if="ctx.serverType == 'tcpProxy'">TCP和TLS端口之间不能重复。</span></p>
+			</div>
+			<div class="flex justify-end mt-[40px]">
+				<SubmitButton></SubmitButton>
+			</div>
+			<!-- <DefinitionTable>
 				<tbody>
 				<tr>
 					<td>网络协议</td>
@@ -40,11 +55,10 @@ const ctx = ctxRef(new Context())
 					</td>
 				</tr>
 				</tbody>
-			</DefinitionTable>
-			<SubmitButton></SubmitButton>
+			</DefinitionTable> -->
+			<!-- <SubmitButton></SubmitButton> -->
 		</PostForm>
 	</PopupLayout>
 </template>
 
-<style lang="postcss" scoped>
-</style>
+<style lang="postcss" scoped></style>

+ 43 - 9
src/views/servers/certs/uploadBatchPopup.vue

@@ -17,24 +17,58 @@ const ctx = ctxRef(new Context())
 <template>
 	<PopupLayout>
 		<header>批量上传证书</header>
-
+		<div class="mt-[14px]">
+			选择要上传的证书和私钥文件<span class="text-red-500">*</span>
+		</div>
 		<PostForm @success="ctx.successUpload" action="$" @before="ctx.before" @done="ctx.done" timeout="600">
+			<div class="mt-[12px]">
+				<TInputFile type="file" name="certFiles"
+					accept="application/x-pem-file, application/pkcs10, application/x-pkcs12, application/x-x509-user-cert, application/x-x509-ca-cert, application/pkix-cert, application/pkcs8, .key, .pem"
+					multiple="multiple" />
+			</div>
+			<p class="comment">点击后在弹出的文件选择框中支持多选;不用担心文件名和顺序问题,系统会自动匹配。</p>
+			<div class="flex justify-end mt-[40px]">
+				<SubmitButton v-show="!ctx.isRequesting">上传</SubmitButton>
+				<TButton disabled type="button" v-if="ctx.isRequesting">上传中...</TButton>
+			</div>
+		</PostForm>
+		<!-- <PostForm @success="ctx.successUpload" action="$" @before="ctx.before" @done="ctx.done" timeout="600">
 			<DefinitionTable>
 				<tbody>
-				<tr>
-					<td class="title">选择要上传的证书和私钥文件 *</td>
-					<td>
-						<TInputFile type="file" name="certFiles" accept="application/x-pem-file, application/pkcs10, application/x-pkcs12, application/x-x509-user-cert, application/x-x509-ca-cert, application/pkix-cert, application/pkcs8, .key, .pem" multiple="multiple"/>
-						<p class="comment">点击后在弹出的文件选择框中支持多选;不用担心文件名和顺序问题,系统会自动匹配。</p>
-					</td>
-				</tr>
+					<tr>
+						<td class="title">选择要上传的证书和私钥文件 *</td>
+						<td>
+							<TInputFile type="file" name="certFiles"
+								accept="application/x-pem-file, application/pkcs10, application/x-pkcs12, application/x-x509-user-cert, application/x-x509-ca-cert, application/pkix-cert, application/pkcs8, .key, .pem"
+								multiple="multiple" />
+							<p class="comment">点击后在弹出的文件选择框中支持多选;不用担心文件名和顺序问题,系统会自动匹配。</p>
+						</td>
+					</tr>
 				</tbody>
 			</DefinitionTable>
 			<SubmitButton v-show="!ctx.isRequesting">上传</SubmitButton>
 			<TButton disabled type="button" v-if="ctx.isRequesting">上传中...</TButton>
-		</PostForm>
+		</PostForm> -->
+
 	</PopupLayout>
 </template>
 
 <style lang="postcss" scoped>
+:deep(.p-fileupload-header .p-button) {
+	background: #EEF2FA;
+	border-radius: 4px;
+	color: #657080;
+}
+
+:deep(.p-chip) {
+	height: 34px;
+	border-radius: 17px;
+	border: 1px solid #eef2fa;
+	padding: 12px;
+	color: #657080;
+}
+
+:deep(.p-fileupload) {
+	padding-bottom: 22px;
+}
 </style>