Browse Source

style: HTTPS设置批量上传证书弹窗样式修改

zhaonan 4 days ago
parent
commit
7ebbfdd321

+ 759 - 0
mock/index.ts

@@ -1100,6 +1100,765 @@ const mock = [
             },
             },
             "message": ""
             "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[]
 ] as MockMethod[]
 
 

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

@@ -13,7 +13,7 @@
 import FileUpload from "primevue/fileupload";
 import FileUpload from "primevue/fileupload";
 import TLabel from "@/components/ui/TLabel.vue";
 import TLabel from "@/components/ui/TLabel.vue";
 import TButton from "@/components/ui/TButton.vue";
 import TButton from "@/components/ui/TButton.vue";
-import {inject} from "vue";
+import { inject } from "vue";
 
 
 const props = defineProps(["name", "multiple"])
 const props = defineProps(["name", "multiple"])
 
 
@@ -71,20 +71,25 @@ defineExpose({
 </script>
 </script>
 
 
 <template>
 <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">
 			<div class="flex gap-4">
 				<!-- TODO 需要多语言 -->
 				<!-- 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>
 			</div>
 		</template>
 		</template>
-		<template #content="{files}">
+		<template #content="{ files }">
 			<div class="flex gap-3 px-4 pb-4" v-if="files.length > 0">
 			<div class="flex gap-3 px-4 pb-4" v-if="files.length > 0">
 				<div v-if="multiple">
 				<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>
 						<TLabel v-for="file in files" size="small">{{ file.name }}</TLabel>
 					</div>
 					</div>
 					<div v-else>
 					<div v-else>

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

@@ -1,5 +1,5 @@
 const dataMaps = {
 const dataMaps = {
-    "/servers/server/settings/serverNames":{
+    "/servers/server/settings/serverNames": {
         "auditingResult": {
         "auditingResult": {
             "createdTime": "1970-01-01 08:00:00",
             "createdTime": "1970-01-01 08:00:00",
             "isOk": true,
             "isOk": true,
@@ -531,7 +531,7 @@ const dataMaps = {
         "teaUserAvatar": "",
         "teaUserAvatar": "",
         "teaVersion": "1.1.1"
         "teaVersion": "1.1.1"
     },
     },
-    "/servers/server/settings/dns":{
+    "/servers/server/settings/dns": {
         "dnsDomain": "",
         "dnsDomain": "",
         "dnsName": "58d058e7",
         "dnsName": "58d058e7",
         "firstMenuItem": "index",
         "firstMenuItem": "index",
@@ -1830,6 +1830,1655 @@ const dataMaps = {
         "teaUserAvatar": "",
         "teaUserAvatar": "",
         "teaVersion": "1.1.1",
         "teaVersion": "1.1.1",
         "userPlans": []
         "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"
     }
     }
 }
 }
 
 

+ 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>
 		<header v-if="ctx.isUpdating">修改端口绑定</header>
 		<header v-if="ctx.isUpdating">修改端口绑定</header>
 		<PostForm action="$" @success="ctx.success">
 		<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>
 				<tbody>
 				<tr>
 				<tr>
 					<td>网络协议</td>
 					<td>网络协议</td>
@@ -40,11 +55,10 @@ const ctx = ctxRef(new Context())
 					</td>
 					</td>
 				</tr>
 				</tr>
 				</tbody>
 				</tbody>
-			</DefinitionTable>
-			<SubmitButton></SubmitButton>
+			</DefinitionTable> -->
+			<!-- <SubmitButton></SubmitButton> -->
 		</PostForm>
 		</PostForm>
 	</PopupLayout>
 	</PopupLayout>
 </template>
 </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>
 <template>
 	<PopupLayout>
 	<PopupLayout>
 		<header>批量上传证书</header>
 		<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">
 		<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>
 			<DefinitionTable>
 				<tbody>
 				<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>
 				</tbody>
 			</DefinitionTable>
 			</DefinitionTable>
 			<SubmitButton v-show="!ctx.isRequesting">上传</SubmitButton>
 			<SubmitButton v-show="!ctx.isRequesting">上传</SubmitButton>
 			<TButton disabled type="button" v-if="ctx.isRequesting">上传中...</TButton>
 			<TButton disabled type="button" v-if="ctx.isRequesting">上传中...</TButton>
-		</PostForm>
+		</PostForm> -->
+
 	</PopupLayout>
 	</PopupLayout>
 </template>
 </template>
 
 
 <style lang="postcss" scoped>
 <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>
 </style>