Explorar el Código

chore: 使用mock模拟demo数据以进入系统进行开发

zhaonan hace 1 semana
padre
commit
6a6974e098
Se han modificado 7 ficheros con 1726 adiciones y 294 borrados
  1. 661 0
      mock/index.ts
  2. 215 252
      package-lock.json
  3. 2 0
      package.json
  4. 2 0
      src/views/index/index.js
  5. 794 0
      src/views/index/initData.js
  6. 2 0
      src/views/layout.vue
  7. 50 42
      vite.config.js

+ 661 - 0
mock/index.ts

@@ -0,0 +1,661 @@
+const mock = [
+    {
+        url: "/",
+        method: "post",
+        response: {
+            "code": 200,
+            "data": {},
+            "message": ""
+        }
+    },
+    {
+        url: "/csrf/token",
+        method: "get",
+        response: {
+            "code": 200,
+            "data": {
+                "token": "MTc1NzMyMDE5OWU1NGIwOTU4NzgyOTcxMGRmOWMyNGI4NDNkNzBkNjg1YThiYTJhMDI4NTI5ZmU2ZGVmYjFiNjBhM2Q2YTRkNTc="
+            },
+            "message": ""
+        }
+    },
+    {
+        url: "/index/status",
+        method: "post",
+        response: () => {
+            return {
+                "code": 200,
+                "data": {
+                    "status": {
+                        "1": {
+                            "isOk": false,
+                            "message": "集群配置错误",
+                            "todo": "所属集群没有配置DNS,请联系管理员修复此问题。网站ID:1",
+                            "type": "clusterDNSEmpty"
+                        }
+                    },
+                    "teaLang": "zh-cn",
+                    "teaMenu": "servers",
+                    "teaSubMenu": "servers"
+                },
+                "message": ""
+            }
+        }
+    },
+    {
+        url: "/messages/badge",
+        method: "post",
+        response: () => {
+            return {
+                "code": 200,
+                "data": {
+                    "code": 200,
+                    "data": {
+                        "count": 0,
+                        "instantMessages": [],
+                        "teaLang": "zh-cn",
+                        "teaMenu": "message"
+                    },
+                    "message": ""
+                },
+                "message": ""
+            }
+        }
+    },
+    {
+        url: "/dashboard",
+        method: "post",
+        response: () => {
+            return {
+                "code": 200,
+                "data": {
+                    "bandwidthPercentile": 95,
+                    "bandwidthPercentileBits": 6376,
+                    "dailyPeekBandwidthStats": [
+                        {
+                            "bytes": 797,
+                            "day": "08月09日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月10日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月11日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月12日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月13日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月14日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月15日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月16日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月17日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月18日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月19日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月20日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月21日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月22日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月23日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月24日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月25日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月26日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月27日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月28日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月29日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月30日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "08月31日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "09月01日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "09月02日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "09月03日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "09月04日"
+                        },
+                        {
+                            "bytes": 798,
+                            "day": "09月05日"
+                        },
+                        {
+                            "bytes": 797,
+                            "day": "09月06日"
+                        },
+                        {
+                            "bytes": 798,
+                            "day": "09月07日"
+                        },
+                        {
+                            "bytes": 798,
+                            "day": "09月08日"
+                        }
+                    ],
+                    "dailyTrafficStats": [
+                        {
+                            "bytes": 12621800,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8383,
+                            "day": "08月09日"
+                        },
+                        {
+                            "bytes": 12581439,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8356,
+                            "day": "08月10日"
+                        },
+                        {
+                            "bytes": 12617899,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8383,
+                            "day": "08月11日"
+                        },
+                        {
+                            "bytes": 12568904,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8350,
+                            "day": "08月12日"
+                        },
+                        {
+                            "bytes": 12588771,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8349,
+                            "day": "08月13日"
+                        },
+                        {
+                            "bytes": 12628706,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8372,
+                            "day": "08月14日"
+                        },
+                        {
+                            "bytes": 12596973,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8353,
+                            "day": "08月15日"
+                        },
+                        {
+                            "bytes": 12637838,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8377,
+                            "day": "08月16日"
+                        },
+                        {
+                            "bytes": 12619736,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8368,
+                            "day": "08月17日"
+                        },
+                        {
+                            "bytes": 12616734,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8363,
+                            "day": "08月18日"
+                        },
+                        {
+                            "bytes": 12596703,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8353,
+                            "day": "08月19日"
+                        },
+                        {
+                            "bytes": 12589217,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8345,
+                            "day": "08月20日"
+                        },
+                        {
+                            "bytes": 12650110,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8382,
+                            "day": "08月21日"
+                        },
+                        {
+                            "bytes": 12620579,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8367,
+                            "day": "08月22日"
+                        },
+                        {
+                            "bytes": 12629066,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8374,
+                            "day": "08月23日"
+                        },
+                        {
+                            "bytes": 12643301,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8383,
+                            "day": "08月24日"
+                        },
+                        {
+                            "bytes": 12642723,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8383,
+                            "day": "08月25日"
+                        },
+                        {
+                            "bytes": 12466328,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8269,
+                            "day": "08月26日"
+                        },
+                        {
+                            "bytes": 12626391,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8371,
+                            "day": "08月27日"
+                        },
+                        {
+                            "bytes": 12650977,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8382,
+                            "day": "08月28日"
+                        },
+                        {
+                            "bytes": 12639494,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8377,
+                            "day": "08月29日"
+                        },
+                        {
+                            "bytes": 12639565,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8381,
+                            "day": "08月30日"
+                        },
+                        {
+                            "bytes": 12654602,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8387,
+                            "day": "08月31日"
+                        },
+                        {
+                            "bytes": 12637860,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8378,
+                            "day": "09月01日"
+                        },
+                        {
+                            "bytes": 12650889,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8389,
+                            "day": "09月02日"
+                        },
+                        {
+                            "bytes": 12631810,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8374,
+                            "day": "09月03日"
+                        },
+                        {
+                            "bytes": 12626325,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8372,
+                            "day": "09月04日"
+                        },
+                        {
+                            "bytes": 12597310,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8345,
+                            "day": "09月05日"
+                        },
+                        {
+                            "bytes": 12624829,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8364,
+                            "day": "09月06日"
+                        },
+                        {
+                            "bytes": 12631718,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 8370,
+                            "day": "09月07日"
+                        },
+                        {
+                            "bytes": 8736450,
+                            "cachedBytes": 0,
+                            "countCachedRequests": 0,
+                            "countRequests": 5790,
+                            "day": "09月08日"
+                        }
+                    ],
+                    "dashboard": {
+                        "countServers": 1,
+                        "dailyPeekBandwidthBytes": "6.2344Kbps",
+                        "dailyTrafficBytes": "8.33MiB",
+                        "monthlyPeekBandwidthBytes": "6.2344Kbps",
+                        "monthlyTrafficBytes": "92.64MiB"
+                    },
+                    "teaLang": "zh-cn",
+                    "teaMenu": "dashboard",
+                    "uiConfig": {
+                        "bandwidthUnit": "bit",
+                        "showBandwidthCharts": true,
+                        "showTrafficCharts": true
+                    }
+                },
+                "message": ""
+            }
+        }
+    },
+    {
+        url: "/servers/addServerNamePopup",
+        method: "get",
+        response: {
+            "code": 200,
+            "data": {
+                "firstMenuItem": "",
+                "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": "servers",
+                "teaSubMenus": [],
+                "teaTabbar": [],
+                "teaTheme": "violet",
+                "teaTitle": "FlexCDN用户系统演示",
+                "teaUserAvatar": "",
+                "teaVersion": "1.1.1"
+            },
+            "message": ""
+        }
+    }
+]
+
+export default mock;

+ 215 - 252
package-lock.json

@@ -23,11 +23,13 @@
         "copy-to-clipboard": "^3.3.3",
         "echarts": "^5.5.1",
         "md5": "^2.3.0",
+        "mockjs": "^1.1.0",
         "primeicons": "^7.0.0",
         "primevue": "^4.0.5",
         "quill": "^2.0.2",
         "sortablejs": "^1.15.2",
         "tailwindcss-primeui": "^0.3.1",
+        "vite-plugin-mock": "^3.0.2",
         "vue": "^3.4.35",
         "vue-router": "^4.4.0"
       },
@@ -212,7 +214,6 @@
       "cpu": [
         "ppc64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "aix"
@@ -228,7 +229,6 @@
       "cpu": [
         "arm"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "android"
@@ -244,7 +244,6 @@
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "android"
@@ -260,7 +259,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "android"
@@ -276,7 +274,6 @@
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "darwin"
@@ -292,7 +289,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "darwin"
@@ -308,7 +304,6 @@
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "freebsd"
@@ -324,7 +319,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "freebsd"
@@ -340,7 +334,6 @@
       "cpu": [
         "arm"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -356,7 +349,6 @@
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -372,7 +364,6 @@
       "cpu": [
         "ia32"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -388,7 +379,6 @@
       "cpu": [
         "loong64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -404,7 +394,6 @@
       "cpu": [
         "mips64el"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -420,7 +409,6 @@
       "cpu": [
         "ppc64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -436,7 +424,6 @@
       "cpu": [
         "riscv64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -452,7 +439,6 @@
       "cpu": [
         "s390x"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -468,7 +454,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -484,7 +469,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "netbsd"
@@ -500,7 +484,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "openbsd"
@@ -516,7 +499,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "sunos"
@@ -532,7 +514,6 @@
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "win32"
@@ -548,7 +529,6 @@
       "cpu": [
         "ia32"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "win32"
@@ -564,7 +544,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "win32"
@@ -810,7 +789,6 @@
       "cpu": [
         "arm"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "android"
@@ -823,7 +801,6 @@
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "android"
@@ -836,7 +813,6 @@
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "darwin"
@@ -849,7 +825,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "darwin"
@@ -862,7 +837,6 @@
       "cpu": [
         "arm"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -875,7 +849,6 @@
       "cpu": [
         "arm"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -888,7 +861,6 @@
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -901,7 +873,6 @@
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -914,7 +885,6 @@
       "cpu": [
         "ppc64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -927,7 +897,6 @@
       "cpu": [
         "riscv64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -940,7 +909,6 @@
       "cpu": [
         "s390x"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -953,7 +921,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -966,7 +933,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "linux"
@@ -979,7 +945,6 @@
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "win32"
@@ -992,7 +957,6 @@
       "cpu": [
         "ia32"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "win32"
@@ -1005,7 +969,6 @@
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "optional": true,
       "os": [
         "win32"
@@ -1046,8 +1009,7 @@
     "node_modules/@types/estree": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
-      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
-      "dev": true
+      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
     },
     "node_modules/@vitejs/plugin-vue": {
       "version": "5.1.1",
@@ -1321,6 +1283,21 @@
         "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
       }
     },
+    "node_modules/bundle-require": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-4.2.1.tgz",
+      "integrity": "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==",
+      "license": "MIT",
+      "dependencies": {
+        "load-tsconfig": "^0.2.3"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "esbuild": ">=0.17"
+      }
+    },
     "node_modules/camelcase-css": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
@@ -1441,20 +1418,36 @@
         "node": ">= 6"
       }
     },
-    "node_modules/copy-anything": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
-      "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
+    "node_modules/connect": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+      "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
+      "license": "MIT",
       "dependencies": {
-        "is-what": "^3.14.1"
+        "debug": "2.6.9",
+        "finalhandler": "1.1.2",
+        "parseurl": "~1.3.3",
+        "utils-merge": "1.0.1"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/mesqueeb"
+      "engines": {
+        "node": ">= 0.10.0"
       }
     },
+    "node_modules/connect/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/connect/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "license": "MIT"
+    },
     "node_modules/copy-to-clipboard": {
       "version": "3.3.3",
       "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
@@ -1505,6 +1498,23 @@
       "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
       "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
     },
+    "node_modules/debug": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+      "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -1537,6 +1547,12 @@
         "zrender": "5.6.0"
       }
     },
+    "node_modules/ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+      "license": "MIT"
+    },
     "node_modules/electron-to-chromium": {
       "version": "1.5.3",
       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.3.tgz",
@@ -1548,6 +1564,15 @@
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
       "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
     },
+    "node_modules/encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/entities": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
@@ -1559,25 +1584,10 @@
         "url": "https://github.com/fb55/entities?sponsor=1"
       }
     },
-    "node_modules/errno": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
-      "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "prr": "~1.0.1"
-      },
-      "bin": {
-        "errno": "cli.js"
-      }
-    },
     "node_modules/esbuild": {
       "version": "0.21.5",
       "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
       "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
-      "dev": true,
       "hasInstallScript": true,
       "bin": {
         "esbuild": "bin/esbuild"
@@ -1620,6 +1630,12 @@
         "node": ">=6"
       }
     },
+    "node_modules/escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+      "license": "MIT"
+    },
     "node_modules/estree-walker": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
@@ -1680,6 +1696,39 @@
         "node": ">=8"
       }
     },
+    "node_modules/finalhandler": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+      "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
+        "statuses": "~1.5.0",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/finalhandler/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/finalhandler/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "license": "MIT"
+    },
     "node_modules/follow-redirects": {
       "version": "1.15.6",
       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
@@ -1791,14 +1840,6 @@
         "node": ">=10.13.0"
       }
     },
-    "node_modules/graceful-fs": {
-      "version": "4.2.11",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
-      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
-      "dev": true,
-      "optional": true,
-      "peer": true
-    },
     "node_modules/hasown": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -1810,34 +1851,6 @@
         "node": ">= 0.4"
       }
     },
-    "node_modules/iconv-lite": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "safer-buffer": ">= 2.1.2 < 3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/image-size": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
-      "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
-      "bin": {
-        "image-size": "bin/image-size.js"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/is-binary-path": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -1903,14 +1916,6 @@
         "node": ">=0.12.0"
       }
     },
-    "node_modules/is-what": {
-      "version": "3.14.1",
-      "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
-      "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
-      "dev": true,
-      "optional": true,
-      "peer": true
-    },
     "node_modules/isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -1938,34 +1943,6 @@
         "jiti": "bin/jiti.js"
       }
     },
-    "node_modules/less": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz",
-      "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "copy-anything": "^2.0.1",
-        "parse-node-version": "^1.0.1",
-        "tslib": "^2.3.0"
-      },
-      "bin": {
-        "lessc": "bin/lessc"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "optionalDependencies": {
-        "errno": "^0.1.1",
-        "graceful-fs": "^4.1.2",
-        "image-size": "~0.5.0",
-        "make-dir": "^2.1.0",
-        "mime": "^1.4.1",
-        "needle": "^3.1.0",
-        "source-map": "~0.6.0"
-      }
-    },
     "node_modules/lilconfig": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
@@ -1979,6 +1956,15 @@
       "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
       "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
     },
+    "node_modules/load-tsconfig": {
+      "version": "0.2.5",
+      "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
+      "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
     "node_modules/lodash-es": {
       "version": "4.17.21",
       "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
@@ -2007,21 +1993,6 @@
         "@jridgewell/sourcemap-codec": "^1.5.0"
       }
     },
-    "node_modules/make-dir": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
-      "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "pify": "^4.0.1",
-        "semver": "^5.6.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/md5": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
@@ -2052,20 +2023,6 @@
         "node": ">=8.6"
       }
     },
-    "node_modules/mime": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
-      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
-      "bin": {
-        "mime": "cli.js"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/mime-db": {
       "version": "1.52.0",
       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
@@ -2107,6 +2064,23 @@
         "node": ">=16 || 14 >=14.17"
       }
     },
+    "node_modules/mockjs": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz",
+      "integrity": "sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==",
+      "dependencies": {
+        "commander": "*"
+      },
+      "bin": {
+        "random": "bin/random"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "license": "MIT"
+    },
     "node_modules/mz": {
       "version": "2.7.0",
       "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
@@ -2134,24 +2108,6 @@
         "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
       }
     },
-    "node_modules/needle": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz",
-      "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "iconv-lite": "^0.6.3",
-        "sax": "^1.2.4"
-      },
-      "bin": {
-        "needle": "bin/needle"
-      },
-      "engines": {
-        "node": ">= 4.4.x"
-      }
-    },
     "node_modules/node-releases": {
       "version": "2.0.18",
       "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
@@ -2191,6 +2147,18 @@
         "node": ">= 6"
       }
     },
+    "node_modules/on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+      "license": "MIT",
+      "dependencies": {
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/package-json-from-dist": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
@@ -2201,15 +2169,13 @@
       "resolved": "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz",
       "integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A=="
     },
-    "node_modules/parse-node-version": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
-      "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
+    "node_modules/parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+      "license": "MIT",
       "engines": {
-        "node": ">= 0.10"
+        "node": ">= 0.8"
       }
     },
     "node_modules/path-key": {
@@ -2240,6 +2206,12 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/path-to-regexp": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
+      "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
+      "license": "MIT"
+    },
     "node_modules/picocolors": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
@@ -2256,17 +2228,6 @@
         "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
-    "node_modules/pify": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/pirates": {
       "version": "4.0.6",
       "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
@@ -2446,14 +2407,6 @@
       "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
       "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
     },
-    "node_modules/prr": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
-      "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
-      "dev": true,
-      "optional": true,
-      "peer": true
-    },
     "node_modules/queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -2556,7 +2509,6 @@
       "version": "4.19.1",
       "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz",
       "integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==",
-      "dev": true,
       "dependencies": {
         "@types/estree": "1.0.5"
       },
@@ -2609,33 +2561,6 @@
         "queue-microtask": "^1.2.2"
       }
     },
-    "node_modules/safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-      "dev": true,
-      "optional": true,
-      "peer": true
-    },
-    "node_modules/sax": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
-      "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
-      "dev": true,
-      "optional": true,
-      "peer": true
-    },
-    "node_modules/semver": {
-      "version": "5.7.2",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
-      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
-      "bin": {
-        "semver": "bin/semver"
-      }
-    },
     "node_modules/shebang-command": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -2671,17 +2596,6 @@
       "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.2.tgz",
       "integrity": "sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA=="
     },
-    "node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/source-map-js": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
@@ -2690,6 +2604,15 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/statuses": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/string-width": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
@@ -2912,6 +2835,15 @@
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
       "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
     },
+    "node_modules/unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/update-browserslist-db": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
@@ -2947,11 +2879,19 @@
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
     },
+    "node_modules/utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
     "node_modules/vite": {
       "version": "5.3.5",
       "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz",
       "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==",
-      "dev": true,
       "dependencies": {
         "esbuild": "^0.21.3",
         "postcss": "^8.4.39",
@@ -3002,6 +2942,29 @@
         }
       }
     },
+    "node_modules/vite-plugin-mock": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/vite-plugin-mock/-/vite-plugin-mock-3.0.2.tgz",
+      "integrity": "sha512-bD//HvkTygGmk+LsIAdf0jGNlCv4iWv0kZlH9UEgWT6QYoUwfjQAE4SKxHRw2tfLgVhbPQVv/+X3YlNWvueGUA==",
+      "license": "MIT",
+      "dependencies": {
+        "bundle-require": "^4.0.1",
+        "chokidar": "^3.5.3",
+        "connect": "^3.7.0",
+        "debug": "^4.3.4",
+        "fast-glob": "^3.2.12",
+        "path-to-regexp": "^6.2.1",
+        "picocolors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=16.0.0"
+      },
+      "peerDependencies": {
+        "esbuild": ">=0.17",
+        "mockjs": ">=1.1.0",
+        "vite": ">=4.0.0"
+      }
+    },
     "node_modules/vue": {
       "version": "3.4.35",
       "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.35.tgz",

+ 2 - 0
package.json

@@ -24,11 +24,13 @@
     "copy-to-clipboard": "^3.3.3",
     "echarts": "^5.5.1",
     "md5": "^2.3.0",
+    "mockjs": "^1.1.0",
     "primeicons": "^7.0.0",
     "primevue": "^4.0.5",
     "quill": "^2.0.2",
     "sortablejs": "^1.15.2",
     "tailwindcss-primeui": "^0.3.1",
+    "vite-plugin-mock": "^3.0.2",
     "vue": "^3.4.35",
     "vue-router": "^4.4.0"
   },

+ 2 - 0
src/views/index/index.js

@@ -1,7 +1,9 @@
 import initCtx from "@/utils/ctx.js";
+import InitData from "./initData";
 import md5 from "md5/md5.js"
 
 export default function () {
+	InitData();
 	const {} = initCtx(this)
 
 	this.username = "";

+ 794 - 0
src/views/index/initData.js

@@ -0,0 +1,794 @@
+const dataMaps = {
+    "/": {
+        "canRegister": true,
+        "canResetPassword": true,
+        "emailCanLogin": true,
+        "faviconFileId": 0,
+        "from": "",
+        "isUser": false,
+        "menu": "signIn",
+        "mobileCanLogin": false,
+        "password": "123456",
+        "passwordMd5": "e10adc3949ba59abbe56e057f20f883e",
+        "showVersion": true,
+        "systemName": "FlexCDN用户系统演示",
+        "teaTheme": "violet",
+        "token": "c4516cc5050b5698c977464c1b10637a1757299126",
+        "username": "user",
+        "version": "1.1.1"
+    },
+    "/dashboard": {
+        "emailVerificationMessage": "尚未绑定电子邮箱,请点此绑定。",
+        "firstMenuItem": "",
+        "isIdentified": true,
+        "isVerified": true,
+        "mainMenu": "",
+        "mainTab": "",
+        "mobileVerificationMessage": "",
+        "posts": [],
+        "teaBadge": 0,
+        "teaCommon": {
+            "teaIsPlus": true,
+            "teaLogoFileId": 0,
+            "teaShowVersion": true,
+            "teaUsername": "默认用户"
+        },
+        "teaDemoEnabled": false,
+        "teaDocURL": "",
+        "teaFaviconFileId": 0,
+        "teaFrontMode": "",
+        "teaIsSuper": false,
+        "teaLang": "zh-cn",
+        "teaMenu": "dashboard",
+        "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": [],
+        "teaTheme": "violet",
+        "teaTitle": "FlexCDN用户系统演示",
+        "teaUserAvatar": "",
+        "teaVersion": "1.1.1",
+        "uiConfig": {
+            "bandwidthUnit": "bit",
+            "showBandwidthCharts": true,
+            "showTrafficCharts": true
+        }
+    },
+    "/servers": {
+        "countUnpaidBills": 0,
+        "firstMenuItem": "index",
+        "groupId": 0,
+        "groups": [],
+        "keyword": "",
+        "mainMenu": "",
+        "mainTab": "",
+        "page": {
+            "offset": 0,
+            "size": 10,
+            "current": 1,
+            "max": 1,
+            "total": 1,
+            "path": "/servers",
+            "query": {}
+        },
+        "servers": [
+            {
+                "cname": "",
+                "countServerNames": 2,
+                "groups": [],
+                "httpIsOn": true,
+                "httpsIsOn": true,
+                "id": 1,
+                "isAuditing": false,
+                "isOn": true,
+                "name": "测试网站",
+                "serverNames": [
+                    {
+                        "name": "example.com",
+                        "type": "full",
+                        "subNames": null
+                    }
+                ],
+                "status": {
+                    "isOk": false,
+                    "message": "集群配置错误",
+                    "todo": "所属集群没有配置DNS,请联系管理员修复此问题。网站ID:1",
+                    "type": "clusterDNSEmpty"
+                },
+                "trafficLimitStatus": null,
+                "userPlan": {
+                    "id": 0
+                }
+            }
+        ],
+        "serversIsEnabled": true,
+        "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"
+    },
+    "/servers/create": {
+        "clusterId": 1,
+        "firstMenuItem": "create",
+        "mainMenu": "",
+        "mainTab": "",
+        "ossBucketParams": [
+            {
+                "name": "指定${optionName}",
+                "code": "input",
+                "description": "在当前表单中输入${optionName}名称",
+                "example": ""
+            },
+            {
+                "name": "URL前缀",
+                "code": "prefix",
+                "description": "从访问的URL中的文件路径前缀中获取${optionName}名称",
+                "example": "/BUCKET-NAME/filename"
+            },
+            {
+                "name": "参数",
+                "code": "arg",
+                "description": "从访问的URL参数中获取${optionName}名称",
+                "example": "/filename?ARG=BUCKET-NAME"
+            },
+            {
+                "name": "子域名",
+                "code": "subDomain",
+                "description": "从访问的子域名中获取${optionName}名称",
+                "example": "BUCKET-NAME.example.com/filename"
+            }
+        ],
+        "ossTypes": [
+            {
+                "name": "腾讯云COS",
+                "code": "oss:tencentCOS",
+                "bucketOptionName": "存储桶",
+                "bucketIgnored": false
+            },
+            {
+                "name": "阿里云OSS",
+                "code": "oss:aliyunOSS",
+                "bucketOptionName": "存储空间",
+                "bucketIgnored": false
+            },
+            {
+                "name": "华为云OBS",
+                "code": "oss:huaweiOBS",
+                "bucketOptionName": "存储桶",
+                "bucketIgnored": false
+            },
+            {
+                "name": "百度云BOS",
+                "code": "oss:baiduBOS",
+                "bucketOptionName": "Bucket",
+                "bucketIgnored": false
+            },
+            {
+                "name": "七牛云Kodo",
+                "code": "oss:qiniuKodo",
+                "bucketOptionName": "存储空间",
+                "bucketIgnored": true
+            },
+            {
+                "name": "Amazon S3",
+                "code": "oss:amazonS3",
+                "bucketOptionName": "存储桶",
+                "bucketIgnored": false
+            },
+            {
+                "name": "B2云存储",
+                "code": "oss:b2",
+                "bucketOptionName": "存储桶",
+                "bucketIgnored": false
+            }
+        ],
+        "requirePlan": true,
+        "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",
+        "userPlans": []
+    }
+}
+
+export default function InitData() {
+    if (import.meta.env.MODE === "development") {
+        const path = window.location.pathname;
+        console.log("🚀current path is:", path);
+        window.X_VIEW_DATA = dataMaps[path];
+    }
+}

+ 2 - 0
src/views/layout.vue

@@ -11,7 +11,9 @@ import TDivider from "@/components/ui/TDivider.vue";
 import TTabView from "@/components/ui/TTabView.vue";
 import TTabs from "@/components/ui/TTabs.vue";
 import TTab from "@/components/ui/TTab.vue";
+import InitData from "./index/initData";
 
+InitData()
 const ctx = ctxRef(new Context())
 
 provide("$popupLayout", false)

+ 50 - 42
vite.config.js

@@ -1,51 +1,59 @@
-import {fileURLToPath, URL} from 'node:url'
+import { fileURLToPath, URL } from 'node:url'
 
-import {defineConfig} from 'vite'
+import { defineConfig } from 'vite'
 import vue from '@vitejs/plugin-vue'
 import tryFiles from "./src/lib/try_files.js"
+import { viteMockServe } from 'vite-plugin-mock'
 
 // https://vitejs.dev/config/
-export default defineConfig({
-	plugins: [
-		tryFiles,
-		vue()
-	],
-	resolve: {
-		alias: {
-			'@': fileURLToPath(new URL('./src', import.meta.url))
-		}
-	},
-	server: {
-		host: '0.0.0.0',
-		port: 5174
-	},
-	root: 'src',
-	publicDir: '@/public',
-	build: {
-		rollupOptions: {
-			input: [
-				'@/views/index/index.html',
-				'@/views/account/reset.html',
-				'@/views/email/verify.html',
-				'@/views/login/index.html',
-				'@/views/login/ticket.html',
-				'@/views/login/otp.html',
-				'@/views/register/index.html',
-				'@/views/layout.html',
-
-				/** portal **/
-				'@/views/portal/index.html',
-				'@/views/portal/post.html',
-				'@/views/portal/products/index.html',
-				'@/views/portal/products/cdn/index.html',
-			],
-			output: {
-				assetFileNames: 'views/assets/app-[hash].[ext]',
-				entryFileNames: 'views/assets/app-[hash].js',
-				chunkFileNames: 'views/assets/app-[hash].js',
-				dir: 'dist'
+export default defineConfig(({ mode }) => {
+	return {
+		plugins: [
+			tryFiles,
+			vue(),
+			viteMockServe({
+				mockPath: "./mock/",
+				logger: true,
+				enable: mode === "development" && true
+			})
+		],
+		resolve: {
+			alias: {
+				'@': fileURLToPath(new URL('./src', import.meta.url))
 			}
 		},
-		chunkSizeWarningLimit: 2048
+		server: {
+			host: '0.0.0.0',
+			port: 5174
+		},
+		root: 'src',
+		publicDir: '@/public',
+		build: {
+			rollupOptions: {
+				input: [
+					'@/views/index/index.html',
+					'@/views/account/reset.html',
+					'@/views/email/verify.html',
+					'@/views/login/index.html',
+					'@/views/login/ticket.html',
+					'@/views/login/otp.html',
+					'@/views/register/index.html',
+					'@/views/layout.html',
+
+					/** portal **/
+					'@/views/portal/index.html',
+					'@/views/portal/post.html',
+					'@/views/portal/products/index.html',
+					'@/views/portal/products/cdn/index.html',
+				],
+				output: {
+					assetFileNames: 'views/assets/app-[hash].[ext]',
+					entryFileNames: 'views/assets/app-[hash].js',
+					chunkFileNames: 'views/assets/app-[hash].js',
+					dir: 'dist'
+				}
+			},
+			chunkSizeWarningLimit: 2048
+		}
 	}
 })