libushang 8 月之前
父節點
當前提交
7f2ea3cd4a

+ 1 - 0
package.json

@@ -18,6 +18,7 @@
     "prepare": "husky install"
   },
   "dependencies": {
+    "@amap/amap-jsapi-loader": "^1.0.1",
     "axios": "^1.6.8",
     "normalize.css": "^8.0.1",
     "nprogress": "^0.2.0",

+ 66 - 58
pnpm-lock.yaml

@@ -8,6 +8,9 @@ importers:
 
   .:
     dependencies:
+      '@amap/amap-jsapi-loader':
+        specifier: ^1.0.1
+        version: 1.0.1
       axios:
         specifier: ^1.6.8
         version: 1.6.8
@@ -166,6 +169,9 @@ packages:
     resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
     engines: {node: '>=10'}
 
+  '@amap/amap-jsapi-loader@1.0.1':
+    resolution: {integrity: sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==, tarball: https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz}
+
   '@ampproject/remapping@2.3.0':
     resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
     engines: {node: '>=6.0.0'}
@@ -384,139 +390,139 @@ packages:
     engines: {node: '>=v18'}
 
   '@esbuild/aix-ppc64@0.20.2':
-    resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
+    resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==, tarball: https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [ppc64]
     os: [aix]
 
   '@esbuild/android-arm64@0.20.2':
-    resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
+    resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [android]
 
   '@esbuild/android-arm@0.20.2':
-    resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
+    resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [arm]
     os: [android]
 
   '@esbuild/android-x64@0.20.2':
-    resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
+    resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [android]
 
   '@esbuild/darwin-arm64@0.20.2':
-    resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
+    resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [darwin]
 
   '@esbuild/darwin-x64@0.20.2':
-    resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
+    resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [darwin]
 
   '@esbuild/freebsd-arm64@0.20.2':
-    resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
+    resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [freebsd]
 
   '@esbuild/freebsd-x64@0.20.2':
-    resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
+    resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [freebsd]
 
   '@esbuild/linux-arm64@0.20.2':
-    resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
+    resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [linux]
 
   '@esbuild/linux-arm@0.20.2':
-    resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
+    resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [arm]
     os: [linux]
 
   '@esbuild/linux-ia32@0.20.2':
-    resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
+    resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [ia32]
     os: [linux]
 
   '@esbuild/linux-loong64@0.20.2':
-    resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
+    resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [loong64]
     os: [linux]
 
   '@esbuild/linux-mips64el@0.20.2':
-    resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
+    resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [mips64el]
     os: [linux]
 
   '@esbuild/linux-ppc64@0.20.2':
-    resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
+    resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [ppc64]
     os: [linux]
 
   '@esbuild/linux-riscv64@0.20.2':
-    resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
+    resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [riscv64]
     os: [linux]
 
   '@esbuild/linux-s390x@0.20.2':
-    resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
+    resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [s390x]
     os: [linux]
 
   '@esbuild/linux-x64@0.20.2':
-    resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
+    resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [linux]
 
   '@esbuild/netbsd-x64@0.20.2':
-    resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
+    resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [netbsd]
 
   '@esbuild/openbsd-x64@0.20.2':
-    resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
+    resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [openbsd]
 
   '@esbuild/sunos-x64@0.20.2':
-    resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
+    resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [sunos]
 
   '@esbuild/win32-arm64@0.20.2':
-    resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
+    resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [win32]
 
   '@esbuild/win32-ia32@0.20.2':
-    resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
+    resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [ia32]
     os: [win32]
 
   '@esbuild/win32-x64@0.20.2':
-    resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
+    resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [win32]
@@ -614,7 +620,7 @@ packages:
     resolution: {integrity: sha512-geM6O5jEs2Hvg3LxwffjxrhZVftqysM6VDFvGHm+XMf2ZwunZIehPkd/W2mwbJBbFoqVqACl+c1/y48MffMiDg==}
 
   '@pkgjs/parseargs@0.11.0':
-    resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+    resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, tarball: https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz}
     engines: {node: '>=14'}
 
   '@pkgr/core@0.1.1':
@@ -635,91 +641,91 @@ packages:
         optional: true
 
   '@rollup/rollup-android-arm-eabi@4.17.2':
-    resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==}
+    resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz}
     cpu: [arm]
     os: [android]
 
   '@rollup/rollup-android-arm64@4.17.2':
-    resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==}
+    resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz}
     cpu: [arm64]
     os: [android]
 
   '@rollup/rollup-darwin-arm64@4.17.2':
-    resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==}
+    resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz}
     cpu: [arm64]
     os: [darwin]
 
   '@rollup/rollup-darwin-x64@4.17.2':
-    resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==}
+    resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz}
     cpu: [x64]
     os: [darwin]
 
   '@rollup/rollup-linux-arm-gnueabihf@4.17.2':
-    resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==}
+    resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz}
     cpu: [arm]
     os: [linux]
     libc: [glibc]
 
   '@rollup/rollup-linux-arm-musleabihf@4.17.2':
-    resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==}
+    resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz}
     cpu: [arm]
     os: [linux]
     libc: [musl]
 
   '@rollup/rollup-linux-arm64-gnu@4.17.2':
-    resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==}
+    resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz}
     cpu: [arm64]
     os: [linux]
     libc: [glibc]
 
   '@rollup/rollup-linux-arm64-musl@4.17.2':
-    resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==}
+    resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz}
     cpu: [arm64]
     os: [linux]
     libc: [musl]
 
   '@rollup/rollup-linux-powerpc64le-gnu@4.17.2':
-    resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==}
+    resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz}
     cpu: [ppc64]
     os: [linux]
     libc: [glibc]
 
   '@rollup/rollup-linux-riscv64-gnu@4.17.2':
-    resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==}
+    resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz}
     cpu: [riscv64]
     os: [linux]
     libc: [glibc]
 
   '@rollup/rollup-linux-s390x-gnu@4.17.2':
-    resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==}
+    resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz}
     cpu: [s390x]
     os: [linux]
     libc: [glibc]
 
   '@rollup/rollup-linux-x64-gnu@4.17.2':
-    resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==}
+    resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz}
     cpu: [x64]
     os: [linux]
     libc: [glibc]
 
   '@rollup/rollup-linux-x64-musl@4.17.2':
-    resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==}
+    resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz}
     cpu: [x64]
     os: [linux]
     libc: [musl]
 
   '@rollup/rollup-win32-arm64-msvc@4.17.2':
-    resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==}
+    resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz}
     cpu: [arm64]
     os: [win32]
 
   '@rollup/rollup-win32-ia32-msvc@4.17.2':
-    resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==}
+    resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz}
     cpu: [ia32]
     os: [win32]
 
   '@rollup/rollup-win32-x64-msvc@4.17.2':
-    resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==}
+    resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz}
     cpu: [x64]
     os: [win32]
 
@@ -911,43 +917,43 @@ packages:
     resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==}
 
   '@xn-sakina/rml-darwin-arm64@2.4.0':
-    resolution: {integrity: sha512-NPxExC0BS4J5SQKz2AkMxb7Poo1gz8Bs1O5gh6egI5ryJu7N7gdCg/3VBbJ7vkuFG9wzHh02AQ8gv/OKFRr1+w==}
+    resolution: {integrity: sha512-NPxExC0BS4J5SQKz2AkMxb7Poo1gz8Bs1O5gh6egI5ryJu7N7gdCg/3VBbJ7vkuFG9wzHh02AQ8gv/OKFRr1+w==, tarball: https://registry.npmmirror.com/@xn-sakina/rml-darwin-arm64/-/rml-darwin-arm64-2.4.0.tgz}
     engines: {node: '>=14'}
     cpu: [arm64]
     os: [darwin]
 
   '@xn-sakina/rml-darwin-x64@2.4.0':
-    resolution: {integrity: sha512-2H/WybPevls8Pt9iAK+47P8WzQWAljPndkfyH+B1cf7a219cDtRlnypS10k34MmE28zq4TJMqW7D3W3490jpxA==}
+    resolution: {integrity: sha512-2H/WybPevls8Pt9iAK+47P8WzQWAljPndkfyH+B1cf7a219cDtRlnypS10k34MmE28zq4TJMqW7D3W3490jpxA==, tarball: https://registry.npmmirror.com/@xn-sakina/rml-darwin-x64/-/rml-darwin-x64-2.4.0.tgz}
     engines: {node: '>=14'}
     cpu: [x64]
     os: [darwin]
 
   '@xn-sakina/rml-linux-arm-gnueabihf@2.4.0':
-    resolution: {integrity: sha512-dluz1aS3OTqkWAueLlMgDuFDyl4EB6EQ5Nzc7EFQ5v8NNBJUfh9oTKSB6zCghsBCvufu/yxsSbMLAwjBNr65/A==}
+    resolution: {integrity: sha512-dluz1aS3OTqkWAueLlMgDuFDyl4EB6EQ5Nzc7EFQ5v8NNBJUfh9oTKSB6zCghsBCvufu/yxsSbMLAwjBNr65/A==, tarball: https://registry.npmmirror.com/@xn-sakina/rml-linux-arm-gnueabihf/-/rml-linux-arm-gnueabihf-2.4.0.tgz}
     engines: {node: '>=14'}
     cpu: [arm]
     os: [linux]
 
   '@xn-sakina/rml-linux-arm64-gnu@2.4.0':
-    resolution: {integrity: sha512-7VQKIjUB46FJuyw0PMaPHwmeLwDovbAEVxfTjB4UQ/pg0Z7UwDBpA049AD0J+ETh+XzfC7mg/v0UYWpJjmxHZw==}
+    resolution: {integrity: sha512-7VQKIjUB46FJuyw0PMaPHwmeLwDovbAEVxfTjB4UQ/pg0Z7UwDBpA049AD0J+ETh+XzfC7mg/v0UYWpJjmxHZw==, tarball: https://registry.npmmirror.com/@xn-sakina/rml-linux-arm64-gnu/-/rml-linux-arm64-gnu-2.4.0.tgz}
     engines: {node: '>=14'}
     cpu: [arm64]
     os: [linux]
 
   '@xn-sakina/rml-linux-arm64-musl@2.4.0':
-    resolution: {integrity: sha512-7G0PzmoxUv/JD140lscnt3AGI3iuR+AJULfzT20YFbnoYH/Y7wjuim1EtJTzAfWT3RI8JJIY1YqWNMGpWaNhlg==}
+    resolution: {integrity: sha512-7G0PzmoxUv/JD140lscnt3AGI3iuR+AJULfzT20YFbnoYH/Y7wjuim1EtJTzAfWT3RI8JJIY1YqWNMGpWaNhlg==, tarball: https://registry.npmmirror.com/@xn-sakina/rml-linux-arm64-musl/-/rml-linux-arm64-musl-2.4.0.tgz}
     engines: {node: '>=14'}
     cpu: [arm64]
     os: [linux]
 
   '@xn-sakina/rml-linux-x64-gnu@2.4.0':
-    resolution: {integrity: sha512-Zjr+8s1swtClB5xGJMYSg9xyEm8/Ord6+o8UWDhgBt58/YXpQpG6D9U7qYna72gZRuo1KIZxlxKfELPLDJ7sHg==}
+    resolution: {integrity: sha512-Zjr+8s1swtClB5xGJMYSg9xyEm8/Ord6+o8UWDhgBt58/YXpQpG6D9U7qYna72gZRuo1KIZxlxKfELPLDJ7sHg==, tarball: https://registry.npmmirror.com/@xn-sakina/rml-linux-x64-gnu/-/rml-linux-x64-gnu-2.4.0.tgz}
     engines: {node: '>=14'}
     cpu: [x64]
     os: [linux]
 
   '@xn-sakina/rml-linux-x64-musl@2.4.0':
-    resolution: {integrity: sha512-ZwXQEUbVh64Pug1FFUTYlTvc3dUPS0PIiKeDVVfvMaGsse6d9m9+NGExKUT23WS2SVPfDwVTzm9vgHDGDttdnQ==}
+    resolution: {integrity: sha512-ZwXQEUbVh64Pug1FFUTYlTvc3dUPS0PIiKeDVVfvMaGsse6d9m9+NGExKUT23WS2SVPfDwVTzm9vgHDGDttdnQ==, tarball: https://registry.npmmirror.com/@xn-sakina/rml-linux-x64-musl/-/rml-linux-x64-musl-2.4.0.tgz}
     engines: {node: '>=14'}
     cpu: [x64]
     os: [linux]
@@ -956,13 +962,13 @@ packages:
     resolution: {integrity: sha512-yXMrp6AElBHxthETmo9wftbi5QIlscBNVISLeAPv962g3yZw6nMX4fw9rZAAZpIySLtTPQKGlbq5NhIeZ+arZw==}
 
   '@xn-sakina/rml-win32-arm64-msvc@2.4.0':
-    resolution: {integrity: sha512-DMIxWaHBGLgB1u+CQLsGTTwh/bqWMig85myJ7XJhzl1COiOfnSwwjLVirMqtZUNU4Vj5pSGpAz9z4tsXCQIPYg==}
+    resolution: {integrity: sha512-DMIxWaHBGLgB1u+CQLsGTTwh/bqWMig85myJ7XJhzl1COiOfnSwwjLVirMqtZUNU4Vj5pSGpAz9z4tsXCQIPYg==, tarball: https://registry.npmmirror.com/@xn-sakina/rml-win32-arm64-msvc/-/rml-win32-arm64-msvc-2.4.0.tgz}
     engines: {node: '>=14'}
     cpu: [arm64]
     os: [win32]
 
   '@xn-sakina/rml-win32-x64-msvc@2.4.0':
-    resolution: {integrity: sha512-SFzaFUbkoahtklG4aKADvfm1aAnFY217QeSBKzE6iNeYntS2ylSkcTHwuqy2giPiz/XKHeDZ++nvedWmL/6maQ==}
+    resolution: {integrity: sha512-SFzaFUbkoahtklG4aKADvfm1aAnFY217QeSBKzE6iNeYntS2ylSkcTHwuqy2giPiz/XKHeDZ++nvedWmL/6maQ==, tarball: https://registry.npmmirror.com/@xn-sakina/rml-win32-x64-msvc/-/rml-win32-x64-msvc-2.4.0.tgz}
     engines: {node: '>=14'}
     cpu: [x64]
     os: [win32]
@@ -1638,7 +1644,7 @@ packages:
     engines: {node: '>=6'}
 
   errno@0.1.8:
-    resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
+    resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, tarball: https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz}
     hasBin: true
 
   error-ex@1.3.2:
@@ -1891,7 +1897,7 @@ packages:
     engines: {node: '>=12'}
 
   fsevents@2.3.3:
-    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz}
     engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
     os: [darwin]
 
@@ -2001,7 +2007,7 @@ packages:
     resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
 
   graceful-fs@4.2.11:
-    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz}
 
   graphemer@1.4.0:
     resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
@@ -2126,7 +2132,7 @@ packages:
     engines: {node: '>= 4'}
 
   image-size@0.5.5:
-    resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
+    resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, tarball: https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz}
     engines: {node: '>=0.10.0'}
     hasBin: true
 
@@ -2523,7 +2529,7 @@ packages:
     resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==}
 
   make-dir@2.1.0:
-    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
+    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz}
     engines: {node: '>=6'}
 
   map-cache@0.2.2:
@@ -2589,7 +2595,7 @@ packages:
     engines: {node: '>= 0.6'}
 
   mime@1.6.0:
-    resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+    resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz}
     engines: {node: '>=4'}
     hasBin: true
 
@@ -2663,7 +2669,7 @@ packages:
     resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
 
   needle@3.3.1:
-    resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==}
+    resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==, tarball: https://registry.npmmirror.com/needle/-/needle-3.3.1.tgz}
     engines: {node: '>= 4.4.x'}
     hasBin: true
 
@@ -3262,7 +3268,7 @@ packages:
     engines: {node: '>=0.10.0'}
 
   source-map@0.6.1:
-    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz}
     engines: {node: '>=0.10.0'}
 
   sourcemap-codec@1.4.8:
@@ -3568,7 +3574,7 @@ packages:
     resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==}
 
   uglify-js@3.17.4:
-    resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
+    resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz}
     engines: {node: '>=0.8.0'}
     hasBin: true
 
@@ -3847,6 +3853,8 @@ snapshots:
 
   '@alloc/quick-lru@5.2.0': {}
 
+  '@amap/amap-jsapi-loader@1.0.1': {}
+
   '@ampproject/remapping@2.3.0':
     dependencies:
       '@jridgewell/gen-mapping': 0.3.5

二進制
src/assets/action_1.png


二進制
src/assets/action_2.png


+ 28 - 7
src/components/Tabbar/index.vue

@@ -12,30 +12,51 @@
 </template>
 
 <script setup lang="ts">
-import { ref, reactive } from "vue";
+import { ref, reactive, onMounted } from "vue";
 
 const active = ref(0);
 const tabbarData = reactive([
   {
     icon: "wap-home-o",
-    title: "页",
+    title: "页",
     to: {
-      name: "Demo"
+      name: "LeaderIndex"
     }
   },
   {
     icon: "gem-o",
-    title: "工具",
+    title: "移动指挥",
     to: {
-      name: "Tools"
+      name: "MobileControl"
     }
   },
   {
     icon: "user-o",
-    title: "关于",
+    title: "通讯录",
     to: {
-      name: "About"
+      name: "AddressBook"
+    }
+  },
+  {
+    icon: "user-o",
+    title: "我的",
+    to: {
+      name: "My"
     }
   }
 ]);
+
+onMounted(() => {
+  const mobile_control_status = localStorage.getItem('mobile_control_status') || "0";
+  // 动态切换平时态或者应急态
+  if(mobile_control_status === "1") {
+    tabbarData[1] = {
+      icon: "gem-o",
+      title: "移动指挥",
+      to: {
+        name: "MobileControl2"
+      }
+    }
+  }
+})
 </script>

+ 1 - 1
src/layout/index.vue

@@ -13,7 +13,7 @@ const cachedViews = computed(() => {
 <template>
   <div class="app-wrapper">
     <van-config-provider :theme="useDarkMode() ? 'dark' : 'light'">
-      <nav-bar />
+      <!-- nav-bar / -->
       <router-view v-slot="{ Component }">
         <keep-alive :include="cachedViews">
           <component :is="Component" />

+ 77 - 11
src/router/routes.ts

@@ -1,40 +1,106 @@
 import Layout from "@/layout/index.vue";
 import type { RouteRecordRaw } from "vue-router";
-import Demo from "@/views/demo/index.vue";
+import Index from "@/views/index.vue";
 
 const routes: Array<RouteRecordRaw> = [
   {
     path: "/",
-    name: "root",
+    name: "index",
+    component: Index
+  },
+  {
+    path: "/leader",
+    name: "Leader",
+    component: Layout,
+    redirect: { name: "LeaderIndex" },
+    children: [
+      {
+        path: "index",
+        name: "LeaderIndex",
+        component: () => import("@/views/leader/index.vue"),
+        meta: {
+          title: "首页",
+          noCache: true
+        }
+      },
+      {
+        path: "mobile_control",
+        name: "MobileControl",
+        component: () => import("@/views/mobileControl/index.vue"),
+        meta: {
+          title: "移动指挥(平时态)",
+          noCache: true
+        }
+      },
+      {
+        path: "mobile_control2",
+        name: "MobileControl2",
+        component: () => import("@/views/mobileControl2/index.vue"),
+        meta: {
+          title: "移动指挥(应急态)",
+          noCache: true
+        }
+      },
+      {
+        path: "address_book",
+        name: "AddressBook",
+        component: () => import("@/views/addressBook/index.vue"),
+        meta: {
+          title: "通讯录",
+          noCache: true
+        }
+      },
+      {
+        path: "my",
+        name: "My",
+        component: () => import("@/views/about/index.vue"),
+        meta: {
+          title: "我",
+          noCache: true
+        }
+      }
+    ]
+  },
+  {
+    path: "/worker",
+    name: "Worker",
     component: Layout,
-    redirect: { name: "Demo" },
+    redirect: { name: "WokerIndex" },
     children: [
       {
-        path: "demo",
-        name: "Demo",
-        component: Demo,
+        path: "index2",
+        name: "WokerIndex",
+        component: () => import("@/views/worker/index.vue"),
         meta: {
-          title: "主页"
+          title: "主页3"
         }
       },
       {
-        path: "tools",
+        path: "tools2",
         name: "Tools",
         component: () => import("@/views/tools/index.vue"),
         meta: {
-          title: "工具"
+          title: "工具3"
         }
       },
       {
-        path: "about",
+        path: "about2",
         name: "About",
         component: () => import("@/views/about/index.vue"),
         meta: {
-          title: "关于",
+          title: "关于3",
           noCache: true
         }
       }
     ]
+  },
+  {
+    path: "/event",
+    name: "EventList",
+    component: () => import("@/views/event/index.vue"),
+    meta: {
+      title: "事件列表"
+    }
   }
 ];
 

+ 1 - 1
src/views/about/index.vue

@@ -1,5 +1,5 @@
 <script setup lang="ts" name="About"></script>
 
 <template>
-  <div>about</div>
+  <div>我的</div>
 </template>

+ 9 - 0
src/views/addressBook/index.vue

@@ -0,0 +1,9 @@
+<template>
+    通讯录首页
+</template>
+
+<script lang="ts" setup>
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 198 - 0
src/views/event/index.vue

@@ -0,0 +1,198 @@
+<template>
+    <van-search v-model="search_keyword" placeholder="请输入内容" />
+
+    <van-dropdown-menu>
+        <van-dropdown-item title="类型" v-model="evnt_type" :options="opt_event_type" />
+        <van-dropdown-item title="等级" v-model="event_level" :options="opt_event_level" />
+        <van-dropdown-item title="状态" v-model="event_status" :options="opt_event_status" />
+    </van-dropdown-menu>
+
+    <van-list
+        v-model:loading="loading"
+        :finished="finished"
+        finished-text="没有更多了"
+        @load="onLoad">
+
+        <div class="event-list-item" v-for="item in event_list" :key="item.id">
+            <div class="item-title">
+                <div class="item-title-text">
+                    {{item.event_title}}
+                </div>
+                <div class="item-title-control">                    
+                    <van-button v-if="item.event_status == '0'" type="primary" size="small" @click="handleStartEvent">开始指挥</van-button>
+                    <van-button v-if="item.event_status == '1'" type="danger" size="small" @click="handleCloseEvent">结束指挥</van-button>
+                </div>
+            </div>
+            <div class="item-data">
+                <div class="item-data-label">事件类型:</div>
+                <div class="item-data-value">{{item.event_type}}</div>
+            </div>
+            <div class="item-data">
+                <div class="item-data-label">事件等级:</div>
+                <div class="item-data-value">{{item.event_level}}</div>
+            </div>
+            <div class="item-data">
+                <div class="item-data-label">事件状态:</div>
+                <div class="item-data-value">{{item.event_status}}</div>
+            </div>
+            <div class="item-data">
+                <div class="item-data-label">事发时间:</div>
+                <div class="item-data-value">{{item.event_time}}</div>
+            </div>
+            <div class="item-data">
+                <div class="item-data-label">事发地点:</div>
+                <div class="item-data-value">{{item.address}}</div>
+            </div>
+        </div>
+    </van-list>
+
+</template>
+
+<script lang="ts" setup>
+import { reactive, ref } from 'vue';
+import { useRouter } from 'vue-router'
+import { showConfirmDialog } from 'vant';
+
+const router = useRouter()
+
+const evnt_type = ref('');
+const event_level = ref('');
+const event_status = ref('');
+
+const search_keyword = ref('');
+
+const opt_event_type = [
+    { text: '自然灾害', value: '0' },
+    { text: '事故灾害', value: '1' },
+    { text: '公共卫生事件', value: '2' },
+    { text: '社会安全事件', value: '2' },
+];
+
+const opt_event_level = [
+    { text: '一般', value: '1' },
+    { text: '较大', value: '2' },
+    { text: '重大', value: '3' },
+    { text: '特别重大', value: '4' },
+    { text: '其他', value: '0' },
+];
+
+const opt_event_status = [
+    { text: '已登记', value: '0' },
+    { text: '指挥中', value: '1' },
+    { text: '指挥结束', value: '2' },
+    { text: '已关闭', value: '2' },
+];
+
+const event_id = ref('');
+const event_list = ref([]);
+const loading = ref(false);
+const finished = ref(false);
+const refreshing = ref(false);
+
+const onLoad = () => {
+    getList();
+}
+
+const getList = () => {
+    if (refreshing.value) {
+        event_list.value = [];
+        refreshing.value = false;
+    }
+
+    // ....
+    loading.value = false;
+
+    event_list.value.push({
+        event_title: 'XXX公交站',
+        event_type: '0',
+        event_level: '1',
+        event_status: '0',
+        event_time: '1999-1-1 10:20',
+        address: '左侧路面'
+    })
+
+    event_list.value.push({
+        event_title: 'XXX公交站',
+        event_type: '0',
+        event_level: '1',
+        event_status: '1',
+        event_time: '1999-1-1 10:20',
+        address: '左侧路面'
+    })
+
+    event_list.value.push({
+        event_title: 'XXX公交站',
+        event_type: '0',
+        event_level: '1',
+        event_status: '2',
+        event_time: '1999-1-1 10:20',
+        address: '左侧路面'
+    })
+
+    if (event_list.value.length >= 1) {
+        finished.value = true;
+    }
+
+}
+
+const handleStartEvent = () => {
+    showConfirmDialog({
+        title: '提示',
+        message:
+            '确认进入移动指挥(应急态)',
+        })
+        .then(() => {
+            localStorage.setItem('mobile_control_status', "1");
+            router.push("/leader/mobile_control")
+        })
+        .catch(() => {
+            
+        });
+}
+
+const handleCloseEvent = () => {
+
+}
+
+</script>
+
+<style lang="scss" scoped>
+.event-list-item {
+    position: relative;
+    margin: 8px;
+    padding: 16px;
+    background: #fafafa;
+    .item-title {
+        line-height: 35px;
+        display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+
+        .item-title-text {
+            font-size: 18px;
+            font-weight: 600;
+        }
+
+        .item-title-control {
+            display: inline-flex;
+            justify-content: center;
+            align-items: center;
+        }
+    }
+
+    .item-data {
+        line-height: 28px;
+        display: flex;
+        flex-direction: row;
+        justify-content: start;
+
+        .item-data-label {
+            color: #888;
+        }
+
+        .item-data-value {
+            color: #888;
+        }
+    }
+}
+</style>

+ 19 - 0
src/views/index.vue

@@ -0,0 +1,19 @@
+<template>
+    <div>
+        <router-link to="/leader">
+            <img src="~@/assets/action_1.png" />
+        </router-link>
+    </div>
+
+    <div>
+        <router-link to="/worker">
+            <img src="~@/assets/action_2.png" />
+        </router-link>
+    </div>
+</template>
+
+<script lang="ts" setup>
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 93 - 0
src/views/leader/index.vue

@@ -0,0 +1,93 @@
+<template>
+    <van-swipe :autoplay="3000">
+      <van-swipe-item v-for="n in banners" :key="n">
+        <img :src="n" />
+      </van-swipe-item>
+    </van-swipe>
+    <van-search v-model="search_keyword" placeholder="请输入内容" />
+    <van-notice-bar
+        left-icon="volume-o"
+        text="茂名市茂南区XX高速路口发生交通事故。"
+        />
+
+    <van-grid :column-num="2">
+        <van-grid-item icon="photo-o" text="工作审批" />
+        <van-grid-item icon="photo-o" text="信息接报" />
+        <van-grid-item icon="photo-o" text="在线点名" />
+        <van-grid-item icon="photo-o" text="事件管理" />
+    </van-grid>
+
+    <div class="app_panel">
+        <van-sidebar :v-model="0">
+            <van-sidebar-item title="综合应用" />
+        </van-sidebar>
+
+        <div class="app_panel_row">
+            <div class="app_panel_row_left">
+                <div>自然灾害<br/>风险检测</div>
+            </div>
+            <div class="app_panel_row_right">
+                <van-grid :column-num="3">
+                    <van-grid-item icon="photo-o" text="灾害检测" />
+                    <van-grid-item icon="photo-o" text="大风灾害" />
+                    <van-grid-item icon="photo-o" text="森林火灾" />
+                    <van-grid-item icon="photo-o" text="台风实况" />
+                    <van-grid-item icon="photo-o" text="水文检测" />
+                </van-grid>
+            </div>
+        </div>
+
+        <div class="app_panel_row">
+            <div class="app_panel_row_left">
+                <div>应急事件<br/>场景应急</div>
+            </div>
+            <div class="app_panel_row_right">
+                <van-grid :column-num="3">
+                    <van-grid-item icon="photo-o" text="自然灾害" />
+                    <van-grid-item icon="photo-o" text="事故灾难" />
+                    <van-grid-item icon="photo-o" text="城市事件" />
+                </van-grid>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import { ref, reactive } from 'vue';
+const search_keyword = ref('');
+
+const banners = ref([
+    'https://img.yzcdn.cn/public_files/2017/10/24/e5a5a02309a41f9f5def56684808d9ae.jpeg',
+    'https://img.yzcdn.cn/public_files/2017/10/24/1791ba14088f9c2be8c610d0a6cc0f93.jpeg',
+]);
+
+</script>
+
+<style lang="scss" scoped>
+
+.app_panel {
+    padding:8px 8px 0 8px;
+
+    .app_panel_row {
+        display: flex;
+        flex-direction: row;
+        justify-content: start;
+        margin-bottom: 8px;
+
+        .app_panel_row_left {
+            width:140px;
+            font-size: 12px;
+            display: inline-flex;
+            padding: 2px 8px;
+            justify-content: center;
+            align-items: center;
+            background: #efefef;
+        }
+
+        .app_panel_row_right {
+            width:calc(100vh - 140px - 20px);
+        }
+    }
+
+}
+</style>

+ 9 - 0
src/views/login.vue

@@ -0,0 +1,9 @@
+<template>
+    登录
+</template>
+
+<script lang="ts" setup>
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 48 - 0
src/views/mobileControl/index.vue

@@ -0,0 +1,48 @@
+<template>
+    <div class="top-left-panel">
+        <div>搜索</div>
+        <div>放大</div>
+        <div>缩小</div>
+        <div>全屏</div>
+    </div>
+
+    <div class="bottom-left-panel">
+        <router-link to="/">
+            <div>首页</div>
+        </router-link>
+        <div>物资</div>
+        <router-link to="/event">
+            <div>事件</div>
+        </router-link>
+        <div>协同<br/>标绘</div>
+    </div>
+</template>
+
+<script lang="ts" setup>
+</script>
+
+<style lang="scss" scoped>
+.top-left-panel {
+    display: flex;
+    flex-direction: column;
+    position: fixed;
+    right: 10px;
+    top: 10px;
+
+    div {
+        margin-bottom:10px;
+    }
+}
+
+.bottom-left-panel {
+    display: flex;
+    flex-direction: column;
+    position: fixed;
+    left: 10px;
+    bottom: 60px;
+
+    div {
+        margin-bottom:10px;
+    }
+}
+</style>

+ 107 - 0
src/views/mobileControl2/EventInfo.vue

@@ -0,0 +1,107 @@
+<template>
+    <div class="event-info">
+        <div class="info-title">
+            <div class="info-title-text">
+                <div class="info-title-text-label">事件标题:</div>
+                <div class="info-title-text-value">{{info.event_title}}</div>
+            </div>
+            <div class="info-title-control">                    
+                <van-button v-if="info.event_status == '0'" type="primary" size="small" @click="handleStartEvent">开始指挥</van-button>
+                <van-button v-if="info.event_status == '1'" type="danger" size="small" @click="handleCloseEvent">结束指挥</van-button>
+            </div>
+        </div>
+        <div class="info-data">
+            <div class="info-data-label">持续时长:</div>
+            <div class="info-data-value">{{info.keep_time}}</div>
+        </div>
+        <div class="info-data">
+            <div class="info-data-label">事件类型:</div>
+            <div class="info-data-value">{{info.event_type}}</div>
+        </div>
+        <div class="info-data">
+            <div class="info-data-label">事件等级:</div>
+            <div class="info-data-value">{{info.event_level}}</div>
+        </div>
+        <div class="info-data">
+            <div class="info-data-label">事发地点:</div>
+            <div class="info-data-value">{{info.address}}</div>
+        </div>
+        <div class="info-data">
+            <div class="info-data-label">事件状态:</div>
+            <div class="info-data-value">{{info.event_status}}</div>
+        </div>
+        <div class="info-data">
+            <div class="info-data-label">事发时间:</div>
+            <div class="info-data-value">{{info.event_time}}</div>
+        </div>
+       <div class="info-data">
+            <div class="info-data-label">事件来源:</div>
+            <div class="info-data-value">{{info.event_source}}</div>
+        </div>
+    </div>
+</template>
+
+<script lang="ts" setup>
+const info = {
+    event_title: 'xxxx应急指挥事件',
+    keep_time: '1天12小时14分20秒',
+    event_status: '0',
+    event_type: '0',
+    event_level: '0',
+    event_time: '1090-09-09 10:10',
+    address: 'zzz',
+    event_source: '110'
+};
+
+const handleStartEvent = () => {
+    
+}
+
+const handleCloseEvent = () => {
+
+}
+
+</script>
+
+
+<style lang="scss" scoped>
+.event-info {
+    position: relative;
+    margin: 0px;
+    padding: 16px;
+    .info-title {
+        line-height: 28px;
+        display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+
+        .info-title-text {
+            color: #888;
+            display: flex;
+            flex-direction: row;
+            justify-content: start;
+        }
+
+        .info-title-control {
+            display: inline-flex;
+            justify-content: center;
+            align-items: center;
+        }
+    }
+
+    .info-data {
+        line-height: 28px;
+        display: flex;
+        flex-direction: row;
+        justify-content: start;
+
+        .info-data-label {
+            color: #888;
+        }
+
+        .info-data-value {
+            color: #888;
+        }
+    }
+}
+</style>

+ 53 - 0
src/views/mobileControl2/InstructionDialog.vue

@@ -0,0 +1,53 @@
+<template>
+    <div class="instruction_dialog" >
+        <div class="header">领导批示</div>
+        <van-form @submit="onSubmit">
+            <van-field
+            v-model="form.content"
+            name="用户名"
+            type="textarea"
+            rows="5"
+            maxlength="50"
+            placeholder="请填写内容"
+            :rules="[{ required: true, message: '请填写内容' }]"
+            />
+            <div class="action-bar">
+                <van-button type="primary" native-type="submit" size="small">
+                确定
+                </van-button>
+                <van-button size="small">
+                取消
+                </van-button>
+            </div>
+        </van-form>
+    </div>
+</template>
+
+
+<script lang="ts" setup>
+import { ref, reactive } from 'vue';
+const form = {
+    content: ''
+}
+const onSubmit = () => {
+
+}
+
+</script>
+
+<style lang="scss" scoped>
+.instruction_dialog {
+    position: relative;
+
+    .header {
+        position: relative;
+    }
+}
+
+.action-bar {
+    padding: 16px;
+    display: flex;
+            flex-direction: row;
+            justify-content: space-between;
+}
+</style>

+ 166 - 0
src/views/mobileControl2/TaskCommand.vue

@@ -0,0 +1,166 @@
+<template>
+    <van-list
+        v-model:loading="loading"
+        :finished="finished"
+        finished-text="没有更多了"
+        @load="onLoad">
+
+        <div class="task-list">
+            <div class="task-item" v-for="item in task_list" :key="item.id">
+                <div class="task-item-header">
+                    <div class="task-item-header-text">
+                        <div class="task-item-header-username">{{item.username}}</div>
+                        <div class="task-item-header-time">{{item.time}}</div>
+                    </div>
+                    <div class="task-item-header-process">
+                        {{item.process}}
+                    </div>
+                </div>
+                <div class="task-item-content">
+                    <van-text-ellipsis :content="item.content" rows="3" expand-text="展开" collapse-text="收起"/>
+                </div>
+                <div class="task-item-bottom">
+                    <van-button type="primary" size="small" @click="showInstruction">领导批示</van-button>
+                </div>
+                <van-steps direction="vertical" :active="-1">
+                    <van-step v-for="reply in item.replys" :key="reply.id">
+                        <h3>{{reply.name}}{{reply.time}}</h3>
+                        <p>{{reply.content}}</p>
+                        <p>附件:{{reply.attachment}}</p>
+                    </van-step>
+                </van-steps>
+            </div>
+        </div>
+    </van-list>
+    <van-popup v-model:show="instruction_show" :style="{ padding: '64px' }">
+        <InstructionDialog @closeDialog="instructionDialogClose" ></InstructionDialog>
+
+    </van-popup>
+</template>
+
+<script lang="ts" setup>
+import { ref, reactive } from 'vue';
+import InstructionDialog from './InstructionDialog.vue';
+
+const task_list = ref([]);
+const loading = ref(false);
+const finished = ref(false);
+const refreshing = ref(false);
+const instruction_show = ref(false)
+
+const onLoad = () => {
+    getList();
+}
+
+const getList = () => {
+    if (refreshing.value) {
+        task_list.value = [];
+        refreshing.value = false;
+    }
+
+    // ....
+    loading.value = false;
+
+    task_list.value.push({
+        id: 1,
+        username: '执行人名字',
+        time: '2024-7-10 08:09:00',
+        content: '这是一段很长的任务描述这是一段很长的任务描述这是一段很长的任务描述这是一段很长的任务描述这是一段很长的任的任务描述这是一段很长的任务描述',
+        process: "20",
+        replys: [
+            {
+                id: 1,
+                name: '任务反馈',
+                time: '2024-7-10  10:15:09',
+                content: '这是一段很长的领导批示这是一段很长的领导批示这是一段很长的领导批示这是一段很长的领导批示',
+                attachment: 'xxx.png'
+            },
+            {
+                id: 1,
+                name: '任务反馈',
+                time: '2024-7-10  10:15:09',
+                content: '这是一段很长的领导批示这是一段很长的领导批示这是一段很长的领导批示这是一段很长的领导批示',
+                attachment: 'xxx.png'
+            }
+        ]
+    })
+
+    task_list.value.push({
+        id: 2,
+        username: '执行人名字',
+        time: '2024-7-10 08:09:00',
+        content: '1',
+        process: "20",
+    })
+
+    task_list.value.push({
+        id: 3,
+        username: '执行人名字',
+        time: '2024-7-10 08:09:00',
+        content: '1',
+        process: "20",
+    })
+
+    if (task_list.value.length >= 1) {
+        finished.value = true;
+    }
+
+}
+
+const showInstruction = () => {
+    instruction_show.value = true
+}
+
+const instructionDialogClose = () => {
+    instruction_show.value = false
+}
+</script>
+
+<style lang="scss" scoped>
+.task-list {
+    position: relative;
+    margin: 0px;
+    padding: 16px;
+
+    .task-item {
+        .task-item-header {
+            display: flex;
+            flex-direction: row;
+            justify-content: space-between;
+            
+            
+            .task-item-header-text {
+                display: flex;
+                flex-direction: row;
+                justify-content: start;
+
+                
+                
+                .task-item-header-username {
+                    color: #888;
+                    background: #aaa;
+                    padding-left: 4px;
+                    padding-right: 4px;
+                }
+                .task-item-header-time {
+                    color: #888;
+                }
+            }
+            .task-item-header-process {
+
+            }
+        }
+
+        .task-item-content {
+            color: #888;
+            background-color: #ececec;
+        }
+
+        .task-item-bottom {
+            display: flex;
+            flex-direction: row;
+            justify-content: end;
+        }
+    }
+}
+</style>

+ 119 - 0
src/views/mobileControl2/index.vue

@@ -0,0 +1,119 @@
+<template>
+    <div class="top-left-panel">
+        <div>搜索</div>
+        <div>放大</div>
+        <div>缩小</div>
+        <div>全屏</div>
+    </div>
+
+    <div class="bottom-left-panel">
+        <router-link to="/">
+            <div>首页</div>
+        </router-link>
+        <div>物资</div>
+        <router-link to="/event">
+            <div>事件</div>
+        </router-link>
+        <div>协同<br/>标绘</div>
+    </div>
+
+    <div class="popup">
+        <!-- 弹出层 -->
+        <transition name="slide">
+            <div class="popup-content" :class="['popup-header', popup_visible ? 'popup-header-show_1': 'popup-content-hide']" >
+                <div class="popup-header">
+                    <van-icon v-if="popup_visible" name="play" @click="toggerPopup"/>
+                    <van-icon v-if="!popup_visible" name="pause" @click="toggerPopup"/>
+                </div>
+                <div class="popup-data">
+                    <van-tabs v-model:active="active_tab">
+                        <van-tab title="事件信息">
+                            <EventInfo></EventInfo>
+                        </van-tab>
+                        <van-tab title="任务指令">
+                            <TaskCommand></TaskCommand>
+                        </van-tab>
+                    </van-tabs>
+                </div>
+            </div>
+        </transition>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import { ref, reactive } from 'vue';
+import EventInfo from './EventInfo.vue';
+import TaskCommand from './TaskCommand.vue';
+
+const popup_visible = ref(false);
+const active_tab = ref(0);
+
+const toggerPopup = () => {
+    console.log("toggerPopup");
+    popup_visible.value = !popup_visible.value;
+    if(popup_visible.value) {
+
+    }
+    else {
+
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.top-left-panel {
+    display: flex;
+    flex-direction: column;
+    position: fixed;
+    right: 10px;
+    top: 10px;
+
+    div {
+        margin-bottom:10px;
+    }
+}
+
+.bottom-left-panel {
+    display: flex;
+    flex-direction: column;
+    position: fixed;
+    left: 10px;
+    bottom: 60px;
+
+    div {
+        margin-bottom:10px;
+    }
+}
+
+.popup {
+  .popup-content {
+    width: 100%;
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    transition: transform .3s;
+
+    .popup-header {
+        width: 100vw;
+        display: inline-flex;
+        justify-content: center;
+        align-items: center;
+    }
+    .popup-data {
+        height:540px;
+        background: #fff;
+    }
+  }
+
+  .popup-content-hide {
+    height:70px;
+  }
+
+  .popup-content-show_1 {
+    height:590px;
+  }
+  .popup-content-show_2 {
+    height:590px;
+  }
+}
+</style>

+ 9 - 0
src/views/worker/index.vue

@@ -0,0 +1,9 @@
+<template>
+    工作人员首页
+</template>
+
+<script lang="ts" setup>
+</script>
+
+<style lang="scss" scoped>
+</style>