zhudie пре 2 година
родитељ
комит
5b2b025498

+ 1 - 1
package.json

@@ -108,7 +108,7 @@
     "tailwindcss": "3.3.2",
     "ts-node": "10.9.1",
     "typescript": "4.7.4",
-    "vite": "3.2.7",
+    "vite": "5.0.10",
     "vite-plugin-compression": "0.5.1",
     "vite-plugin-html": "3.2.0",
     "vite-plugin-mock": "2.9.6",

+ 394 - 242
pnpm-lock.yaml

@@ -87,7 +87,7 @@ dependencies:
     specifier: 3.3.4
     version: 3.3.4
   vue-hooks-plus:
-    specifier: ^1.8.6
+    specifier: 1.8.6
     version: 1.8.6(vue@3.3.4)
   vue-router:
     specifier: 4.1.2
@@ -132,7 +132,7 @@ devDependencies:
     version: 5.30.7(eslint@8.20.0)(typescript@4.7.4)
   '@vitejs/plugin-vue':
     specifier: 2.3.3
-    version: 2.3.3(vite@3.2.7)(vue@3.3.4)
+    version: 2.3.3(vite@5.0.10)(vue@3.3.4)
   '@vitejs/plugin-vue-jsx':
     specifier: 1.3.10
     version: 1.3.10
@@ -233,23 +233,23 @@ devDependencies:
     specifier: 4.7.4
     version: 4.7.4
   vite:
-    specifier: 3.2.7
-    version: 3.2.7(@types/node@17.0.45)(sass@1.53.0)
+    specifier: 5.0.10
+    version: 5.0.10(@types/node@17.0.45)(sass@1.53.0)
   vite-plugin-compression:
     specifier: 0.5.1
-    version: 0.5.1(vite@3.2.7)
+    version: 0.5.1(vite@5.0.10)
   vite-plugin-html:
     specifier: 3.2.0
-    version: 3.2.0(vite@3.2.7)
+    version: 3.2.0(vite@5.0.10)
   vite-plugin-mock:
     specifier: 2.9.6
-    version: 2.9.6(mockjs@1.1.0)(vite@3.2.7)
+    version: 2.9.6(mockjs@1.1.0)(vite@5.0.10)
   vite-plugin-style-import:
     specifier: 2.0.0
-    version: 2.0.0(vite@3.2.7)
+    version: 2.0.0(vite@5.0.10)
   vite-plugin-vue-setup-extend:
     specifier: 0.4.0
-    version: 0.4.0(vite@3.2.7)
+    version: 0.4.0(vite@5.0.10)
   vue-eslint-parser:
     specifier: 9.0.3
     version: 9.0.3(eslint@8.20.0)
@@ -788,8 +788,26 @@ packages:
       get-tsconfig: 4.2.0
     dev: true
 
-  /@esbuild/android-arm@0.15.14:
-    resolution: {integrity: sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA==}
+  /@esbuild/aix-ppc64@0.19.10:
+    resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==}
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [aix]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/android-arm64@0.19.10:
+    resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/android-arm@0.19.10:
+    resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==}
     engines: {node: '>=12'}
     cpu: [arm]
     os: [android]
@@ -797,6 +815,78 @@ packages:
     dev: true
     optional: true
 
+  /@esbuild/android-x64@0.19.10:
+    resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/darwin-arm64@0.19.10:
+    resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/darwin-x64@0.19.10:
+    resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/freebsd-arm64@0.19.10:
+    resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/freebsd-x64@0.19.10:
+    resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-arm64@0.19.10:
+    resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-arm@0.19.10:
+    resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-ia32@0.19.10:
+    resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
   /@esbuild/linux-loong64@0.14.54:
     resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==}
     engines: {node: '>=12'}
@@ -806,8 +896,8 @@ packages:
     dev: true
     optional: true
 
-  /@esbuild/linux-loong64@0.15.14:
-    resolution: {integrity: sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==}
+  /@esbuild/linux-loong64@0.19.10:
+    resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==}
     engines: {node: '>=12'}
     cpu: [loong64]
     os: [linux]
@@ -815,6 +905,105 @@ packages:
     dev: true
     optional: true
 
+  /@esbuild/linux-mips64el@0.19.10:
+    resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==}
+    engines: {node: '>=12'}
+    cpu: [mips64el]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-ppc64@0.19.10:
+    resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==}
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-riscv64@0.19.10:
+    resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==}
+    engines: {node: '>=12'}
+    cpu: [riscv64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-s390x@0.19.10:
+    resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==}
+    engines: {node: '>=12'}
+    cpu: [s390x]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-x64@0.19.10:
+    resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/netbsd-x64@0.19.10:
+    resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [netbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/openbsd-x64@0.19.10:
+    resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [openbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/sunos-x64@0.19.10:
+    resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [sunos]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-arm64@0.19.10:
+    resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-ia32@0.19.10:
+    resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-x64@0.19.10:
+    resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
   /@eslint/eslintrc@1.3.0:
     resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -997,6 +1186,110 @@ packages:
       picomatch: 2.3.1
     dev: true
 
+  /@rollup/rollup-android-arm-eabi@4.9.1:
+    resolution: {integrity: sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==}
+    cpu: [arm]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-android-arm64@4.9.1:
+    resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==}
+    cpu: [arm64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-darwin-arm64@4.9.1:
+    resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==}
+    cpu: [arm64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-darwin-x64@4.9.1:
+    resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==}
+    cpu: [x64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-arm-gnueabihf@4.9.1:
+    resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-arm64-gnu@4.9.1:
+    resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-arm64-musl@4.9.1:
+    resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-riscv64-gnu@4.9.1:
+    resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==}
+    cpu: [riscv64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-x64-gnu@4.9.1:
+    resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-x64-musl@4.9.1:
+    resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-win32-arm64-msvc@4.9.1:
+    resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==}
+    cpu: [arm64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-win32-ia32-msvc@4.9.1:
+    resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==}
+    cpu: [ia32]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-win32-x64-msvc@4.9.1:
+    resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==}
+    cpu: [x64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
   /@sxzz/popperjs-es@2.11.7:
     resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
     dev: false
@@ -1297,14 +1590,14 @@ packages:
       - supports-color
     dev: true
 
-  /@vitejs/plugin-vue@2.3.3(vite@3.2.7)(vue@3.3.4):
+  /@vitejs/plugin-vue@2.3.3(vite@5.0.10)(vue@3.3.4):
     resolution: {integrity: sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==}
     engines: {node: '>=12.0.0'}
     peerDependencies:
       vite: ^2.5.10
       vue: ^3.2.25
     dependencies:
-      vite: 3.2.7(@types/node@17.0.45)(sass@1.53.0)
+      vite: 5.0.10(@types/node@17.0.45)(sass@1.53.0)
       vue: 3.3.4
     dev: true
 
@@ -3016,15 +3309,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-android-64@0.15.14:
-    resolution: {integrity: sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-android-arm64@0.14.54:
     resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==}
     engines: {node: '>=12'}
@@ -3034,15 +3318,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-android-arm64@0.15.14:
-    resolution: {integrity: sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-darwin-64@0.14.54:
     resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==}
     engines: {node: '>=12'}
@@ -3052,15 +3327,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-darwin-64@0.15.14:
-    resolution: {integrity: sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-darwin-arm64@0.14.54:
     resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==}
     engines: {node: '>=12'}
@@ -3070,15 +3336,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-darwin-arm64@0.15.14:
-    resolution: {integrity: sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-freebsd-64@0.14.54:
     resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==}
     engines: {node: '>=12'}
@@ -3088,15 +3345,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-freebsd-64@0.15.14:
-    resolution: {integrity: sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-freebsd-arm64@0.14.54:
     resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==}
     engines: {node: '>=12'}
@@ -3106,15 +3354,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-freebsd-arm64@0.15.14:
-    resolution: {integrity: sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-linux-32@0.14.54:
     resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==}
     engines: {node: '>=12'}
@@ -3124,15 +3363,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-linux-32@0.15.14:
-    resolution: {integrity: sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-linux-64@0.14.54:
     resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==}
     engines: {node: '>=12'}
@@ -3142,15 +3372,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-linux-64@0.15.14:
-    resolution: {integrity: sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-linux-arm64@0.14.54:
     resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==}
     engines: {node: '>=12'}
@@ -3160,15 +3381,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-linux-arm64@0.15.14:
-    resolution: {integrity: sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-linux-arm@0.14.54:
     resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==}
     engines: {node: '>=12'}
@@ -3178,15 +3390,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-linux-arm@0.15.14:
-    resolution: {integrity: sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-linux-mips64le@0.14.54:
     resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==}
     engines: {node: '>=12'}
@@ -3196,15 +3399,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-linux-mips64le@0.15.14:
-    resolution: {integrity: sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==}
-    engines: {node: '>=12'}
-    cpu: [mips64el]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-linux-ppc64le@0.14.54:
     resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==}
     engines: {node: '>=12'}
@@ -3214,15 +3408,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-linux-ppc64le@0.15.14:
-    resolution: {integrity: sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==}
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-linux-riscv64@0.14.54:
     resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==}
     engines: {node: '>=12'}
@@ -3232,15 +3417,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-linux-riscv64@0.15.14:
-    resolution: {integrity: sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==}
-    engines: {node: '>=12'}
-    cpu: [riscv64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-linux-s390x@0.14.54:
     resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==}
     engines: {node: '>=12'}
@@ -3250,15 +3426,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-linux-s390x@0.15.14:
-    resolution: {integrity: sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==}
-    engines: {node: '>=12'}
-    cpu: [s390x]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-netbsd-64@0.14.54:
     resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==}
     engines: {node: '>=12'}
@@ -3268,15 +3435,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-netbsd-64@0.15.14:
-    resolution: {integrity: sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [netbsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-openbsd-64@0.14.54:
     resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==}
     engines: {node: '>=12'}
@@ -3286,15 +3444,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-openbsd-64@0.15.14:
-    resolution: {integrity: sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [openbsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-sunos-64@0.14.54:
     resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==}
     engines: {node: '>=12'}
@@ -3304,15 +3453,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-sunos-64@0.15.14:
-    resolution: {integrity: sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [sunos]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-windows-32@0.14.54:
     resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==}
     engines: {node: '>=12'}
@@ -3322,15 +3462,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-windows-32@0.15.14:
-    resolution: {integrity: sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-windows-64@0.14.54:
     resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==}
     engines: {node: '>=12'}
@@ -3340,15 +3471,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-windows-64@0.15.14:
-    resolution: {integrity: sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild-windows-arm64@0.14.54:
     resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==}
     engines: {node: '>=12'}
@@ -3358,15 +3480,6 @@ packages:
     dev: true
     optional: true
 
-  /esbuild-windows-arm64@0.15.14:
-    resolution: {integrity: sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
   /esbuild@0.11.3:
     resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==}
     hasBin: true
@@ -3402,34 +3515,35 @@ packages:
       esbuild-windows-arm64: 0.14.54
     dev: true
 
-  /esbuild@0.15.14:
-    resolution: {integrity: sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==}
+  /esbuild@0.19.10:
+    resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==}
     engines: {node: '>=12'}
     hasBin: true
     requiresBuild: true
     optionalDependencies:
-      '@esbuild/android-arm': 0.15.14
-      '@esbuild/linux-loong64': 0.15.14
-      esbuild-android-64: 0.15.14
-      esbuild-android-arm64: 0.15.14
-      esbuild-darwin-64: 0.15.14
-      esbuild-darwin-arm64: 0.15.14
-      esbuild-freebsd-64: 0.15.14
-      esbuild-freebsd-arm64: 0.15.14
-      esbuild-linux-32: 0.15.14
-      esbuild-linux-64: 0.15.14
-      esbuild-linux-arm: 0.15.14
-      esbuild-linux-arm64: 0.15.14
-      esbuild-linux-mips64le: 0.15.14
-      esbuild-linux-ppc64le: 0.15.14
-      esbuild-linux-riscv64: 0.15.14
-      esbuild-linux-s390x: 0.15.14
-      esbuild-netbsd-64: 0.15.14
-      esbuild-openbsd-64: 0.15.14
-      esbuild-sunos-64: 0.15.14
-      esbuild-windows-32: 0.15.14
-      esbuild-windows-64: 0.15.14
-      esbuild-windows-arm64: 0.15.14
+      '@esbuild/aix-ppc64': 0.19.10
+      '@esbuild/android-arm': 0.19.10
+      '@esbuild/android-arm64': 0.19.10
+      '@esbuild/android-x64': 0.19.10
+      '@esbuild/darwin-arm64': 0.19.10
+      '@esbuild/darwin-x64': 0.19.10
+      '@esbuild/freebsd-arm64': 0.19.10
+      '@esbuild/freebsd-x64': 0.19.10
+      '@esbuild/linux-arm': 0.19.10
+      '@esbuild/linux-arm64': 0.19.10
+      '@esbuild/linux-ia32': 0.19.10
+      '@esbuild/linux-loong64': 0.19.10
+      '@esbuild/linux-mips64el': 0.19.10
+      '@esbuild/linux-ppc64': 0.19.10
+      '@esbuild/linux-riscv64': 0.19.10
+      '@esbuild/linux-s390x': 0.19.10
+      '@esbuild/linux-x64': 0.19.10
+      '@esbuild/netbsd-x64': 0.19.10
+      '@esbuild/openbsd-x64': 0.19.10
+      '@esbuild/sunos-x64': 0.19.10
+      '@esbuild/win32-arm64': 0.19.10
+      '@esbuild/win32-ia32': 0.19.10
+      '@esbuild/win32-x64': 0.19.10
     dev: true
 
   /escalade@3.1.1:
@@ -3987,6 +4101,14 @@ packages:
     dev: true
     optional: true
 
+  /fsevents@2.3.3:
+    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
   /function-bind@1.1.1:
     resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
 
@@ -5186,6 +5308,12 @@ packages:
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
+  /nanoid@3.3.7:
+    resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+    hasBin: true
+    dev: true
+
   /natural-compare@1.4.0:
     resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
     dev: true
@@ -5706,6 +5834,15 @@ packages:
       source-map-js: 1.0.2
     dev: true
 
+  /postcss@8.4.32:
+    resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==}
+    engines: {node: ^10 || ^12 || >=14}
+    dependencies:
+      nanoid: 3.3.7
+      picocolors: 1.0.0
+      source-map-js: 1.0.2
+    dev: true
+
   /preact@10.11.3:
     resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==}
     dev: false
@@ -6008,12 +6145,25 @@ packages:
       yargs: 17.5.1
     dev: true
 
-  /rollup@2.79.1:
-    resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
-    engines: {node: '>=10.0.0'}
+  /rollup@4.9.1:
+    resolution: {integrity: sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==}
+    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
     hasBin: true
     optionalDependencies:
-      fsevents: 2.3.2
+      '@rollup/rollup-android-arm-eabi': 4.9.1
+      '@rollup/rollup-android-arm64': 4.9.1
+      '@rollup/rollup-darwin-arm64': 4.9.1
+      '@rollup/rollup-darwin-x64': 4.9.1
+      '@rollup/rollup-linux-arm-gnueabihf': 4.9.1
+      '@rollup/rollup-linux-arm64-gnu': 4.9.1
+      '@rollup/rollup-linux-arm64-musl': 4.9.1
+      '@rollup/rollup-linux-riscv64-gnu': 4.9.1
+      '@rollup/rollup-linux-x64-gnu': 4.9.1
+      '@rollup/rollup-linux-x64-musl': 4.9.1
+      '@rollup/rollup-win32-arm64-msvc': 4.9.1
+      '@rollup/rollup-win32-ia32-msvc': 4.9.1
+      '@rollup/rollup-win32-x64-msvc': 4.9.1
+      fsevents: 2.3.3
     dev: true
 
   /run-async@2.4.1:
@@ -6873,7 +7023,7 @@ packages:
       spdx-expression-parse: 3.0.1
     dev: true
 
-  /vite-plugin-compression@0.5.1(vite@3.2.7):
+  /vite-plugin-compression@0.5.1(vite@5.0.10):
     resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==}
     peerDependencies:
       vite: '>=2.0.0'
@@ -6881,12 +7031,12 @@ packages:
       chalk: 4.1.2
       debug: 4.3.4
       fs-extra: 10.1.0
-      vite: 3.2.7(@types/node@17.0.45)(sass@1.53.0)
+      vite: 5.0.10(@types/node@17.0.45)(sass@1.53.0)
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /vite-plugin-html@3.2.0(vite@3.2.7):
+  /vite-plugin-html@3.2.0(vite@5.0.10):
     resolution: {integrity: sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ==}
     peerDependencies:
       vite: '>=2.0.0'
@@ -6903,10 +7053,10 @@ packages:
       html-minifier-terser: 6.1.0
       node-html-parser: 5.3.3
       pathe: 0.2.0
-      vite: 3.2.7(@types/node@17.0.45)(sass@1.53.0)
+      vite: 5.0.10(@types/node@17.0.45)(sass@1.53.0)
     dev: true
 
-  /vite-plugin-mock@2.9.6(mockjs@1.1.0)(vite@3.2.7):
+  /vite-plugin-mock@2.9.6(mockjs@1.1.0)(vite@5.0.10):
     resolution: {integrity: sha512-/Rm59oPppe/ncbkSrUuAxIQihlI2YcBmnbR4ST1RA2VzM1C0tEQc1KlbQvnUGhXECAGTaQN2JyasiwXP6EtKgg==}
     engines: {node: '>=12.0.0'}
     peerDependencies:
@@ -6923,13 +7073,13 @@ packages:
       fast-glob: 3.2.12
       mockjs: 1.1.0
       path-to-regexp: 6.2.1
-      vite: 3.2.7(@types/node@17.0.45)(sass@1.53.0)
+      vite: 5.0.10(@types/node@17.0.45)(sass@1.53.0)
     transitivePeerDependencies:
       - rollup
       - supports-color
     dev: true
 
-  /vite-plugin-style-import@2.0.0(vite@3.2.7):
+  /vite-plugin-style-import@2.0.0(vite@5.0.10):
     resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==}
     peerDependencies:
       vite: '>=2.0.0'
@@ -6941,26 +7091,27 @@ packages:
       fs-extra: 10.1.0
       magic-string: 0.25.9
       pathe: 0.2.0
-      vite: 3.2.7(@types/node@17.0.45)(sass@1.53.0)
+      vite: 5.0.10(@types/node@17.0.45)(sass@1.53.0)
     dev: true
 
-  /vite-plugin-vue-setup-extend@0.4.0(vite@3.2.7):
+  /vite-plugin-vue-setup-extend@0.4.0(vite@5.0.10):
     resolution: {integrity: sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==}
     peerDependencies:
       vite: '>=2.0.0'
     dependencies:
       '@vue/compiler-sfc': 3.3.4
       magic-string: 0.25.9
-      vite: 3.2.7(@types/node@17.0.45)(sass@1.53.0)
+      vite: 5.0.10(@types/node@17.0.45)(sass@1.53.0)
     dev: true
 
-  /vite@3.2.7(@types/node@17.0.45)(sass@1.53.0):
-    resolution: {integrity: sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==}
-    engines: {node: ^14.18.0 || >=16.0.0}
+  /vite@5.0.10(@types/node@17.0.45)(sass@1.53.0):
+    resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==}
+    engines: {node: ^18.0.0 || >=20.0.0}
     hasBin: true
     peerDependencies:
-      '@types/node': '>= 14'
+      '@types/node': ^18.0.0 || >=20.0.0
       less: '*'
+      lightningcss: ^1.21.0
       sass: '*'
       stylus: '*'
       sugarss: '*'
@@ -6970,6 +7121,8 @@ packages:
         optional: true
       less:
         optional: true
+      lightningcss:
+        optional: true
       sass:
         optional: true
       stylus:
@@ -6980,13 +7133,12 @@ packages:
         optional: true
     dependencies:
       '@types/node': 17.0.45
-      esbuild: 0.15.14
-      postcss: 8.4.23
-      resolve: 1.22.2
-      rollup: 2.79.1
+      esbuild: 0.19.10
+      postcss: 8.4.32
+      rollup: 4.9.1
       sass: 1.53.0
     optionalDependencies:
-      fsevents: 2.3.2
+      fsevents: 2.3.3
     dev: true
 
   /vue-demi@0.13.11(vue@3.3.4):

+ 14 - 0
src/api/scene/sceneOperate.ts

@@ -201,3 +201,17 @@ export const getSceneList = (): Promise<
     method: 'get',
   });
 };
+
+//排序列表
+export const sortSceneList = (
+  data: sceneListType<
+    getListWorkshop<workspaceAddDatas, workShopTempleteType>,
+    labelModuleListType
+  >[],
+) => {
+  return http.request({
+    url: '/scene/updateSort',
+    method: 'put',
+    data,
+  });
+};

+ 17 - 52
src/views/dashboard/monitor/CompanyDrawer.vue

@@ -23,7 +23,7 @@
       </template>
       <el-form
         ref="ruleFormRef"
-        :model="ruleForm"
+        :model="ruleForm1"
         :rules="rules"
         label-width="90px"
         class="demo-ruleForm"
@@ -31,13 +31,13 @@
         status-icon
       >
         <el-form-item label="公司名称" prop="name">
-          <el-input v-model="ruleForm.name" style="width: 200px" />
+          <el-input v-model="ruleForm1.name" style="width: 200px" />
         </el-form-item>
         <el-form-item label="上级场景" prop="seniorScene">
-          <el-input v-model="ruleForm.seniorScene" style="width: 200px" disabled />
+          <el-input v-model="ruleForm1.seniorScene" style="width: 200px" disabled />
         </el-form-item>
         <el-form-item label="公司代码" prop="code">
-          <el-input v-model="ruleForm.code" style="width: 200px" />
+          <el-input v-model="ruleForm1.code" style="width: 200px" />
         </el-form-item>
         <el-form-item label="标签&模板" prop="sceneCode">
           <div style="width: 200px; height: 30px"></div>
@@ -108,21 +108,6 @@
   import { ElMessageBox } from 'element-plus';
   import { CirclePlus } from '@element-plus/icons-vue';
 
-  // import { ENABLED } from './use-method';
-  //   import { SubscribeItem } from '@/api/subscribe/subscribe';
-
-  // interface RuleForm {
-  //   name: string; //名称
-  //   seniorScene: string; //上级场景
-  //   code: string; //代码
-  //   sceneCode: string; //场景代码
-  //   tagCom?: string[]; //公司场景标签 可选多个
-  //   templateCom?: string[]; //公司场景模板 可选多个
-  //   tagWorkshop?: number; //场景标签  车间
-  //   templateWorkshop?: string; //车间模板
-  //   principal?: string; //负责人
-  // }
-
   interface SelectItemType {
     tag: string;
     template: string;
@@ -148,20 +133,9 @@
   //将表单数据传至父组件
   const emit = defineEmits(['upload-company-data', 'edit-company-data', 'update-tab-com']);
 
+  //drawer的开关
   const showDrawer = computed(() => props.tableCom);
 
-  // onMounted(() => {
-  //   emit('update:modelValue', tableCom.value);
-  // });
-  // const tableCom = ref(false);
-
-  //外界传来的打开el-drawer的指令
-  // watch(
-  //   () => props.tableCom,
-  //   (newValue) => {
-  //     tableCom.value = newValue;
-  //   },
-  // );
   //表格中的规则
   const ruleFormRef = ref<FormInstance>();
 
@@ -176,7 +150,7 @@
     templateWorkshop?: number; //车间模板
     principal?: string; //负责人
   }
-  const ruleForm = reactive<RuleForm>({
+  const ruleForm1 = reactive<RuleForm>({
     name: '',
     seniorScene: '顶级场景',
     code: '',
@@ -220,22 +194,13 @@
     ],
   });
 
-  // const companyAdd = () => {
-  //   tableCom.value = true;
-  //   resetDraw();
-  //   ruleForm.seniorScene = '顶级场景';
-  //   // emit('change-companyAddTitle', '添加公司');
-  //   // props.companyAddTitle = '添加公司';
-  //   // console.log('sceneList', sceneList.value);
-  //   // console.log('templateList', templateList.value);
-  // };
   watch(
     () => props.ruleForm,
     (newRuleForm) => {
       // console.log('111');
-      ruleForm.name = newRuleForm.name;
-      ruleForm.code = newRuleForm.code;
-      ruleForm.seniorScene = '顶级场景';
+      ruleForm1.name = newRuleForm.name;
+      ruleForm1.code = newRuleForm.code;
+      ruleForm1.seniorScene = '顶级场景';
       addEnable.value;
     },
     { deep: true },
@@ -278,29 +243,29 @@
   //添加新公司的提交
   const newCompanyAdd = (formEl: FormInstance | undefined) => {
     if (!formEl) return;
-    emit('upload-company-data', ruleForm, selectItems, addEnable, () => {
+    emit('upload-company-data', ruleForm1, selectItems, addEnable, () => {
       resetDraw();
     });
   };
 
   //编辑公司时的提交
   const editedSub = () => {
-    emit('edit-company-data', ruleForm, selectItems, addEnable, () => {
+    emit('edit-company-data', ruleForm1, selectItems, addEnable, () => {
       resetDraw();
     });
   };
 
   //重置编辑框
   const resetDraw = () => {
-    ruleForm.name = '';
+    ruleForm1.name = '';
 
-    ruleForm.code = '';
-    ruleForm.sceneCode = '';
+    ruleForm1.code = '';
+    ruleForm1.sceneCode = '';
     addEnable.value = 0;
     selectItems.value = [{ tag: '', template: '' }];
-    ruleForm.principal = '';
-    ruleForm.templateWorkshop = undefined;
-    ruleForm.tagWorkshop = undefined;
+    ruleForm1.principal = '';
+    ruleForm1.templateWorkshop = undefined;
+    ruleForm1.tagWorkshop = undefined;
   };
 </script>
 

+ 5 - 5
src/views/dashboard/monitor/WorkShopSpaceDrawer.vue

@@ -29,7 +29,7 @@
         <el-form-item :label="`${props.addCodeName}`" prop="code">
           <el-input v-model="ruleForm.code" />
         </el-form-item>
-        <el-form-item v-if="levelFindWorkshop" label="场景标签" prop="tagWorkshop">
+        <el-form-item v-if="props.levelFindWorkshop" label="场景标签" prop="tagWorkshop">
           <el-radio-group
             v-model="ruleForm.tagWorkshop"
             size="10px"
@@ -51,7 +51,7 @@
             /> -->
           </el-radio-group>
         </el-form-item>
-        <el-form-item v-if="levelFindWorkshop" label="车间模板" prop="templateWorkshop">
+        <el-form-item v-if="props.levelFindWorkshop" label="车间模板" prop="templateWorkshop">
           <el-radio-group
             v-model="ruleForm.templateWorkshop"
             size="10px"
@@ -65,7 +65,7 @@
             >
           </el-radio-group>
         </el-form-item>
-        <el-form-item v-if="!levelFindWorkshop" label="负责人" prop="principal">
+        <el-form-item v-if="!props.levelFindWorkshop" label="负责人" prop="principal">
           <el-input v-model="ruleForm.principal" />
         </el-form-item>
         <el-form-item label="状态">
@@ -79,8 +79,8 @@
       </el-form>
       <div style="position: absolute; left: 108px; bottom: 67px">
         <el-button v-if="!props.editWork" type="warning" @click="resetDraw">重置</el-button>
-        <el-button v-if="!props.editWork" type="primary" @click="addNewType"> 提交 </el-button>
-        <el-button v-if="props.editWork" type="primary" @click="editedSub"> 提交 </el-button>
+        <el-button v-if="!editWork" type="primary" @click="addNewType"> 提交 </el-button>
+        <el-button v-if="editWork" type="primary" @click="editedSub"> 提交 </el-button>
       </div>
     </el-drawer></div
   >

+ 3 - 2
src/views/dashboard/monitor/actionColomns.vue

@@ -2,7 +2,7 @@
   <div style="display: flex">
     <div style="display: flex; margin-right: 7px">
       <div
-        v-if="!props.subItem.parent"
+        v-if="props.subItem.parentId !== undefined"
         @click="changeConig"
         class="wordStyle"
         style="margin-right: 10px"
@@ -43,7 +43,7 @@
 </template>
 
 <script setup lang="ts">
-  import { computed } from 'vue';
+  // import { computed } from 'vue';
   //   import { SubscribeItem } from '@/api/subscribe/subscribe';
 
   interface User {
@@ -52,6 +52,7 @@
     code?: string;
     hasChildren?: boolean;
     children?: User[];
+    parentId?: number;
   }
 
   const props = defineProps<{

+ 123 - 40
src/views/dashboard/monitor/monitor.vue

@@ -255,12 +255,20 @@
   import { ref, onMounted, reactive, h, watch } from 'vue';
   import { Plus } from '@element-plus/icons-vue';
   import { BasicTable, BasicColumn } from '@/components/Table';
-  import type { FormRules } from 'element-plus';
+  // import type { FormRules } from 'element-plus';
   import { ElMessageBox } from 'element-plus';
   import ActionColomn from './actionColomns.vue';
   import CompanyDrawer from './CompanyDrawer.vue';
   import WorkshopAndWorkspace from './WorkShopSpaceDrawer.vue';
-  import { ENABLED, colomns, dataSourceWithParent, findItemLevel } from './use-method';
+  import {
+    ENABLED,
+    colomns,
+    dataSourceWithParent,
+    updateSerials,
+    findItemLevel,
+    findIndexByItem,
+    removeParent,
+  } from './use-method';
   import {
     ComAddDatas,
     addCompany,
@@ -275,6 +283,7 @@
     editWorkspace,
     delWorkspace,
     labelModuleListType,
+    sortSceneList,
   } from '@/api/scene/sceneOperate';
   import useScene from './use-scene';
   import {
@@ -294,7 +303,6 @@
   const addEnable = ref(ENABLED.TRUE); //启动按钮的值
 
   //表格中的规则
-  // const ruleFormRef = ref<FormInstance>();
 
   interface RuleForm {
     name: string; //名称
@@ -318,52 +326,56 @@
     templateWorkshop: undefined,
     principal: '',
   });
-  const rules = reactive<FormRules<RuleForm>>({
-    name: [
-      { required: true, message: '', trigger: 'blur' },
-      { min: 1, max: 100, message: 'Length should be 3 to 5', trigger: 'blur' },
-    ],
-    seniorScene: [
-      { required: true, message: '', trigger: 'blur' },
-      { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
-    ],
-    code: [
-      { required: true, message: '', trigger: 'blur' },
-      { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
-    ],
-    sceneCode: [
-      { required: true, message: '', trigger: 'blur' },
-      { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
-    ],
-    tagCom: [{ required: true, message: '', trigger: 'blur' }],
-    templateCom: [{ required: true, message: '', trigger: 'blur' }],
-    tagWorkshop: [
-      { required: true, message: '', trigger: 'blur' },
-      { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
-    ],
-    templateWorkshop: [
-      { required: true, message: '', trigger: 'blur' },
-      { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
-    ],
-    principal: [
-      { required: true, message: '', trigger: 'blur' },
-      { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
-    ],
-  });
+  // const rules = reactive<FormRules<RuleForm>>({
+  //   name: [
+  //     { required: true, message: '', trigger: 'blur' },
+  //     { min: 1, max: 100, message: 'Length should be 3 to 5', trigger: 'blur' },
+  //   ],
+  //   seniorScene: [
+  //     { required: true, message: '', trigger: 'blur' },
+  //     { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
+  //   ],
+  //   code: [
+  //     { required: true, message: '', trigger: 'blur' },
+  //     { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
+  //   ],
+  //   sceneCode: [
+  //     { required: true, message: '', trigger: 'blur' },
+  //     { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
+  //   ],
+  //   tagCom: [{ required: true, message: '', trigger: 'blur' }],
+  //   templateCom: [{ required: true, message: '', trigger: 'blur' }],
+  //   tagWorkshop: [
+  //     { required: true, message: '', trigger: 'blur' },
+  //     { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
+  //   ],
+  //   templateWorkshop: [
+  //     { required: true, message: '', trigger: 'blur' },
+  //     { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
+  //   ],
+  //   principal: [
+  //     { required: true, message: '', trigger: 'blur' },
+  //     { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
+  //   ],
+  // });
 
   //添加组件的添加功能
   const table = ref(false); //添加公司级的场景
   const tableCom = ref(false); //添加车间或者工位
 
+  //改变el-drawer公司的状态
   const handleUpdateTableCom = (val: boolean) => {
     tableCom.value = val;
   };
-  const handleUpdataWorkTab = (val: boolean) => {
-    table.value = val;
+
+  //改变el-drawer车间&工位的状态
+  const handleUpdataWorkTab = (showDrawer) => {
+    table.value = showDrawer;
   };
-  //添加公司级场景
 
+  //公司el-drawer的标题
   const companyAddTitle = ref('');
+  //是否公司编辑
   const comEdit = ref<boolean>(false);
 
   const addTitle = ref('');
@@ -376,6 +388,50 @@
     dataSourceWithParent(tableData.value, null);
     //获取tableData数据
     getSceneDetail();
+
+    // // 示例数据
+    const data = [
+      {
+        id: 1,
+        tag: 'hailou',
+        children: [
+          {
+            id: 1,
+            tag: 'anlai',
+            children: [
+              { id: 1, tag: '33233', children: [] },
+              { id: 2, tag: 'anlai110', children: [] },
+              { id: 3, tag: 'anlai122', children: [] },
+            ],
+          },
+          { id: 2, tag: 'hailou110', children: [] },
+          { id: 3, tag: 'hailou001', children: [] },
+        ],
+      },
+      {
+        id: 2,
+        tag: 'nihao',
+        children: [
+          {
+            id: 1,
+            tag: 'anlai',
+            children: [
+              { id: 1, tag: 'vaigou', children: [] },
+              { id: 2, tag: 'kegou', children: [] },
+            ],
+          },
+          { id: 2, tag: 'kengzi', children: [] },
+        ],
+      },
+    ];
+
+    // 查找 { id: 1, tag: 'vaigou', children: [] } 的索引
+    const result1 = findIndexByItem(data, { id: 1, tag: '33233', children: [] });
+    console.log('Result 1:', result1); // 输出 [1, 0, 0]
+
+    // 查找 { id: 2, tag: 'kengzi', children: [] } 的索引
+    const result2 = findIndexByItem(data, { id: 2, tag: 'anlai110', children: [] });
+    console.log('Result 2:', result2); // 输出 [1, 1, -1]
   });
   watch(
     () => tableData.value,
@@ -394,7 +450,11 @@
 
   const companyAdd = () => {
     tableCom.value = true;
+    // emit;
+
     resetDraw();
+    console.log('ruleForm', ruleForm);
+
     addEnable.value = ENABLED.TRUE;
     ruleForm.seniorScene = '顶级场景';
     companyAddTitle.value = '添加公司';
@@ -669,6 +729,9 @@
     editedItem.value = { ...row }; // 将当前行的内容拷贝到 editedItem 中,以便编辑
     editWork.value = true;
     level.value = findItemLevel(tableData.value, row.id, row.name);
+    console.log('level.value', level.value);
+    console.log('editedItem.value ', editedItem.value);
+
     if (level.value === 0) {
       tableCom.value = true;
       companyAddTitle.value = '编辑公司';
@@ -686,6 +749,7 @@
       ruleForm.code = editedItem.value.code!;
       addEnable.value = editedItem.value.status!;
     } else if (level.value === 1) {
+      levelFindWorkshop.value = true;
       addTitle.value = '编辑车间';
       addName.value = '车间名称';
       addCodeName.value = '车间代码';
@@ -698,6 +762,7 @@
       ruleForm.tagWorkshop = editedItem.value.sceneLabelId;
       ruleForm.templateWorkshop = editedItem.value.workshopModule.id;
     } else if (level.value === 2) {
+      levelFindWorkshop.value = false;
       addTitle.value = '编辑工位';
       addName.value = '工位名称';
       addCodeName.value = '工位代码';
@@ -766,9 +831,10 @@
 
   const editedSub = (workRuleForm, addEnableWork) => {
     const allCodes = flattenCodes(tableData.value);
+    console.log('allCodes', allCodes);
 
     if (allCodes.indexOf(workRuleForm.code) > -1) {
-      if (editedItem.value.code !== ruleForm.code) {
+      if (editedItem.value.code !== workRuleForm.code) {
         ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
           confirmButtonText: '确认',
           cancelButtonText: '取消',
@@ -848,6 +914,15 @@
         tableData.value.splice(index - 1, 2, row, tableData.value[index - 1]);
       }
     }
+
+    tableData.value = updateSerials(tableData.value);
+    sortSceneList(removeParent(tableData.value))
+      .then(() => {
+        getSceneDetail();
+      })
+      .catch((...e) => {
+        console.error('catch error', ...e);
+      });
   };
 
   //向下排序
@@ -865,7 +940,15 @@
         tableData.value.splice(index, 2, tableData.value[index + 1], row);
       }
     }
-    // }
+    tableData.value = updateSerials(tableData.value);
+
+    sortSceneList(removeParent(tableData.value))
+      .then(() => {
+        getSceneDetail();
+      })
+      .catch((...e) => {
+        console.error('catch error', ...e);
+      });
   };
 </script>
 

+ 115 - 19
src/views/dashboard/monitor/use-method.ts

@@ -36,16 +36,62 @@ export const dataSourceWithParent = (d: DataSourceUser[], parent: DataSourceUser
   return d;
 };
 
-export const options = [
-  {
-    value: 'Option1',
-    label: 'Option1',
-  },
-  {
-    value: 'Option2',
-    label: 'Option2',
-  },
-];
+export function removeParent(data) {
+  return data.map((item) => {
+    // 删除 tag 属性
+    delete item.parent;
+
+    // 递归处理子项
+    if (item.children && item.children.length > 0) {
+      item.children = removeParent(item.children);
+    }
+
+    return item;
+  });
+}
+
+//找到各个层级
+export function findIndexByItem(data, targetItem, path = []) {
+  for (let i = 0; i < data.length; i++) {
+    const currentPath = path.concat(i);
+    if (data[i].id === targetItem.id && data[i].name === targetItem.name) {
+      return currentPath;
+    }
+    if (data[i].children && data[i].children.length > 0) {
+      const childResult = findIndexByItem(data[i].children, targetItem, currentPath);
+      if (childResult.length > 0) {
+        return childResult;
+      }
+    }
+  }
+  return [];
+}
+
+//用于重新修改serial
+export const updateSerials = (data) => {
+  for (let i = 0; i < data.length; i++) {
+    data[i].serial = i;
+
+    // if (currentItem.id === targetId) {
+    //   if (!currentItem.children) {
+    //     currentItem.children = [];
+    //   }
+    //   currentItem.children.push(newAdd);
+    //   return true; // 表示已经找到并修改
+    // }
+
+    // 如果有子项,递归查找
+    if (data[i].children && data[i].children.length > 0) {
+      updateSerials(data[i].children);
+
+      // if (found) {
+      //   return true; // 如果在子项中找到目标项,停止继续查找
+      // }
+    }
+  }
+  return data;
+  // return false; // 表示未找到目标项
+};
 
 //用于新增数据
 export const updateData = (data, targetId, newAdd) => {
@@ -93,6 +139,65 @@ export const findItemLevel = (data, targetId, targetName, currentLevel = 0) => {
   return -1;
 };
 
+//查询该数据在各个层级的索引
+export const findItemEachLevel = (
+  data,
+  targetId,
+  targetName,
+  currentLevel = 0,
+  level1 = -1,
+  level2 = -1,
+  level3 = -1,
+) => {
+  // const level1 = ref<number>(-1);
+  // const level2 = ref<number>(-1);
+  // const level3 = ref<number>(-1);
+  for (let i = 0; i < data.length; i++) {
+    const item = data[i];
+
+    if (item.id === targetId && item.name === targetName) {
+      // return currentLevel;
+      if (currentLevel === 0) {
+        level1 = i;
+        return { level1: level1, level2: level2, level3: level3 };
+      } else if (currentLevel === 1) {
+        level2 = i;
+        return { level1: level1, level2: level2, level3: level3 };
+      } else if (currentLevel === 2) {
+        level3 = i;
+        return { level1: level1, level2: level2, level3: level3 };
+      }
+    }
+
+    if (item.children && item.children.length > 0) {
+      const childLevel = findItemLevel(item.children, targetId, targetName, currentLevel + 1, i);
+      if (childLevel !== -1) {
+        return childLevel;
+      }
+    }
+  }
+
+  return { level1: level1.value, level2: level2.value, level3: level3.value };
+};
+
+export function findIndexById(data, targetId, targetName, level = 1) {
+  for (let i = 0; i < data.length; i++) {
+    if (data[i].id === targetId && data[i].name === targetName) {
+      return { level1: level, level2: -1, level3: -1 };
+    }
+    if (data[i].children && data[i].children.length > 0) {
+      const childResult = findIndexById(data[i].children, targetId, targetName, level + 1);
+      if (childResult.level1 !== -1) {
+        if (childResult.level2 === -1 && childResult.level3 === -1) {
+          return { level1: level, level2: childResult.level1, level3: -1 };
+        }
+        return childResult;
+      }
+    }
+  }
+  return { level1: -1, level2: -1, level3: -1 };
+}
+
 //删除行
 export const deleteTableRow = (dataSource, targetId) => {
   const deleteRecursive = (data) => {
@@ -172,15 +277,6 @@ export const editTableRow = (
   editTRecursive(dataSource);
 };
 
-// export const convertArray = (inputArray) => {
-//   return inputArray.map((item) => {
-//     const [start, end] = item.split('-');
-//     console.log(start, end);
-
-//     return { tag: start, templete: end };
-//   });
-// };
-
 export enum ENABLED {
   FALSE = 1,
   TRUE = 0,